docs: name the runInteractive half of src/process.ts in the agent guides' module map - #113
Open
dichovsky wants to merge 1 commit into
Open
docs: name the runInteractive half of src/process.ts in the agent guides' module map#113dichovsky wants to merge 1 commit into
dichovsky wants to merge 1 commit into
Conversation
The module-boundaries list is where an agent looks to decide which module owns a change. The seams section above it introduces `Io.runInteractive` by name, but the `src/process.ts` entry described only `Io.runProcess` — so the reader met the method and then found no module claiming it. The same entry scoped `runProcess` to "version probes", which sent anyone tracing a `git` or `tmux` call looking for a runner that does not exist. `docs/design/architecture.md` already gets this right; the agent guides were the drifted side.
This was referenced Aug 6, 2026
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.
Closes #105
CLAUDE.mdandAGENTS.mdare the files an agent reads before doing anything else, and their Module boundaries section is specifically the list an agent consults to decide which module owns a change. Itssrc/process.tsentry named one of that module's two exports. That is worse than an omission: the seams section directly above (:91-105, rewritten by #101) now introducesIo.runInteractiveby name, so a reader meets the method, goes looking for its implementation in the module map, and findssrc/process.tsdescribed as being about version probes with no pointer from one to the other — the exact navigation the section exists to provide.Verified on
main@09e67cdagainst the code, not the issue body.src/process.tsexports two functions:nodeRunProcess(:17) andnodeRunInteractive(:66).bin/crew.ts:42imports both and wires them to the twoIofields at:56-57.docs/design/architecture.md:142already reads "real Io.runProcess (capture-only) + runInteractive (tmux attach)", so the agent guides were the drifted side.What changed and why
One entry, identical hunk in both files,
CLAUDE.md:152-153→:152-155andAGENTS.mdat the same lines.Iomembers the module implementsIo.runProcessonlysrc/process.ts:17and:66;bin/crew.ts:42,56-57wires the pair. Matchesdocs/design/architecture.md:142.runProcessis used forgrep -rn "\.runProcess(" src/: platform-registry probes (src/platforms/shared.ts:239,ollama.ts:40,lmstudio.ts:42),git(src/worktree.ts:41,src/launcher/session.ts:626),tmux(src/launcher/tmux.ts:149generic dispatch,:186has-session,:170tmux -V), and the Console's browser opener (src/ui/index.ts:120). The old scoping sent anyone tracing agitortmuxcall looking for a runner that does not exist.runProcess's timeoutbounded timeout—nodeRunProcesstakes a requiredopts.timeoutMs(src/process.ts:20,27) and every caller passes one. This is the property that distinguishes it fromrunInteractive, and the seam bullet at:94-95already draws that contrast.runInteractive's shape and scopeinherited stdio, no timeout, reserved for tmux attach—src/process.ts:68(stdio: 'inherit', notimeout), andsrc/launcher/tmux.ts:321(attach-session) is its only caller insrc/.src/which.ts's clause is unchanged.Deltas against the issue body — noted rather than silently absorbed
:152-153, not:139-140. The issue was filed at 18:14 on 2026-08-06 against pre-docs: correct drifted command and Io-seam facts in agent guides #101main; docs: correct drifted command and Io-seam facts in agent guides #101 merged at 21:20 the same day and added 17 net lines above this point, moving the entry down 13 lines. The text it quotes is verbatim correct.Io.runInteractivealongsideIo.runProcess". Meeting it exposed a second false claim in the same sentence — "for version probes" — which is contradicted by the call sites.grep -rn "\.runProcess(" src/returns nine, of which six are outside the platform registry; five of those six are not version probes of any kind —gittwice (src/worktree.ts:41,src/launcher/session.ts:626),tmuxdispatch andhas-session(src/launcher/tmux.ts:149,186), and the browser opener (src/ui/index.ts:120). The sixth,src/launcher/tmux.ts:170, is literallytmux -V; it is not a platform-registry probe, but it is a version probe, so it carries no weight against the old wording and is excluded from the count above. The five do. Fixing the first claim and leaving the second standing in the same sentence was not a defensible stopping point, so both are corrected. No adjacent line, bullet, or section was touched.diff <(tail -n +2 CLAUDE.md) <(tail -n +2 AGENTS.md)returns exactly one hunk, becausetail -n +2drops only the# CLAUDE.md/# AGENTS.mdH1 and the guidance sentence the two files deliberately differ on is line 3, not line 2. The invariant is "exactly one hunk, and it is that sentence" — identical before and after this change. Same reading docs: correct drifted command and Io-seam facts in agent guides #101 recorded.#104 does not reproduce — dropped, not closed
This PR was scoped to close #104 as well. It does not, and no
CONTRIBUTING.mdedit is included.#104 asks that
CONTRIBUTING.md:24-25namebuild:weband all three typecheck projects. On currentmainthey already do — commit52e6bdd("docs: retract two false claims this PR introduced, and finish CONTRIBUTING"), the last commit of PR #101, rewrote exactly those lines three hours after #104 was filed:Every clause of #104's Acceptance is satisfied, including "matching the corrected wording now in
CLAUDE.md/AGENTS.mdso the three files agree" —CLAUDE.md:57-59andAGENTS.md:57-59carry those three lines verbatim. Confirmed bygit blame -L 23,30 CONTRIBUTING.md. #101's PR body describes only:36and:99because it was written before its own final commit; the merged tree is what counts.Per
.github/ISSUE_TRIAGE.md("If the underlying problem is already fixed, say so … and applyinvalid— do not close it yourself"), #104 is left open for a human to labelinvalidand close. No line was invented to justify touching the file.Verification
Tests: none added — claiming the docs-only exemption, which
CONTRIBUTING.md:98("tests are not applicable for docs-only changes") and.github/ISSUE_TRIAGE.mdboth grant. The diff is two Markdown files, zero code.Proven, not assumed, that nothing guards them.
grep -rn "CLAUDE.md\|AGENTS.md\|CONTRIBUTING.md" tests/returns onlytests/integration/commands/init.test.ts, which writes and reads aCLAUDE.mdinside a temporary fixturecwdto exercisecrew init's guide-append path — it never reads the repository's own copy.tests/unit/docs-facts.test.tsderives fromsrc/cli.ts,src/platforms/registry.ts,src/store/schema.ts,package.json,vitest.config.ts, and ADR H1 headings, never these files, sodocs-site/generated/facts.jsonneeded no regeneration. Both files were run anyway: 2 files, 19 tests, all passing.Run on the pushed tree under Node
24.19.0:npm run typechecknpm run lintnpm run format:checknpm run build:docsdist-docs/main.js102.1kbnpx vitest run tests/unit/docs-facts.test.ts tests/integration/commands/init.test.tsdiff <(tail -n +2 CLAUDE.md) <(tail -n +2 AGENTS.md)The full suite was not run: the diff touches no
src/**orbin/**file, so coverage cannot have moved and CI'stest:coverageis authoritative.Wrapping is hand-maintained — Prettier never reflows Markdown prose here, so
format:checkpasses either way. To be precise about why, since earlier PR bodies in this repo have stated it wrongly:proseWrap: "preserve"is Prettier's default, not a configured value..prettierrcsets onlysingleQuote,semi,trailingComma,printWidth: 100, andtabWidth: 2— it does not mentionproseWrap, andprintWidththerefore does not apply to prose. Same behavior, correctly attributed. The four new lines are 88 / 92 / 80 / 58 characters, inside both files' existing band (max line is 102 inCLAUDE.md, 100 inAGENTS.md, both pre-existing and untouched). No paragraph outside the edited bullet was reflowed.Contract impact
None.
CLAUDE.mdandAGENTS.mdsit outside the four-tier authority order indocs/README.md:9-12entirely — they restate whatsrc/already does, so the code is the correct side. No ADR is amended, noFR-*/NFR-*moves, no CLI grammar rule, record type, error code, command, or flag changes.package.jsonis untouched.CURRENT_SCHEMA_VERSIONstays 7.Out of scope
CONTRIBUTING.md— see the Docs: CONTRIBUTING.md's build and typecheck annotations understate both scripts #104 section above; unchanged in this diff.CLAUDE.md/AGENTS.mdmirror invariant, which is enforced by author discipline alone. A separate PR owns it; no guard is written here.lintannotation (eslint .vs the script'seslint . --ignore-pattern dist-docs) — deferred to Inconsistent eslint configuration for dist-docs #20, which proposes removing the flag. Correcting the prose now would preempt that.:59is correct againstpackage.jsontoday and was left alone. Flagged for the maintainer: e2e/ui tsconfig is neither wired into typecheck nor able to compile #24 ("e2e/uitsconfig is neither wired intonpm run typechecknor able to compile", open,bug) would make it four. If e2e/ui tsconfig is neither wired into typecheck nor able to compile #24 lands, the count needs reconciling inCLAUDE.md:59,AGENTS.md:59,CONTRIBUTING.md:26, and the SRS gate sentence together.docs/,README.md,EXAMPLES.md,CONTEXT.md,docs-site/,src/,bin/,tests/,web/, and.github/.Related open PRs
No open PR touches
CLAUDE.md,AGENTS.md, orCONTRIBUTING.md— checked at file level. #110 (docs/adr/*,product-spec.md), #111 (README.md,EXAMPLES.md,architecture.md,data-model.md,tests/tools/), and #112 (docs/design/*.md) are all disjoint. Whichever change lands next against this pair must re-confirm the byte-identity invariant.