diff --git a/docs/request-for-change/README.md b/docs/request-for-change/README.md index 4e4632c7b69..b80dc6d43f4 100644 --- a/docs/request-for-change/README.md +++ b/docs/request-for-change/README.md @@ -25,9 +25,10 @@ not been re-audited since 2026-08-03. The durable-run-coordinator row was added verified against `6d3e30bbbd`. The `rfc-global-workflow-library` row was added 2026-08-25 and audited against `749468d42`; its implementation exists only in the active detached worktree. The `rfc-agentcore-identity-gateway` row -was added 2026-08-27. The `rfc-crew-agent-sdk-boundary` row was added 2026-08-28 and verified against `dc88f142b`. The `rfc-transcript-section-markers` row was added 2026-08-30 and verified against `202770d13`. The `rfc-mcp-lifecycle-event-log` row was added 2026-09-01 and verified against `1ee69f225`. The `rfc-terminal-session-ownership` row was added 2026-09-01 and re-verified against `2188f029d`. The `rfc-session-tag-change-event` row was added 2026-09-02 and verified against `6581a04ee`. The `rfc-agent-config-mirror` row was added 2026-09-02 and verified against `f8b3203c0`. The `rfc-chat-core-extraction` row was added 2026-09-05 and verified against `8ed028b0b`. The `rfc-conductor-work-ledger` row was added 2026-09-05 and verified against `049b8c729`. The `rfc-app-session-controls` row was added 2026-08-31 and re-verified against `1d705a03f` on 2026-09-01. The `rfc-central-governance-ceiling` row was added 2026-09-08 and verified against `8a9c269b4`. The `rfc-security-conductor` row was re-audited 2026-09-10 against `f6d38741c`. The `rfc-overload-resilience` row was added 2026-09-12 and verified against `6f056722b`. The `rfc-append-only-ledger` row was added 2026-09-11 and verified against `2f1e2f54a`, and moved to `in-progress` the same day against the open PR named in it rather than against main. The `rfc-webhook-subscriptions` row was added 2026-09-15 and verified against `6163d9a9ca`. The `rfc-arrival-provenance-filing` row was added 2026-09-20 and verified against `f31f25a8a2`. The `rfc-wake-judge` row was added 2026-09-22 and verified against `80bd0a81f`. The `rfc-crewmates-launch` row was added 2026-09-22 and verified against `87553ba866`. The `rfc-conductor-work-ledger` row was re-audited 2026-09-22 against `cc385211d8` for its v4 revision, which moves Phases 3 and 4 to in flight against two open PRs rather than against main. The `rfc-host-credential-vending` row was added 2026-09-23 and verified against `18f9984b04`. It was re-audited 2026-09-24 against `529a8f5e9e` for its second revision, which widens the grant from the `codex` routing to any child whose effective mask hides `.aws` or `.ssh`, adds an ssh-agent proxy beside the AWS route, and replaces the reused-socket claim with a new listener, and again 2026-09-24 against `3d2bfa8f45` for six advisory findings on that revision: the seatbelt window rule, the macOS `cc` mask, the two scrubs, the helper's home, the Windows reach and a codex citation, and once more the same day for a four-decision gate, `AWS_PROFILE`, and the pod-remap cost the design reverses. The `rfc-wake-judge` row was re-audited 2026-09-23 against `2fdadc71ac`, which moves it to `partial` for the LLM lane on main. On 2026-09-24 only its in-flight-core reading was re-read, at `d81bd0ec17`, to settle that document's section 7 Q4; its main-side audit stands where the row's front matter records it. The `rfc-composable-layout-mechanism` row was added 2026-09-24 and verified against `a305e4fba`, and moved to `in-progress` on 2026-09-25 against the open PR named in it ([#13572](https://github.com/kirodotdev/KiroCrew/pull/13572), PR 1 of its §7 sequence) rather than against main. The `rfc-wake-judge` row was revised 2026-09-25 for the reader-fetches/judge-decides placement, read at `db5267bda9` on the branch that implements it rather than against main: the gh-pr reader makes no wake decision, the whole reading reaches the judge as evidence, the one merged-or-closed mapping stays in the auto-nudge core, and the script-cron driver is retired because a sandboxed subprocess holds no decisions provider and so can reach no judge. The same revision corrects the row's main-side reading: the judge core the row described as in flight landed 2026-09-24 as `2d5a800ee`, so `points/nudge_wake.py`, the `nudge_evidence` scope entry, the collectors, `judge_tick` and its tick hook, `judge` on the two arming tools and the transcript notice are all on the base tree, and only the reader placement and the Decisions-card consent switch remain outstanding. The `rfc-solo-spawn-gate` row moved to `in-progress` on 2026-09-25 against `2fbd88d07a`: the removal it records is live in an open PR, and `superseded` is outside the set the First Principles lane reads as a decision. The `rfc-owner-written-mcp-auto-approve` row was added 2026-09-27 and verified against `94bcda2f75`, where the default it changes is still off, so the row records the decision rather than shipped behaviour. The `rfc-wake-judge` row was revised 2026-09-28 for two calibration corrections measured on the landed judge, recorded in that document as decided and NOT on base under a new §8 PR H entry: the action backstop stops overriding a confident `needs_owner` quiet below a new `ACTION_OVERRIDE_MIN_P`, and `owner_acted`'s tool-call limb counts only dispatches that could have changed something, which needs the per-dispatch names carried to `notify_turn_complete` and records a new `tool_names_known` on the label row. Both supersede the earlier reading that only the reader placement and the Decisions-card consent switch remained outstanding; the implementation is [#14663](https://github.com/kirodotdev/KiroCrew/pull/14663), which is not merged, so the row still describes base behaviour. The `rfc-app-sdk-crew-webview` row was added 2026-09-27 and verified against `dceaca3a95`. The `rfc-question-card-pager` row was added 2026-09-24 and verified against `61d5bb577`, and moved to `accepted` the same day on the maintainer decision recorded in that document's §7.1. It was re-read 2026-09-28 against `e88e80778`, where every symbol the row cites is still present. It was revised 2026-09-30 against `f4df23e53` for §3.6, accepted by buluoray on 2026-09-29: the pager is on main, and the blocking tool §3.6 records is not. The `rfc-pptx-maker-server-driven-engine` row was added 2026-09-30 and verified against `ad5b1e670`, and re-read 2026-10-06 against `557c8f8e64`. The `rfc-jev-task-executor` row was added 2026-09-28 and verified against `699083f906`. The same day `rfc-wake-judge` §3.1 was re-pointed to name `rfc-jev-task-executor` §3.2 as the owner of the `noul`/`score` wire types; the wake judge's own status and main-side reading are unchanged. The `rfc-terminal-exit-closes-tab` row was added 2026-09-29 and verified against `df0ea7909`; the same day `rfc-terminal-session-ownership` §8's `exit` outcome, its Phase 4 scope and its open question 4 were revised to close the tab on exit, with that row's status and main-side reading unchanged. The `rfc-retire-chat-autopilot` row was added 2026-09-30 and verified against `2b91a6badd`. The `rfc-terminal-exit-closes-tab` row moved to `accepted` on 2026-09-30 on maintainer bolichen's decision recorded in that document's Open questions, and was re-verified against `c1a02ce976`. The `rfc-jev-task-executor` row moved to `accepted` on 2026-09-29 and was re-read against `df0ea7909c`, where every symbol it cites is unchanged. The `rfc-crew-log-wake` row was added 2026-10-01 and verified against `321fd996a2`, and moved to `in-progress` the same day against the open PR named in it ([#15691](https://github.com/kirodotdev/KiroCrew/pull/15691), which carries the document rather than a standalone docs PR) rather than against main. The `rfc-outbound-instance-transport` row was added 2026-09-23 and re-verified 2026-10-06 against `33d7fc111`. The `rfc-goal-popover-pause-play-controls` row was added 2026-10-02 and verified against `bc80d8d8a2`, in `in-progress` against the open PR that carries it ([#16030](https://github.com/kirodotdev/KiroCrew/pull/16030)) rather than against main. The `rfc-retire-chat-autopilot` row was re-audited 2026-10-02 against `6916ba17f` after backend removal [#15362](https://github.com/kirodotdev/KiroCrew/pull/15362) and frontend removal [#15359](https://github.com/kirodotdev/KiroCrew/pull/15359) merged; it is `partial` because Rollout step 3 still has `StageBoundary` / `_in_stage_execution` references under `src/`. The `rfc-autopilot-stage-budgets` row was added as `superseded` and verified against `6916ba17f`; issue [#14058](https://github.com/kirodotdev/KiroCrew/issues/14058) owns the remaining generic chat-turn cancellation defect. The `rfc-crewmate-dynamic-dashboard` row was added 2026-10-06 and verified against `ffd9136d1c`, in `in-progress` against the open pull request that carries it rather than against main; P1 is one pull request carrying the contract, its plumbing and the twelve built-in pages. The `rfc-remote-crew-sidebar` row was added 2026-10-03 as `draft` and verified against `e698e8ca7a`, and moved to `accepted` the same day on maintainer iamwhatever's decision recorded in that document's Open questions, re-read against `f31e2f7091`. The `rfc-crewmate-session-tree` row was added 2026-10-04 as `draft` and verified against `fd705fb7c7`. The `rfc-goal-loop-approval-hold` row was added 2026-10-05 and verified against `a97659dfc3`, in `in-progress` against the open PR that implements it ([#16993](https://github.com/kirodotdev/KiroCrew/pull/16993)) rather than against main; this document lands on its own first so that PR's First Principles lane can read it from the base. The `rfc-update-architecture` row moved to `in-progress` on 2026-10-02 against the open PR that hardens the managed-venv engine and routes the gateway's unattended apply through it, rather than against main; its main-side reading stays as verified at `80bd0a81f`. The `rfc-conversation-trust-follows-founder` row was added 2026-09-30 and verified against `aec81410e2`, and moved to `in-progress` the same day against the open PR named in it rather than against main. It was revised 2026-10-03 against `8ef5ea40e5` to record maintainer bolichen97's 2026-10-01 acceptance of the design in the document itself, with the status left `in-progress` while the implementing PR is open. The `rfc-crash-only-session-trust` row was added 2026-10-01 and verified against `8ae5dff6ee`. The `rfc-conductor-remote-dispatch` row was added 2026-10-06 and verified against `ebf647989a`. The `rfc-question-card-auto-submit` row was added 2026-10-07 as `draft` and verified against `781294256f`; it amends `rfc-question-card-pager` §3.2 in its own document so that the accepted pager document is not edited and its acceptance does not extend to the amendment. The `rfc-work-ledger-person-wait-hold` row was added 2026-10-08 and verified against `230b9141c8`, and moved to `implemented` on 2026-10-11 against `a84f616557` after [#18109](https://github.com/kirodotdev/KiroCrew/pull/18109) merged. The `rfc-crewmate-guides-and-mate` row was added 2026-10-08 as `accepted` on the product owner's decision of that day and verified against `4f9c5697b9`; it amends sections of `rfc-crewmates-launch`, `rfc-crewmate-greeting` and `rfc-crewmates-chatted-list` in its own document, so those accepted documents are not edited. The `rfc-crewmate-greeting-as-message` row was added 2026-10-09 as `accepted` on the product owner's decision of that day and verified against `d4c3a7334d`; it amends `rfc-crewmate-greeting` §1 and §5 in its own document, so that accepted document is not edited. The `rfc-wake-on-stop-signal` row was added 2026-10-10 and verified against `d32c084921`; it amends `rfc-crew-log-wake` Goal 2, section 3.2 and section 3.2b in its own document, so that implemented document is not edited. The `rfc-mate-landing-once` row was added 2026-10-10 as `draft` and re-verified 2026-10-11 against `73d44b420b` for the rule buluoray asked for in the review of #18903, and moved to `accepted` the same day on buluoray's approval there, re-verified against `a84f616557` with the owed condition that review raised; it amends `rfc-crewmate-guides-and-mate` "When it opens" in its own document, so that accepted document is not edited. The `rfc-team-lead-default-agent` row was added 2026-10-10 and verified against `7612507e11`, in `in-progress` against the open pull request that carries it rather than against main: that pull request ships one default agent built like `kirocrew-research`, so the row records the decision rather than shipped behaviour. The `rfc-crewmate-dynamic-dashboard` row was revised 2026-10-12 against `8f6baa05c9` for a second dated amendment in its own document, which records that a save stages a page rather than landing it, that the template picker and the id-loaded catalog flow are retired in favour of a reference gallery, and that the approval gate is a module of its own so a renderer may name a package it does not publish; the row's status and its main-side reading are unchanged. The row was revised again the same day against `10350b7294` for a third dated amendment, the second of 2026-10-12, which records that the dynamic dashboard is the Dashboard tab for every reader with the "Dynamic Dashboard" Feature Preview removed, closing that document's Open question 3; the row's status and its main-side reading are unchanged. The row was revised 2026-10-15 against `40139dc512` for a fourth dated amendment, which records that a `builtin` or `user` template and the owner's own dashboard package both go live on apply with no preview step, keeps `RENDERABLE_SOURCES` and `AUTHORED_PAGE_REFUSAL` unchanged, and requires a guard test that every renderable template writes values as text only; the row's status and its main-side reading are unchanged. The `rfc-worker-model-inheritance` row was added 2026-10-12 as `accepted` on the product owner's decision of that day and verified against `e5a0b3d3b2`; it amends model-selection.md's "Pin a cheaper model" rule in that document and extends `rfc-crewmate-profile-settings` §3 in its own document, so that accepted document is not edited. The `rfc-crewmate-dashboard-upkeep-skill` row was added 2026-10-11 and verified against `a84f616557`. It was revised 2026-10-12 against `0cda1525d8` in review: the upkeep text is returned by `dashboard_fields` rather than written to a generated `SKILL.md`, which a crewmate with no file tools cannot open, and the generated directory holds the helper scripts only. The `rfc-chat-document-attachments` row was added 2026-10-09 as `draft` and verified against `8c6e7eba90`, and re-verified 2026-10-12 against `2e8831ea52`, where the upload cap it cites had become the configurable `upload_max_bytes()`. The `rfc-mcp-resource-subscriptions` row was added 2026-10-13 as `draft` and verified against `de2d143dc`. The `rfc-efficient-local-inference` row was added 2026-10-08 and re-verified against `67c1304b06` on 2026-10-09, and re-read 2026-10-10 against `d32c084921` after its Phase 1 landed as `235e6b78a0`, and again 2026-10-13 against `fec23afff7`. The `rfc-remote-instance-on-microvm` row was added 2026-10-06 and verified against `f9a07ab3fa`. The `rfc-fold-recorded-edit-cards` row was added 2026-10-16 and verified against `5c790ca239`. The `rfc-remote-computer-use` row was added 2026-10-18 as `draft` and verified against `310ad48b5f`. The `rfc-mate-owned-agent-config` row was re-audited 2026-10-17 against `8892889b91` for its first dated amendment, which records the architecture meeting's conductor/worker decisions: the conductor only dispatches and carries no user MCP server, the file's `prompt` is load-bearing for the worker, the conductor raises a card-confirmed capability change, and step 1 is a behaviour change; the row's status and its main-side reading are unchanged, and the open step-1 pull request ([#21463](https://github.com/kirodotdev/KiroCrew/pull/21463)) predates the amendment, so its conductor shape does not yet match it. The `rfc-python-rust-hybrid-backend` row was re-audited 2026-10-19 against `207ed5ae4c` for a new §2.4, which records measurements of the executor CPU, the GIL holder during loop stalls and the anonymous-memory remainder taken on a second host; the row's status and its main-side reading are unchanged. The `rfc-living-ui` row was added 2026-10-18 as `draft` and verified against `9d088c85ad`, and moved to `implemented` on 2026-10-21 against `0b89e0c6f7` on the maintainer's decision of that day. The `rfc-conductor-rolling-reset` row was added 2026-10-19 as `draft` and verified against `0adc85c233`; it amends `rfc-conductor-round-reset` Goals, Non-goals and section 3 in its own document, so that implemented document is not edited. The `rfc-consolidation-fresh-conversation` row was added 2026-10-19 and verified against `5d1a459f2a`, in `in-progress` against its open implementation pull request ([#22207](https://github.com/kirodotdev/KiroCrew/pull/22207)) rather than against main. The `rfc-review-loop-and-escaped-bug-reduction` row was added 2026-10-19 as `draft` and verified against `2cf3d0d69`; it changes no code. That row moved to `accepted` on 2026-10-20 on the repository owner's decisions recorded in section 2.2 of the document; its main-side reading is unchanged. The `rfc-crew-log-telemetry-export` row was added 2026-10-16 as `draft` and verified against `1a2eb5435c`. The `rfc-gated-pr-poll-loops` row was added 2026-10-20 as `draft` and verified against `6432cad9ea`; it changes no code. The `rfc-crewmate-heartbeat` row was added 2026-10-15 as `accepted` on the product owner's decision of that day and verified against `8da5b41552`. The `rfc-conductor-context-cap` row was added 2026-10-19 as `draft` and verified against `c3f2b27de7`; it supersedes `rfc-conductor-rolling-reset`, whose row moved to `superseded` the same day, before that draft was accepted. The `rfc-crewmate-page-on-goal-wake` row was added 2026-10-21 as `accepted` on the product owner's decision of that day and verified against `c428ea050d`; it amends `rfc-crewmate-goals` §3.5 in its own document, so that accepted document is not edited. The `rfc-crewmate-page-ambient-motion` row was added 2026-10-21 as `accepted` on the product owner's decision of that day and verified against `4533b1eb5b`; it amends `rfc-living-ui` §5.1 rule L and §10 in its own document, so that implemented document is not edited. The `rfc-remove-piper-tts` row was added 2026-10-22 as `accepted` on the repository owner's decision of that day and verified against `69b2e503eb`. The `rfc-crew-enterprise-edition` row was added 2026-10-22 as `draft` and verified against `5c32cf32b`. It was revised 2026-10-23 against `a7ecdf3f1` for the owner's three decisions recorded in its section 5, and moved to `accepted` on the owner's approval of the design that day. The `rfc-conductor-patrol-session` row was added 2026-10-24 as `draft` and verified against `1270c45f4d`; it changes no code. +was added 2026-08-27. The `rfc-crew-agent-sdk-boundary` row was added 2026-08-28 and verified against `dc88f142b`. The `rfc-transcript-section-markers` row was added 2026-08-30 and verified against `202770d13`. The `rfc-mcp-lifecycle-event-log` row was added 2026-09-01 and verified against `1ee69f225`. The `rfc-terminal-session-ownership` row was added 2026-09-01 and re-verified against `2188f029d`. The `rfc-session-tag-change-event` row was added 2026-09-02 and verified against `6581a04ee`. The `rfc-agent-config-mirror` row was added 2026-09-02 and verified against `f8b3203c0`. The `rfc-chat-core-extraction` row was added 2026-09-05 and verified against `8ed028b0b`. The `rfc-conductor-work-ledger` row was added 2026-09-05 and verified against `049b8c729`. The `rfc-app-session-controls` row was added 2026-08-31 and re-verified against `1d705a03f` on 2026-09-01. The `rfc-central-governance-ceiling` row was added 2026-09-08 and verified against `8a9c269b4`. The `rfc-security-conductor` row was re-audited 2026-09-10 against `f6d38741c`. The `rfc-overload-resilience` row was added 2026-09-12 and verified against `6f056722b`. The `rfc-append-only-ledger` row was added 2026-09-11 and verified against `2f1e2f54a`, and moved to `in-progress` the same day against the open PR named in it rather than against main. The `rfc-webhook-subscriptions` row was added 2026-09-15 and verified against `6163d9a9ca`. The `rfc-arrival-provenance-filing` row was added 2026-09-20 and verified against `f31f25a8a2`. The `rfc-wake-judge` row was added 2026-09-22 and verified against `80bd0a81f`. The `rfc-crewmates-launch` row was added 2026-09-22 and verified against `87553ba866`. The `rfc-conductor-work-ledger` row was re-audited 2026-09-22 against `cc385211d8` for its v4 revision, which moves Phases 3 and 4 to in flight against two open PRs rather than against main. The `rfc-host-credential-vending` row was added 2026-09-23 and verified against `18f9984b04`. It was re-audited 2026-09-24 against `529a8f5e9e` for its second revision, which widens the grant from the `codex` routing to any child whose effective mask hides `.aws` or `.ssh`, adds an ssh-agent proxy beside the AWS route, and replaces the reused-socket claim with a new listener, and again 2026-09-24 against `3d2bfa8f45` for six advisory findings on that revision: the seatbelt window rule, the macOS `cc` mask, the two scrubs, the helper's home, the Windows reach and a codex citation, and once more the same day for a four-decision gate, `AWS_PROFILE`, and the pod-remap cost the design reverses. The `rfc-wake-judge` row was re-audited 2026-09-23 against `2fdadc71ac`, which moves it to `partial` for the LLM lane on main. On 2026-09-24 only its in-flight-core reading was re-read, at `d81bd0ec17`, to settle that document's section 7 Q4; its main-side audit stands where the row's front matter records it. The `rfc-composable-layout-mechanism` row was added 2026-09-24 and verified against `a305e4fba`, and moved to `in-progress` on 2026-09-25 against the open PR named in it ([#13572](https://github.com/kirodotdev/KiroCrew/pull/13572), PR 1 of its §7 sequence) rather than against main. The `rfc-wake-judge` row was revised 2026-09-25 for the reader-fetches/judge-decides placement, read at `db5267bda9` on the branch that implements it rather than against main: the gh-pr reader makes no wake decision, the whole reading reaches the judge as evidence, the one merged-or-closed mapping stays in the auto-nudge core, and the script-cron driver is retired because a sandboxed subprocess holds no decisions provider and so can reach no judge. The same revision corrects the row's main-side reading: the judge core the row described as in flight landed 2026-09-24 as `2d5a800ee`, so `points/nudge_wake.py`, the `nudge_evidence` scope entry, the collectors, `judge_tick` and its tick hook, `judge` on the two arming tools and the transcript notice are all on the base tree, and only the reader placement and the Decisions-card consent switch remain outstanding. The `rfc-solo-spawn-gate` row moved to `in-progress` on 2026-09-25 against `2fbd88d07a`: the removal it records is live in an open PR, and `superseded` is outside the set the First Principles lane reads as a decision. The `rfc-owner-written-mcp-auto-approve` row was added 2026-09-27 and verified against `94bcda2f75`, where the default it changes is still off, so the row records the decision rather than shipped behaviour. The `rfc-wake-judge` row was revised 2026-09-28 for two calibration corrections measured on the landed judge, recorded in that document as decided and NOT on base under a new §8 PR H entry: the action backstop stops overriding a confident `needs_owner` quiet below a new `ACTION_OVERRIDE_MIN_P`, and `owner_acted`'s tool-call limb counts only dispatches that could have changed something, which needs the per-dispatch names carried to `notify_turn_complete` and records a new `tool_names_known` on the label row. Both supersede the earlier reading that only the reader placement and the Decisions-card consent switch remained outstanding; the implementation is [#14663](https://github.com/kirodotdev/KiroCrew/pull/14663), which is not merged, so the row still describes base behaviour. The `rfc-app-sdk-crew-webview` row was added 2026-09-27 and verified against `dceaca3a95`. The `rfc-question-card-pager` row was added 2026-09-24 and verified against `61d5bb577`, and moved to `accepted` the same day on the maintainer decision recorded in that document's §7.1. It was re-read 2026-09-28 against `e88e80778`, where every symbol the row cites is still present. It was revised 2026-09-30 against `f4df23e53` for §3.6, accepted by buluoray on 2026-09-29: the pager is on main, and the blocking tool §3.6 records is not. The `rfc-pptx-maker-server-driven-engine` row was added 2026-09-30 and verified against `ad5b1e670`, and re-read 2026-10-06 against `557c8f8e64`. The `rfc-jev-task-executor` row was added 2026-09-28 and verified against `699083f906`. The same day `rfc-wake-judge` §3.1 was re-pointed to name `rfc-jev-task-executor` §3.2 as the owner of the `noul`/`score` wire types; the wake judge's own status and main-side reading are unchanged. The `rfc-terminal-exit-closes-tab` row was added 2026-09-29 and verified against `df0ea7909`; the same day `rfc-terminal-session-ownership` §8's `exit` outcome, its Phase 4 scope and its open question 4 were revised to close the tab on exit, with that row's status and main-side reading unchanged. The `rfc-retire-chat-autopilot` row was added 2026-09-30 and verified against `2b91a6badd`. The `rfc-terminal-exit-closes-tab` row moved to `accepted` on 2026-09-30 on maintainer bolichen's decision recorded in that document's Open questions, and was re-verified against `c1a02ce976`. The `rfc-jev-task-executor` row moved to `accepted` on 2026-09-29 and was re-read against `df0ea7909c`, where every symbol it cites is unchanged. The `rfc-crew-log-wake` row was added 2026-10-01 and verified against `321fd996a2`, and moved to `in-progress` the same day against the open PR named in it ([#15691](https://github.com/kirodotdev/KiroCrew/pull/15691), which carries the document rather than a standalone docs PR) rather than against main. The `rfc-outbound-instance-transport` row was added 2026-09-23 and re-verified 2026-10-06 against `33d7fc111`. The `rfc-goal-popover-pause-play-controls` row was added 2026-10-02 and verified against `bc80d8d8a2`, in `in-progress` against the open PR that carries it ([#16030](https://github.com/kirodotdev/KiroCrew/pull/16030)) rather than against main. The `rfc-retire-chat-autopilot` row was re-audited 2026-10-02 against `6916ba17f` after backend removal [#15362](https://github.com/kirodotdev/KiroCrew/pull/15362) and frontend removal [#15359](https://github.com/kirodotdev/KiroCrew/pull/15359) merged; it is `partial` because Rollout step 3 still has `StageBoundary` / `_in_stage_execution` references under `src/`. The `rfc-autopilot-stage-budgets` row was added as `superseded` and verified against `6916ba17f`; issue [#14058](https://github.com/kirodotdev/KiroCrew/issues/14058) owns the remaining generic chat-turn cancellation defect. The `rfc-crewmate-dynamic-dashboard` row was added 2026-10-06 and verified against `ffd9136d1c`, in `in-progress` against the open pull request that carries it rather than against main; P1 is one pull request carrying the contract, its plumbing and the twelve built-in pages. The `rfc-remote-crew-sidebar` row was added 2026-10-03 as `draft` and verified against `e698e8ca7a`, and moved to `accepted` the same day on maintainer iamwhatever's decision recorded in that document's Open questions, re-read against `f31e2f7091`. The `rfc-crewmate-session-tree` row was added 2026-10-04 as `draft` and verified against `fd705fb7c7`. The `rfc-goal-loop-approval-hold` row was added 2026-10-05 and verified against `a97659dfc3`, in `in-progress` against the open PR that implements it ([#16993](https://github.com/kirodotdev/KiroCrew/pull/16993)) rather than against main; this document lands on its own first so that PR's First Principles lane can read it from the base. The `rfc-update-architecture` row moved to `in-progress` on 2026-10-02 against the open PR that hardens the managed-venv engine and routes the gateway's unattended apply through it, rather than against main; its main-side reading stays as verified at `80bd0a81f`. The `rfc-conversation-trust-follows-founder` row was added 2026-09-30 and verified against `aec81410e2`, and moved to `in-progress` the same day against the open PR named in it rather than against main. It was revised 2026-10-03 against `8ef5ea40e5` to record maintainer bolichen97's 2026-10-01 acceptance of the design in the document itself, with the status left `in-progress` while the implementing PR is open. The `rfc-crash-only-session-trust` row was added 2026-10-01 and verified against `8ae5dff6ee`. The `rfc-conductor-remote-dispatch` row was added 2026-10-06 and verified against `ebf647989a`. The `rfc-question-card-auto-submit` row was added 2026-10-07 as `draft` and verified against `781294256f`; it amends `rfc-question-card-pager` §3.2 in its own document so that the accepted pager document is not edited and its acceptance does not extend to the amendment. The `rfc-work-ledger-person-wait-hold` row was added 2026-10-08 and verified against `230b9141c8`, and moved to `implemented` on 2026-10-11 against `a84f616557` after [#18109](https://github.com/kirodotdev/KiroCrew/pull/18109) merged. The `rfc-crewmate-guides-and-mate` row was added 2026-10-08 as `accepted` on the product owner's decision of that day and verified against `4f9c5697b9`; it amends sections of `rfc-crewmates-launch`, `rfc-crewmate-greeting` and `rfc-crewmates-chatted-list` in its own document, so those accepted documents are not edited. The `rfc-crewmate-greeting-as-message` row was added 2026-10-09 as `accepted` on the product owner's decision of that day and verified against `d4c3a7334d`; it amends `rfc-crewmate-greeting` §1 and §5 in its own document, so that accepted document is not edited. The `rfc-wake-on-stop-signal` row was added 2026-10-10 and verified against `d32c084921`; it amends `rfc-crew-log-wake` Goal 2, section 3.2 and section 3.2b in its own document, so that implemented document is not edited. The `rfc-mate-landing-once` row was added 2026-10-10 as `draft` and re-verified 2026-10-11 against `73d44b420b` for the rule buluoray asked for in the review of #18903, and moved to `accepted` the same day on buluoray's approval there, re-verified against `a84f616557` with the owed condition that review raised; it amends `rfc-crewmate-guides-and-mate` "When it opens" in its own document, so that accepted document is not edited. The `rfc-team-lead-default-agent` row was added 2026-10-10 and verified against `7612507e11`, in `in-progress` against the open pull request that carries it rather than against main: that pull request ships one default agent built like `kirocrew-research`, so the row records the decision rather than shipped behaviour. The `rfc-crewmate-dynamic-dashboard` row was revised 2026-10-12 against `8f6baa05c9` for a second dated amendment in its own document, which records that a save stages a page rather than landing it, that the template picker and the id-loaded catalog flow are retired in favour of a reference gallery, and that the approval gate is a module of its own so a renderer may name a package it does not publish; the row's status and its main-side reading are unchanged. The row was revised again the same day against `10350b7294` for a third dated amendment, the second of 2026-10-12, which records that the dynamic dashboard is the Dashboard tab for every reader with the "Dynamic Dashboard" Feature Preview removed, closing that document's Open question 3; the row's status and its main-side reading are unchanged. The row was revised 2026-10-15 against `40139dc512` for a fourth dated amendment, which records that a `builtin` or `user` template and the owner's own dashboard package both go live on apply with no preview step, keeps `RENDERABLE_SOURCES` and `AUTHORED_PAGE_REFUSAL` unchanged, and requires a guard test that every renderable template writes values as text only; the row's status and its main-side reading are unchanged. The `rfc-worker-model-inheritance` row was added 2026-10-12 as `accepted` on the product owner's decision of that day and verified against `e5a0b3d3b2`; it amends model-selection.md's "Pin a cheaper model" rule in that document and extends `rfc-crewmate-profile-settings` §3 in its own document, so that accepted document is not edited. The `rfc-crewmate-dashboard-upkeep-skill` row was added 2026-10-11 and verified against `a84f616557`. It was revised 2026-10-12 against `0cda1525d8` in review: the upkeep text is returned by `dashboard_fields` rather than written to a generated `SKILL.md`, which a crewmate with no file tools cannot open, and the generated directory holds the helper scripts only. The `rfc-chat-document-attachments` row was added 2026-10-09 as `draft` and verified against `8c6e7eba90`, and re-verified 2026-10-12 against `2e8831ea52`, where the upload cap it cites had become the configurable `upload_max_bytes()`. The `rfc-mcp-resource-subscriptions` row was added 2026-10-13 as `draft` and verified against `de2d143dc`. The `rfc-efficient-local-inference` row was added 2026-10-08 and re-verified against `67c1304b06` on 2026-10-09, and re-read 2026-10-10 against `d32c084921` after its Phase 1 landed as `235e6b78a0`, and again 2026-10-13 against `fec23afff7`. The `rfc-remote-instance-on-microvm` row was added 2026-10-06 and verified against `f9a07ab3fa`. The `rfc-fold-recorded-edit-cards` row was added 2026-10-16 and verified against `5c790ca239`. The `rfc-remote-computer-use` row was added 2026-10-18 as `draft` and verified against `310ad48b5f`. The `rfc-mate-owned-agent-config` row was re-audited 2026-10-17 against `8892889b91` for its first dated amendment, which records the architecture meeting's conductor/worker decisions: the conductor only dispatches and carries no user MCP server, the file's `prompt` is load-bearing for the worker, the conductor raises a card-confirmed capability change, and step 1 is a behaviour change; the row's status and its main-side reading are unchanged, and the open step-1 pull request ([#21463](https://github.com/kirodotdev/KiroCrew/pull/21463)) predates the amendment, so its conductor shape does not yet match it. The `rfc-python-rust-hybrid-backend` row was re-audited 2026-10-19 against `207ed5ae4c` for a new §2.4, which records measurements of the executor CPU, the GIL holder during loop stalls and the anonymous-memory remainder taken on a second host; the row's status and its main-side reading are unchanged. The `rfc-living-ui` row was added 2026-10-18 as `draft` and verified against `9d088c85ad`, and moved to `implemented` on 2026-10-21 against `0b89e0c6f7` on the maintainer's decision of that day. The `rfc-conductor-rolling-reset` row was added 2026-10-19 as `draft` and verified against `0adc85c233`; it amends `rfc-conductor-round-reset` Goals, Non-goals and section 3 in its own document, so that implemented document is not edited. The `rfc-consolidation-fresh-conversation` row was added 2026-10-19 and verified against `5d1a459f2a`, in `in-progress` against its open implementation pull request ([#22207](https://github.com/kirodotdev/KiroCrew/pull/22207)) rather than against main. The `rfc-review-loop-and-escaped-bug-reduction` row was added 2026-10-19 as `draft` and verified against `2cf3d0d69`; it changes no code. That row moved to `accepted` on 2026-10-20 on the repository owner's decisions recorded in section 2.2 of the document; its main-side reading is unchanged. The `rfc-crew-log-telemetry-export` row was added 2026-10-16 as `draft` and verified against `1a2eb5435c`. The `rfc-gated-pr-poll-loops` row was added 2026-10-20 as `draft` and verified against `6432cad9ea`; it changes no code. The `rfc-crewmate-heartbeat` row was added 2026-10-15 as `accepted` on the product owner's decision of that day and verified against `8da5b41552`. The `rfc-conductor-context-cap` row was added 2026-10-19 as `draft` and verified against `c3f2b27de7`; it supersedes `rfc-conductor-rolling-reset`, whose row moved to `superseded` the same day, before that draft was accepted. The `rfc-crewmate-page-on-goal-wake` row was added 2026-10-21 as `accepted` on the product owner's decision of that day and verified against `c428ea050d`; it amends `rfc-crewmate-goals` §3.5 in its own document, so that accepted document is not edited. The `rfc-crewmate-page-ambient-motion` row was added 2026-10-21 as `accepted` on the product owner's decision of that day and verified against `4533b1eb5b`; it amends `rfc-living-ui` §5.1 rule L and §10 in its own document, so that implemented document is not edited. The `rfc-remove-piper-tts` row was added 2026-10-22 as `accepted` on the repository owner's decision of that day and verified against `69b2e503eb`. The `rfc-crew-enterprise-edition` row was added 2026-10-22 as `draft` and verified against `5c32cf32b`. It was revised 2026-10-23 against `a7ecdf3f1` for the owner's three decisions recorded in its section 5, and moved to `accepted` on the owner's approval of the design that day. The `rfc-conductor-patrol-session` row was added 2026-10-24 as `draft` and verified against `1270c45f4d`; it changes no code. The `rfc-git-branch-switcher` row was added 2026-10-24 as `draft` and re-verified 2026-10-25 against `1a7190c711`; it changes no code. | Document | Status | What is actually on main | |---|---|---| +| [rfc-git-branch-switcher.md](rfc-git-branch-switcher.md) | `draft` | Nothing built. Verified at `1a7190c711`: no route under `src/` switches a branch (`GET /api/project/git` in `dashboard/file_api/project_dirs.py` only reads `.git/HEAD`, and the status and log routes in `dashboard/file_api/git_panel.py` are read-only), the composer chip's branch segment copies the name (`CopyBranchButton` in `website/src/components/ChatInput.tsx`), and nothing records which agent work runs in which repository. Proposes a branch picker in the Git panel header and the composer chip, `GET /api/project/git/branches` and an owner-only `POST /api/project/git/switch` on the `POST /api/worktree/create` boundary, refused while any chat turn, linked-channel turn, sub-agent, workflow step or ACP prompt in flight works in the repository, ending no session, in four phases. The implementation is [#23102](https://github.com/kirodotdev/KiroCrew/pull/23102), a draft until this document is accepted. Tracks [#22670](https://github.com/kirodotdev/KiroCrew/issues/22670). | | [rfc-crew-enterprise-edition.md](rfc-crew-enterprise-edition.md) | `accepted` | Nothing built. Verified at `5c32cf32b`: no `src/kiro_crew/edition.py` exists, `make desktop` takes no `EDITION`, Crew starts without a kiro login or a governance ceiling, and `_query_level` in `platform/governance_parts/evaluator.py` returns `_PERMIT_NOT_GOVERNED` for a control the policy does not name. Proposes a build-time `EDITION` constant; an enterprise gate (kiro login, then fetch governance rules, either failing exits, fail-closed, refreshed on `crew_policy_refresh_seconds`); every governable feature off by default with a minimal set per control (66 controls); and deny-unnamed in enterprise `_query_level`. Records three owner decisions of 2026-10-23: `EDITION` is the only enterprise fact (`resolve_profile` ignores `KIROCREW_PROFILE`, the SSO-marker probe and entry points), the policy URL is a build-time constant `KIROCREW_POLICY_URL` cannot change, and no local source can widen a control, with a built-in baseline policy holding the minimal sets. Open: the governance service API. | | [rfc-pptx-maker-server-driven-engine.md](rfc-pptx-maker-server-driven-engine.md) | `draft` | Nothing; the document lands first because following SDPM v0.10 replaces the app's four agents with one and gates deck chats on an engine update, and it also moves where "Start a deck" opens, and the First Principles lane reads that decision off the base branch. Verified at `ad5b1e670` and re-read at `557c8f8e64`: `backend/engine_source.py` pins `ENGINE_TAG = "v0.3.8"`, `agents/` ships `pptx-maker-{spec,vibe,style,composer}.json` loading prompts by `file://` from `mcp-local/acp-agent-prompts/`, `prompts/spec-studio.md` overrides the engine prompt, and `PptxMakerPage.tsx` `startChat` navigates to `/chat`. The implementation is [#15394](https://github.com/kirodotdev/KiroCrew/pull/15394), a draft until this document is accepted | | [rfc-gated-pr-poll-loops.md](rfc-gated-pr-poll-loops.md) | `implemented` | Accepted 2026-10-21 by maintainer Joe Guo (@iamwhatever); shipped in [#22442](https://github.com/kirodotdev/KiroCrew/pull/22442), verified at `098bc0a174` with that change applied. The prepare-pr recipe (`SKILL.md` Phase 3 step 5) and the babysit comment-aware example arm their pull-request poll loop gated with `judge=False`, so an unchanged pull request costs no turn and each change to its reading wakes the loop once; `_monitor_tick_is_quiet` in `autonudge_service/gate.py` is the judge-less path that makes it so, and `test/test_prepare_pr_gated_poll_loop.py` drives both recipes through it. `docs/system-specs/modules/learn-cron-dashboard.md` owns the shipped behaviour, and prepare-pr's `references/rationale.md` carries the reasons. Related: [rfc-wake-judge.md](rfc-wake-judge.md) § 8 PR F. Tracks [#22418](https://github.com/kirodotdev/KiroCrew/issues/22418). | diff --git a/docs/request-for-change/rfc-git-branch-switcher.md b/docs/request-for-change/rfc-git-branch-switcher.md new file mode 100644 index 00000000000..a6f21c1d738 --- /dev/null +++ b/docs/request-for-change/rfc-git-branch-switcher.md @@ -0,0 +1,376 @@ +--- +title: Git branch switcher -- switch the project's checked-out branch from the dashboard, refused while an agent works in the repository +status: draft +author: inariku, with Kiro Crew +created: 2026-10-24 +last-audited: 2026-10-25 +audited-at: 1a7190c711 +doc-pr: 23725 +implementation-prs: [23102] +tracking-issues: [22670] +supersedes: [] +superseded-by: [] +--- + +# RFC: Git branch switcher + +- Status: draft. Nothing is built on main. A working implementation of every + phase below exists as one draft pull request, + [#23102](https://github.com/kirodotdev/KiroCrew/pull/23102), which takes over + [#17628](https://github.com/kirodotdev/KiroCrew/pull/17628). That pull request + is held in draft until this document is accepted, and will be split along the + phases in section 6. +- Tracking issue: [#22670](https://github.com/kirodotdev/KiroCrew/issues/22670) + (`tier:T3`, `parked`). +- Why an RFC: the change adds the dashboard's second route that rewrites a + repository's working tree, adds a rule that refuses a user action while any + agent works in the same repository, and records agent prompts in flight at the + ACP transport. Those are hard to reverse once other code relies on them, and + the First Principles lane reads the decision from the base branch. +- Measured at `1a7190c711`. Every symbol cited below is on that commit unless + it names #23102. + +## 1. Summary + +Let the dashboard switch the project's checked-out branch from a searchable +picker, opened from the branch name in the Git panel header and from the branch +segment of the project chip under the chat box. The switch runs `git switch` in +the project's repository, relies on git's own refusal to overwrite uncommitted +work, and is refused while any agent is working in that repository, naming what +it is waiting for. Nothing is ended, killed or stashed to make a switch possible. + +## 2. Motivation + +### 2.1 What exists today + +- The branch is shown, never changed. `GET /api/project/git` + (`api_project_git` in `src/kiro_crew/dashboard/file_api/project_dirs.py`) + reads `.git/HEAD` directly to label the branch; `GET /api/project/git/status` + and `GET /api/project/git/log` (`api_project_git_status` and + `api_project_git_log` in `src/kiro_crew/dashboard/file_api/git_panel.py`) are + read-only. No route under `src/` and no component under `website/src/` + switches a branch: `git grep` for `git/switch`, `git/branches` and + `repo_checkout_guard` returns nothing. +- Clicking the branch segment of the composer chip copies the name + (`CopyBranchButton`, rendered by `website/src/components/ChatInput.tsx`). +- The one route that rewrites a repository today is `POST /api/worktree/create` + (`api_worktree_create` in `src/kiro_crew/dashboard/handlers/worktree.py`), + which serializes per repository on `_repo_lock` and runs git through the + strict-sandbox helper `_run_git`, both in the same module. +- Nothing records which agent work is running in which repository. A chat turn + starts at `_turn_open` (`src/kiro_crew/dashboard/chat_turn/turn_entry.py`) + and claims its session in `_turn_admit` (`chat_turn/turn_admission.py`); a + sub-agent runs from `_run_inner_impl` + (`src/kiro_crew/subagent_manager/run_turn.py`); workflow steps open their own + sessions outside chat slots (`src/kiro_crew/workflows/agent_exec.py`, + `agent_pool.py`); and the ACP request writers (`_send_request` in + `acp/client_transport.py`; `send_request`, `send_request_for_answer` and + `_send_and_await` in `acp/runtime_wire.py`) do not know the repository a + request will act on. + +### 2.2 The problem + +The issue's case: an agent works in a separate worktree and opens a pull +request; the user later checks that branch out in the main checkout to deploy +it; reopening the repository in Kiro Crew, it is still on that branch, and the +user does not want the agent to see it. The dashboard offers no way back, so +the user leaves for a terminal or asks the agent to run `git switch`, which +spends a turn on a one-word command. + +The hard part is not running `git switch`. It is that a checkout rewrites files +under every session working in that repository. A switch that lands while an +agent is mid-turn means the agent read files on one branch and writes them back +on another. The picker can see its own chat's turn, but the same repository can +be worked on at the same time by another chat, a Slack thread linked to an idle +chat, a sub-agent, a workflow step, a cron run, or a turn the user cancelled +whose backend is still running tools. + +## 3. Goals + +- G1. Switch to a local branch, check out a remote-only branch as a tracking + branch, or create a branch at the current commit, from one picker. +- G2. Never lose work: uncommitted and untracked changes either carry over (git's + default) or the switch is refused with the files in the way named. Ignored + local files the target branch tracks are protected the same way. +- G3. Never switch under a running agent. Refuse while any agent work may still + change files in the repository, and say what to wait for. +- G4. End nothing to make a switch possible. A refusal is the whole answer; the + user decides whether to stop the work. +- G5. The project boundary `POST /api/worktree/create` already draws, plus an + owner-only switch, strict-sandbox git with hooks and fsmonitor off, every + string redacted, and every switch in the SEL. + +## 4. Non-goals + +- fetch, pull, push, rebase, merge, delete or rename a branch. +- Switching a project folder that is a subfolder of its repository (the switch + would rewrite files outside the project the user chose). +- Repositories whose config declares a checkout filter driver (`git lfs` and + similar). The picker lists them and says why switching is off. +- Stashing, auto-committing or discarding changes on the user's behalf. +- Remote instances and peers. +- Changing what the agent does; an agent can still run `git switch` itself. + +## 5. Design + +### 5.1 Where the switcher lives + +- The branch name in the Git panel header opens the picker. +- The branch segment of the composer's project chip opens the same picker + upward. While this chat's response is running the segment keeps today's copy + behaviour and its tooltip says to stop the response with the message box's + stop button; a switch would be refused at that moment anyway. + +The picker is searchable. It lists local branches newest first, then +remote-tracking branches that have no local branch of the same short name, and +offers "create branch" when the query is a valid new name. Each list is capped at +200 rows and says so when cut. Every row carries the commit subject, author and +date; local rows carry ahead/behind counts. + +### 5.2 Routes + +`GET /api/project/git/branches?path=