Skip to content

qa: walk gate tri-state verdicts (GREEN/RED/ERROR), provenance stamps, door-cross camera re-assert#1613

Merged
100yenadmin merged 2 commits into
mainfrom
walk-gate-hardening
Jul 16, 2026
Merged

qa: walk gate tri-state verdicts (GREEN/RED/ERROR), provenance stamps, door-cross camera re-assert#1613
100yenadmin merged 2 commits into
mainfrom
walk-gate-hardening

Conversation

@100yenadmin

Copy link
Copy Markdown
Member

Why

An adversarial review of the walkability gate (qa/walk_test.py) flagged one real risk class: a harness/infrastructure defect must never read as a walkability verdict — in either direction. A player/engine outage was scoring as a RED room defect (blaming a healthy room), and a missing /debug camera extension was folded into the same hard-fail bucket as a genuine pose mismatch. Both directions are wrong: infra noise that reads as RED wastes a re-authoring cycle on a good room; and — the more dangerous inverse the gate must structurally prevent — anything that lets a broken room slip through green.

This change is additive: a healthy run's GREEN behavior is byte-for-byte unchanged (no drive-errors, no harness gaps → identical counts → GREEN/0). Every reclassification only fires on a path that a healthy run never takes.

What

1. Tri-state semantics. classify_verdict(report) -> (verdict, exit_code) is now the single pure decision point:

failure type verdict class verdict / exit
reachable / impassable / path / door / orphan fail walkability RED / 1
camera pose MISMATCH (wrong ortho/rotation/aim) walkability RED / 1
door-cross pose mismatch (dest or home leg) walkability RED / 1
visual zero-measurable-case fail; impassable timeout-fail walkability RED / 1
player/engine unreachable (drive-error: in _drive_and_check) harness ERROR / 2
/debug missing camera fields entirely / unreachable harness ERROR / 2
door /click threw; door-cross /debug unreachable harness ERROR / 2
real walkability fail AND harness errors both present walkability RED / 1 (real fail wins)
clean GREEN / 0

report["harness_errors"]: list[str] collects the harness class. Exit codes: 0 GREEN / 1 RED / 2 ERROR. The visual fail-on-zero-measurable-cases and impassable timeout-counts-as-fail semantics stay walkability (they guard vacuous greens); only actual exceptions become harness. Where a category was ambiguous, it is classified so it can never certify a broken room green.

2. Provenance stamps in the report (→ walk_report.json): schema_version: 1, repo_sha, manifest_sha256, ts (UTC ISO8601), engine_url, qa_url. Certification (#1607) pins artifact shas at cert level; the report self-describing its provenance closes the traceability loop. Factored into _init_report(...) for offline unit-testing.

3. Door-cross camera re-assert. _check_door_cross re-fetches /debug after cross-arrival and re-runs check_camera_pose against the DESTINATION room's pinned ortho, and again against HOME's ortho after the return leg. A pose mismatch there = RED (the camera-contract regression the gate exists to catch); /debug unreachable there = harness. Existing door pass/fail counting preserved; pose results added into the door case records.

qa/room_pipeline.pystage_walk maps an ERROR verdict to status SKIP with detail "harness error — retry/investigate (never a verdict): <first errors>". SKIP already blocks shippable (correct: a broken harness never reads as RED and never certifies the room).

Tests

qa/test_walk_test.py extended (+21 tests, 30 total, offline/no live services): tri-state verdict + exit classification incl. the real-fail-wins-over-harness case; provenance keys via _init_report; and the pure pose-mismatch-vs-harness classifiers (classify_camera_fails, classify_pose_observation, is_drive_error).

Run: uv run --directory servers/engine --group dev python -m pytest ../../qa/test_walk_test.py -q -p no:xdist30 passed.

Do NOT merge — for orchestrator review.

@coderabbitai

coderabbitai Bot commented Jul 16, 2026

Copy link
Copy Markdown

Review Change Stack

Warning

Review limit reached

You’ve reached a temporary PR review limit under our Fair Usage Limits Policy.

Your recent review volume is higher than typical usage, so adaptive limits are currently applied.

Next review available in: 38 minutes

Enable usage-based reviews in Billing to review now. Otherwise, wait until the next included review is available.
You're only billed for reviews past your plan's rate limits ($0.25/file).

How can I continue?

After more reviews become available, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

To avoid repeated limits, reduce automatic review volume by pausing incremental auto-reviews earlier, using label-based review opt-in, excluding WIP or generated PR titles, or requesting reviews manually when the PR is ready. If your team needs uninterrupted high-volume reviews, an organization admin can enable usage-based reviews.

How do review limits work?

CodeRabbit enforces per-developer PR review limits for each organization. Most developers receive the normal plan review availability.

For paid Pro and Pro+ PR reviews, CodeRabbit uses adaptive limits for sustained high-volume activity. When a developer's recent PR review activity reaches the 95th percentile or higher among CodeRabbit users, additional reviews become available more gradually as earlier reviews age out of the rolling window.

Please refer docs for additional details.

Review details
⚙️ Run configuration

Configuration used: Organization UI

Review profile: ASSERTIVE

Plan: Pro Plus

Run ID: 3f8f6760-8d79-4b12-9d42-adb3cebfe4f8

📥 Commits

Reviewing files that changed from the base of the PR and between aca6e16 and 92edf8d.

📒 Files selected for processing (4)
  • qa/room_pipeline.py
  • qa/test_room_certification.py
  • qa/test_walk_test.py
  • qa/walk_test.py
📝 Walkthrough

Walkthrough

Walk testing now distinguishes walkability failures from harness defects, records provenance and diagnostics, captures door-cross pose observations, returns tri-state exit codes, and maps harness-only errors to skipped room results. Confidence: 97%.

Changes

Walkability verdict classification

Layer / File(s) Summary
Classification and report contract
qa/walk_test.py, qa/test_walk_test.py
Pure classifiers separate harness errors from walkability failures, initialize provenance fields, and enforce walkability-over-harness precedence with deterministic tests.
Door-cross pose observations
qa/walk_test.py
Door traversal captures /debug observations at the destination and home legs, supports optional room orthos, and classifies unreachable debug responses separately from pose mismatches.
Run-gate and process results
qa/walk_test.py
Reachability, impassability, and door checks record harness diagnostics; final reports and process exits use GREEN, RED, or ERROR classification.
Room-pipeline handling
qa/room_pipeline.py
Harness-only ERROR reports become SKIP results with up to three aggregated harness-error details.

Estimated code review effort: 3 (Moderate) | ~25 minutes

Sequence Diagram(s)

sequenceDiagram
  participant run_gate
  participant DebugEndpoint
  participant classify_verdict
  participant stage_walk
  run_gate->>DebugEndpoint: request /debug during walk checks
  DebugEndpoint-->>run_gate: pose data or harness error
  run_gate->>classify_verdict: classify collected report
  classify_verdict-->>run_gate: GREEN, RED, or ERROR
  stage_walk->>stage_walk: convert harness ERROR to SKIP
Loading
🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Description check ⚠️ Warning Largely incomplete versus the required template; it omits linked issue, tracker, CLA, review state, release, evidence, and rollback sections. Confidence 94%. Add the missing template sections, especially Linked Issue, Tracker/Milestone, Licensing/CLA, Review Thread State, Validation, Release Notes, Safety/Rollback, Evidence, and Notes For Next Agent.
✅ Passed checks (4 passed)
Check name Status Explanation
Title check ✅ Passed Clear, accurate summary of the tri-state walk-gate plus provenance and door-cross camera changes. Confidence 96%.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch walk-gate-hardening

Comment @coderabbitai help to get the list of available commands.

@evaos-code-review-bot

evaos-code-review-bot Bot commented Jul 16, 2026

Copy link
Copy Markdown

evaOS review status: completed

PR: #1613 - qa: walk gate tri-state verdicts (GREEN/RED/ERROR), provenance stamps, door-cross camera re-assert
Head: aca6e162541af14600742055d95ffdb13c5a2d75
Updated: 2026-07-16T06:10:13.863Z

evaOS review completed for this PR head.

Automation note: agents should wait for this comment to reach completed, stale_head, closed_or_merged_before_review, skipped, or failed before treating evaOS review as settled for this head. provider_deferred means evaOS still intends to retry.

PR URL: #1613

Review URL: #1613 (review)

coderabbitai[bot]
coderabbitai Bot previously requested changes Jul 16, 2026

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 3

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@qa/room_pipeline.py`:
- Around line 93-97: Add a full-mode regression test in the room pipeline test
suite covering coherence=GREEN with walk=SKIP, and assert that the result is not
shippable or certified. Ensure the test exercises the ERROR-to-SKIP mapping in
the report handling flow so an unavailable walk gate cannot certify the room.

In `@qa/walk_test.py`:
- Around line 564-567: Update qa/walk_test.py lines 564-567 in _drive_and_check
to return the existing drive-error sentinel when every post-click combat-surface
status poll fails, while preserving normal timeout handling when any poll
responds. At lines 583-587, retain and use the sentinel skip path so unavailable
polling cannot pass impassable checks. At lines 600-605, make failed door or
return-leg polling produce explicit harness-error details rather than an
ordinary door result, and add tests distinguishing responsive timeouts from
complete transport outages.
- Around line 402-405: Update the pose-capture logic around crossed and the
return loop so destination snapshots are recorded only after confirming the
party is at target, not merely because it left home. Likewise, record the home
pose only after confirmed return; a return timeout must produce a door failure
instead of comparing the stranded room. Add mocked coverage for wrong-target
arrival and return timeout.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: ASSERTIVE

Plan: Pro Plus

Run ID: ce61bea2-935f-4830-b1e4-7e96a623d768

📥 Commits

Reviewing files that changed from the base of the PR and between 0b5cc68 and aca6e16.

📒 Files selected for processing (3)
  • qa/room_pipeline.py
  • qa/test_walk_test.py
  • qa/walk_test.py
📜 Review details
⏰ Context from checks skipped due to timeout. (9)
  • GitHub Check: viewer-tests
  • GitHub Check: test
  • GitHub Check: Analyze (python)
  • GitHub Check: Analyze (javascript-typescript)
  • GitHub Check: Analyze (csharp)
  • GitHub Check: Analyze (python)
  • GitHub Check: Analyze (javascript-typescript)
  • GitHub Check: viewer-tests
  • GitHub Check: test
🧰 Additional context used
📓 Path-based instructions (1)
**/*

📄 CodeRabbit inference engine (AGENTS.md)

**/*: Treat /Users/lume/WorldOS as the canonical local Mac app/private-art checkout for WorldOS GUI and native-app testing.
Use /Volumes/LEXAR/Codex for Codex artifacts, scratch files, screenshots, reports, and downloaded CI/VM artifacts.
Before install, build, or test commands, verify pwd; GUI/native app runs must use /Users/lume/WorldOS or an approved same-disk worktree configuration.
Use the codex/ prefix for new branches unless instructed otherwise.

Files:

  • qa/room_pipeline.py
  • qa/walk_test.py
  • qa/test_walk_test.py
🪛 ast-grep (0.44.1)
qa/walk_test.py

[error] 307-308: Command coming from incoming request
Context: subprocess.run(["git", "-C", str(REPO), "rev-parse", "--short", "HEAD"],
capture_output=True, text=True, timeout=10)
Note: [CWE-78] Improper Neutralization of Special Elements used in an OS Command ('OS Command Injection').

(subprocess-from-request)

qa/test_walk_test.py

[warning] 214-214: Do not make http calls without encryption
Context: "http://engine:8766"
Note: [CWE-319] Cleartext Transmission of Sensitive Information.

(requests-http)


[warning] 214-214: Do not make http calls without encryption
Context: "http://qa:8971"
Note: [CWE-319] Cleartext Transmission of Sensitive Information.

(requests-http)


[warning] 217-217: Do not make http calls without encryption
Context: "http://engine:8766"
Note: [CWE-319] Cleartext Transmission of Sensitive Information.

(requests-http)


[warning] 217-217: Do not make http calls without encryption
Context: "http://qa:8971"
Note: [CWE-319] Cleartext Transmission of Sensitive Information.

(requests-http)

🪛 Ruff (0.15.21)
qa/walk_test.py

[warning] 305-305: Missing return type annotation for private function _repo_sha

(ANN202)


[error] 308-308: subprocess call: check for execution of untrusted input

(S603)


[warning] 308-308: subprocess.run without explicit check argument

Add explicit check=False

(PLW1510)


[error] 308-308: Starting a process with a partial executable path

(S607)


[warning] 315-315: Missing return type annotation for private function _manifest_sha256

(ANN202)


[warning] 377-377: Missing return type annotation for private function _check_door_cross

(ANN202)


[error] 419-420: try-except-pass detected, consider logging the exception

(S110)


[warning] 446-446: Missing return type annotation for private function _room_ortho_opt

(ANN202)

qa/test_walk_test.py

[warning] 157-157: Missing return type annotation for private function _base_report

(ANN202)


[warning] 157-157: Missing type annotation for **over

(ANN003)


[warning] 218-218: Assertion should be broken down into multiple parts

Break down assertion into multiple parts

(PT018)


[warning] 219-219: Assertion should be broken down into multiple parts

Break down assertion into multiple parts

(PT018)


[warning] 220-220: Assertion should be broken down into multiple parts

Break down assertion into multiple parts

(PT018)


[warning] 221-221: Assertion should be broken down into multiple parts

Break down assertion into multiple parts

(PT018)


[warning] 222-222: Assertion should be broken down into multiple parts

Break down assertion into multiple parts

(PT018)


[warning] 231-231: Assertion should be broken down into multiple parts

Break down assertion into multiple parts

(PT018)


[warning] 240-240: Assertion should be broken down into multiple parts

Break down assertion into multiple parts

(PT018)


[warning] 245-245: Assertion should be broken down into multiple parts

Break down assertion into multiple parts

(PT018)


[warning] 252-252: Assertion should be broken down into multiple parts

Break down assertion into multiple parts

(PT018)

🔇 Additional comments (2)
qa/walk_test.py (1)

245-348: LGTM!

Also applies to: 368-374, 446-456, 530-542, 650-650, 734-750

qa/test_walk_test.py (1)

154-261: LGTM!

Comment thread qa/room_pipeline.py
Comment thread qa/walk_test.py Outdated
Comment thread qa/walk_test.py

@evaos-code-review-bot evaos-code-review-bot Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Walkthrough

PR: #1613 - qa: walk gate tri-state verdicts (GREEN/RED/ERROR), provenance stamps, door-cross camera re-assert
Head: aca6e162541af14600742055d95ffdb13c5a2d75 into main. Review event: COMMENT.
Provider: GLM/Z.ai through ZCode (zcode-glm, zcode, model GLM-5.2).

Estimated review effort: 3/5 (~36 min)

Changed Files

File Status Churn Purpose Risk
qa/room_pipeline.py modified +8/-0 Changed file Moderate: validated P2 finding
qa/test_walk_test.py modified +108/-0 Test coverage Low
qa/walk_test.py modified +185/-20 Changed file Elevated: validated P1 finding

Review Signal

Validated inline findings: 3 (P0: 0, P1: 1, P2: 1, P3: 1).
Dropped findings before posting: 1. High-severity findings: 1.

Risk Taxonomy

  • Runtime correctness: 3

Validation and Proof

1 required validation/proof recommendation(s) selected from changed files.

  • required: Unity editor or Play Mode smoke - WorldOS repo profile implies Unity runtime risk. Proof: Unity editor smoke; Play Mode log; scene/prefab screenshot or recording.
    Proof status: missing - 1 required validation/proof recommendation(s) missing from PR metadata.
    Profile validation hints: Prefer correctness, persistence, CI, release, and regression findings over style-only feedback.
    Profile proof expectations: Look for Unity editor, play-mode, fixture, or focused smoke evidence when runtime behavior changes.

Related Context

Related issues/PRs: #1607.
Suggested labels: bug, tests.
Suggested reviewers: none from current metadata.

Review Settings Preview

  • Profile: assertive
  • Enabled sections: Review summary (inline_review); Walkthrough (inline_review); Changed-files table (walkthrough); Effort estimate (walkthrough); Related issues/PRs (walkthrough); Suggested labels (suggestion_only); Review status comment (sticky_status)
  • Path instructions: Assets/** - Prioritize scene, prefab, save-state, asset-reference, and gameplay regressions.
  • Path instructions: ProjectSettings/** - Treat build, platform, input, graphics, and release behavior changes as high risk.
  • Label suggestions: unity, gameplay, regression-hardening
  • Reviewer suggestions: none
  • Suggestion behavior: suggestions only; labels and reviewers are not auto-applied.
  • Roadmap-only settings: auto-apply labels; auto-request reviewers; required status checks

Pre-merge checklist

  • Inline comments target current RIGHT-side diff lines.
  • No secret-like content survived into posted inline comments.
  • REQUEST_CHANGES is only used when eligible P0/P1 findings survive validation.
  • Required behavior proof is present or not applicable.
  • Labels and reviewers are suggestions only; the bot did not auto-apply them.

Comment thread qa/walk_test.py Outdated
Comment thread qa/room_pipeline.py
Comment thread qa/walk_test.py

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: aca6e16254

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread qa/room_pipeline.py
Comment thread qa/walk_test.py
Comment thread qa/walk_test.py
… pose, poll-outage harness, .get()-safe verdict, fire-VFX blob masking
@100yenadmin

Copy link
Copy Markdown
Member Author

Additional fix (live-run finding, no review comment id): animated-fire-VFX blob masking (#1525)

The first walk gates on the generated dwing_room_* rooms ran RED purely in the VISUAL stage while engine/camera/doors were all green (19/0, 34/0, 1/0; camOrtho exact). Case forensics: failures clustered at cells near brazier props with n_blobs=2 — the arrival blob read 164–272px off while the departure blob matched at 30–56px. The client spawns animated fire VFX at brazier-kind props, and the frame-to-frame flame flicker produces a large diff blob that wins the nearest-neighbour race against the actor sprite. The two passing cases were far from fire.

Additive fix in walk_test visual mode (masking can only ever REMOVE candidate blobs — never invent a pass; a case that masks to zero blobs stays a loud fail, same as zero-measurable):

  1. Fire-blob maskingfire_anchor_cells() reads props with kind in {brazier, campfire, hearth} from the room geometry (and surface), projects each to screen via the existing world_to_window_px, and mask_fire_blobs() drops any diff blob whose centroid lies within ~1.5 cells (cell_px) of a fire anchor, before nearest-neighbour selection.
  2. Fire-aware samplingselect_visual_cells() prefers cells ≥2 chebyshev from any fire anchor, falling back to fire-adjacent cells only to fill the requested N. Existing exclusions (current/zero-hop cell) and the fail-on-zero-measurable protection are kept.
  3. Units (offline): masked-flicker-blob → actor selected; all-masked → empty (loud fail); fire-adjacent deprioritized but pool still fills to N.

🤖 Addressed by Claude Code

@evaos-code-review-bot

evaos-code-review-bot Bot commented Jul 16, 2026

Copy link
Copy Markdown

evaOS review status: closed or merged before review

PR: #1613 - qa: walk gate tri-state verdicts (GREEN/RED/ERROR), provenance stamps, door-cross camera re-assert
Head: 92edf8d78cb2a1ebf5c63346b3290f19292f3350
Updated: 2026-07-16T07:07:50.979Z

evaOS review stopped because the PR closed or merged before this queued head could be reviewed.

Automation note: agents should wait for this comment to reach completed, stale_head, closed_or_merged_before_review, skipped, or failed before treating evaOS review as settled for this head. provider_deferred means evaOS still intends to retry.

PR URL: #1613

Details: state=closed

@100yenadmin
100yenadmin dismissed coderabbitai[bot]’s stale review July 16, 2026 06:30

All 3 findings fixed + verified at 92edf8d (50 tests): _is_shippable requires a GREEN walk verdict (SKIP/ERROR can never certify; resume re-runs cached SKIP); door-cross poses captured only on confirmed legs; total poll outages return the harness sentinel. Threads resolved with per-fix replies.

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 92edf8d78c

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread qa/walk_test.py
Comment on lines +703 to +705
if isinstance(detail.get("error"), str) and detail["error"].startswith("click:"):
report["harness_errors"].append(f"door {list(cell)}: {detail['error']}")
continue

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Classify door poll outages as harness errors

When the engine drops after a door click, _check_door_cross() still swallows /combat-surface polling exceptions and returns ok=False with crossed_to=None, not a click: error. This new harness branch only catches click exceptions, so the following door counter records a walkability failure and classify_verdict() emits RED even though the tri-state contract says player/engine outages should be ERROR; propagate poll failures from the door-cross path into harness_errors.

Useful? React with 👍 / 👎.

Comment thread qa/walk_test.py
or report.get("doors", {}).get("fail")
or report.get("orphans")
or report.get("path", {}).get("fail")
or report.get("visual", {}).get("fail")

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Treat visual capture failures as harness errors

When --visual N is enabled and the QA visual harness fails (for example /health or /shot is unavailable, or the visual move returns drive-error:), _visual_registration() produces no cases or ok=False cases and run_gate() increments report['visual']['fail'] without adding a harness error. Because this line treats every visual failure as a walkability failure, screenshot/QA outages can be reported as RED room defects instead of ERROR; split visual transport/capture failures into harness_errors before counting genuine registration misses.

Useful? React with 👍 / 👎.

Comment thread qa/walk_test.py
# fire-anchor cells (brazier/hearth VFX) from the room geometry and/or the surface props — used to
# mask animated-flame diff blobs in visual mode and to prefer fire-distant visual sample cells.
fire_cells = fire_anchor_cells(_load_room_geometry(room)) | fire_anchor_cells(surf)
report = _init_report(room, ortho, scene, mask, engine, qa)

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Return ERROR for initial surface outages

When the engine is down before the first /combat-surface read, run_gate() raises before this report is initialized, so qa/walk_test.py never reaches classify_verdict() or writes an ERROR/2 report. The pipeline wrapper converts that exception to SKIP, but the documented walk gate CLI still exits via traceback for a harness outage; catch the initial surface probe and add it to harness_errors so direct gate runs get the new tri-state semantics.

Useful? React with 👍 / 👎.

Comment thread qa/walk_test.py
Comment on lines +238 to +240
if p.get("kind") in FIRE_KINDS:
for cr in p.get("cells", []):
out.add((int(cr[0]), int(cr[1])))

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Recognize current fire anchors before masking

For rooms like camp_clearing_night, the animated fire is declared as a manifest effects entry and the live scene-grid prop kind is campfire_pit; other existing scene grids use kinds such as stone_hearth / brazier_r. This exact-kind check therefore returns no fire cells for those current fire sources, so --visual still samples/matches against flame flicker and can report the false visual RED this masking path was added to prevent; include the manifest effects and/or match the existing fire-bearing kind variants.

Useful? React with 👍 / 👎.

@100yenadmin
100yenadmin merged commit 636d293 into main Jul 16, 2026
35 of 42 checks passed
@100yenadmin
100yenadmin deleted the walk-gate-hardening branch July 16, 2026 06:35
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant