Repository navigation
fix(probe): make file-modification-tracking and hooks-pre-tool scenarios pass - #120
Conversation
…ios pass Four fixes to the e2e probe scenarios added in #116 and #117: - file-modification-tracking: pm agent must be 'generalist' (not orchestrator) so workspace fs tools are available; orchestrators are workspace-restricted. - file-modification-tracking: cassette reordered so the more-specific second-run entry (with fileModificationSecondRequest in history) is checked before the first-run entry, preventing false matches on the shared conversation history. - file-modification-tracking: scenario driver switches from waitForObservedEvent (relay push, blocked by relay ACL deferral) to waitForStoredMessage (DB poll). - hooks-pre-tool: same relay ACL fix — final completion now detected via DB. - verdicts: requestDebug uses Rust {:?} escaping; quote checks updated to match the escaped form (type=\"file-modifications\"). Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Code ReviewOverviewThis PR fixes two failing e2e probe scenarios by addressing four distinct root causes: agent category mismatch, cassette false-match ordering, relay ACL blocking event delivery, and Rust Correctness
Cassette reordering (
Rust IssuesUnexplained removal of Growing ternary chain in : scenarioName === "project-membership-reload"
...
: scenarioName === "sign-as-user-nip46"
? { model: llmModelName, skills: ["signer"] }
: scenarioName === "file-modification-tracking"
? { model: llmModelName, skills: ["write-access"] }
: { model: llmModelName }This is pre-existing but the PR extends it. Not a blocker, but a Second-run CommentsSeveral new inline comments explain what the code does rather than why:
The SummaryThe fixes are correct, targeted, and address real failure modes. The main actionable feedback is:
No blocking issues. The scenario logic is sound and the relay→DB polling change improves test reliability. |
Summary
Fixes the e2e probe scenarios added in #116 (file modification tracking) and #117 (project hooks). All meaningful verdicts now pass.
generalistcategory (notorchestrator) — orchestrators haveworkspace_access_restricted = truesofs_writeis never registered for themfileModificationSecondRequestin history) is checked before the first-run entry, preventing false matches on shared conversation historywaitForObservedEvent(relay push subscription, blocked by relay ACL deferral for non-whitelisted pubkeys) towaitForStoredMessage(conversation DB filesystem poll, unaffected by relay ACL)requestDebugis a Rust{:?}format string — quotes inside are backslash-escaped; verdict checks updated to matchtype=\"file-modifications\"instead oftype="file-modifications"Test plan
Both scenarios run green:
bun scripts/tenex-runtime-probe.ts file-modification-tracking→ 4 ok, 0 badbun scripts/tenex-runtime-probe.ts hooks-pre-tool→ 4 ok, 0 bad🤖 Generated with Claude Code