fix(reports): complete finding-bound HTML repairs - #47
Merged
Conversation
Recognize portable HTML report artifacts without requiring Qoder Canvas data, validate the matching report contract, and refresh Markdown and HTML before committing the findings revision. Keep temporary repair results outside renderer-owned report directories. Normalize delegated spawn and signal failures at the root CLI boundary so machine mode emits one stable envelope while successful child commands retain output and exit-code ownership. Spec: docs/specs/2026-08-01-html-finding-fix-recording.md; docs/specs/2026-08-01-root-cli-machine-failure-contract.md Test: focused recorder, CLI, renderer, Skill, doc-link, package verification, and full-suite baseline comparison Co-authored-by: Codex (GPT 5.6 Sol) <codex@openai.com>
sxyseo
force-pushed
the
fix/html-finding-fix-recording
branch
from
August 1, 2026 04:15
c3f7757 to
305d63e
Compare
Merge upstream/main through 76cb732 into PR QoderAI#47. Preserve both the leaf-command help side-effect guards from QoderAI#46 and the delegated machine-failure contract coverage from this branch. Test: node --test test/better-harness-cli.test.mjs; node --test --test-name-pattern=record-fix-output test/task-loop-report.test.mjs; node --test test/scripts-refactor-contract.test.mjs; node --test test/doc-link-graph.test.mjs; npm run pack:verify Co-authored-by: Codex (GPT 5.6 Sol) <codex@openai.com>
sxyseo
marked this pull request as ready for review
August 1, 2026 07:05
Machine mode pipes delegated stdout and stderr through a 64 MiB spawnSync buffer. Exceeding that buffer sets result.error with code ENOBUFS, so the new normalization path reported DELEGATED_COMMAND_SPAWN_FAILED with "Failed to start the delegated command." and a hint to verify the installation. The child had actually started and finished, and retrying after reinstalling fails identically, so automation could neither classify nor recover from the condition. Check ENOBUFS before the generic spawn-error branch and emit DELEGATED_COMMAND_OUTPUT_OVERFLOW with a hint that narrows scope or drops --json. The envelope stays fail-closed: truncated child bytes and the raw ENOBUFS diagnostic are still withheld from machine stdout. RCM-AC-5 and the buffering risk note in the spec now describe this boundary. Spec: docs/specs/2026-08-01-root-cli-machine-failure-contract.md Test: node --test test/better-harness-cli.test.mjs test/scripts-refactor-contract.test.mjs test/doc-link-graph.test.mjs (53 pass); npm test (1061 pass, 0 fail); npm run pack:verify Co-authored-by: QoderAI (Qwen 3.8 Max) <qoder_ai@qoder.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
report.mdandreport.html, then commitfindings.jsonas the final revision marker.canvas.json, and keep temporary fix results outside renderer-owned report directories.Why
findings.json,report.md, andreport.html. The recorder previously treated every compact finding document as a Qoder split report and unconditionally openedcanvas.json. The reportedENOENTwas therefore a recorder mode-selection bug, not a missing report artifact. Fabricatingcanvas.jsonwould fail the split contract and leave the HTML callback revision stale.Maintainer confirmation requested: please confirm that the durable sibling artifact signature is the intended backward-compatible discriminator for v1 callbacks, and that publishing Markdown/HTML before
findings.jsonis the preferred commit-marker order.Traceability and Scope
docs/specs/2026-08-01-html-finding-fix-recording.md;docs/specs/2026-08-01-root-cli-machine-failure-contract.mdChange Type
Test and Review Evidence
node --test --test-name-pattern="record-fix-output" test/task-loop-report.test.mjsnode --test test/better-harness-cli.test.mjs test/scripts-refactor-contract.test.mjsnode --test test/better-harness-skill.test.mjs test/doc-link-graph.test.mjsEPERMsymlink failure reproduced unchanged on the baselinenpm testEPERMsymlink-creation failures outside the changed pathsnpm run pack:verifygit diff --checkManual evidence: the original three-artifact Codex report was exercised without mutation using a deliberately stale revision and now returns
STALE_FIX_OUTPUT_REVISION, notcanvas.jsonENOENT.Risk and Recovery
findings.jsonis deliberately published last as the authoritative commit marker. Local Windows cannot create four unguarded test symlinks; upstream CI must validate those cases.AI Involvement
Checklist
AGENTS.md,CONTRIBUTING.md, and the relevant canonical-owner guidance.CHANGELOG.md.