AGENTS.md loaded about 33,000 tokens into every agent session, subagent and reviewer, mostly per-feature contracts, and the agent documentation around it had accumulated duplicates, dated logs and history of removed designs. This PR makes AGENTS.md a short set of rules that apply everywhere plus an index of area documents, and leaves AGENTS.md, dev-docs and the repository skills describing only the current state.
Three commits, reviewable separately:
1. **Move (lossless).** Every per-area rule moved verbatim from AGENTS.md into its area document (existing ones, or six new ones: UI_CONVENTIONS, UI_SHELL, COMPOSER, TRANSCRIPT, SETTINGS, PROJECTS). A script split the old file into 208 units, required one destination for each and checked all 199 content units verbatim at their destination. AGENTS.md went from 134,000 to 16,000 characters.
2. **Trim.** A per-area ponytail review removed rules stated two or three times (keeping the more precise copy), dated validation logs, per-version qualification sections below the current minimum, abandoned designs and self-references; seven documents whose surviving rules live elsewhere were deleted. It also fixed statements the code contradicts (locale registration, the Mission play/recovery condition, plugin package updates, cleanup progress UI, timeline index persistence, automation restart/targets, stale pins and minimums).
3. **Current state only.** The new AGENTS.md rule: no history (removed features and their names, former behavior, provenance, dated logs) and no denials; correct a contradicted statement at its source. DEVELOPER_MODE.md is merged into BROWSER_AUTOMATION.md and every Developer Mode mention is gone (including the README and the browser help page in ten locales). Names that only made sense against older designs are renamed with every reference updated, MISSIONS_ENVIRONMENT_ADMISSION is folded into SESSION_ENVIRONMENT, and INDEX lists every document. The server npm README now states the real OpenCode minimum (2.1.2).
AGENTS.md is now about 14,000 characters (roughly 3,500 tokens); AGENTS.md, dev-docs and the vendor README went from about 11,200 lines to under 4,700.
Validation: every relative Markdown link and every cited dev-docs path resolves; no reference to a renamed or deleted document remains; `npm run test:help` passes for all ten locales.
Review: three independent GPT-6.1 Sol (high) reviews by area found binding rules lost in the trim and current-state passes; 25 were restored as present-tense facts or prohibitions and four contradicting statements corrected, each checked against code. A Fable 5.1 gatekeeper review of the whole PR passed; its follow-up routes session recovery from the index, points to dev-docs/INDEX.md and documents the family identity read.
## Requested change
Restore the normal question/permission icon for requests from unrelated
conversations. Show the complete shared red status badge, including its
localized text, separately at the trailing end of the collapsed bar.
Clicking the badge expands the selected request.
## Layout
Retain leading disclosure chevrons and source titles. Crowded mobile
headers wrap trailing controls instead of squeezing away the
conversation name. Reuse existing badge geometry, colors and
translations.
## Validation
- Initial dock/mobile run: 36 passes, one cold fixture navigation
timeout.
- All six final targeted checks pass, including the previously timed-out
recovery case; fixture initial navigation now has the same 60-second
budget as the real-shell fixture. Assertions preserved.
- Final UI TypeScript, production UI build and diff checks pass.
- Desktop/mobile compact question and permission captures inspected.
- Independent gatekeeper reviewed final diff/captures: ZERO FINDINGS.
Review will be published before the requested admin merge without
waiting for CI.
Installation is separate; no running application or native daemon was
restarted.
## Approved UX
The user found cross-conversation authorization useful after trying it,
but could not clearly identify the source. They explicitly approved
revising #847: keep in-place replies with compact external previews and
prominent persistent provenance.
## Behavior
- External conversations and sessionless project requests start compact;
deliberate expansion opens their form without changing conversations.
- Source name becomes the primary heading. Subagents show their parent
context; View conversation explicitly navigates to the source.
- One bounded external preview remains discoverable alongside a local
request. Arrival does not replace the current draft; settlement leaves
foreign fallbacks compact.
- The red badge expands the selected request in place, including from
the project Info view. Native reply identity, hidden drafts and
short-keyboard footer access remain preserved.
- Labels translated in all ten locales.
## Validation
- 71 affected browser checks pass; six targeted Info-badge checks pass
after reproducing/fixing the Info entry regression.
- UI TypeScript, production UI build and diff checks pass.
- Desktop/Android-touch compact, expanded, alongside-local and
short-keyboard captures inspected.
- Independent gatekeeper will be published and corrected until zero
findings; user requested admin merge without waiting for CI.
## Scope and maintenance
This implements the revised interaction preference, not a claimed fix
for the separate Android reconnect disappearance. Installation remains
separate. Existing oversized component touched:
packages/ui/src/components/instance/instance-shell2.tsx (~1335 lines).
## User-requested behavior
The user reported that seeing a question from an unrelated conversation
was problematic and explicitly selected **conversation and subagents**.
This change scopes the visible dock to the open conversation and
recursive descendants, excluding parents, siblings and unrelated roots.
## Implementation
- Shared hierarchy scope for dock and project badge; visible
counts/navigation/composer compaction use only that scope.
- Keep off-scope editors mounted, hidden and inert so answer and
permission drafts survive navigation; remember selection per
conversation.
- Explicit project-badge navigation opens the actual owner. Sessionless
global Forms use the no-session surface and remain reachable through the
badge.
- No unrelated fallback for stale focus intents; preserve native reply
identity.
## Validation
- 37 interruption dock/selection/mobile browser tests pass.
- Real-shell badge regression passes; 2 additional desktop/mobile
permission draft and owner-identity checks pass.
- UI TypeScript, production UI build and diff check pass.
- Independent gatekeeper in progress; full CI will be awaited before
merge.
## Scope
This implements the user's explicit conversation-scope preference. It
does not claim to resolve the separately observed Android form
disappearance after reconnect. No installed application was
rebuilt/replaced.
## Maintenance
Existing oversized component touched:
packages/ui/src/components/instance/instance-shell2.tsx (~1344 lines).
## Summary
Follow up the three full-CI failures reported after #845. A delayed
session-activation callback could steal focus from an answer field and
insert the answer into the composer. Recheck input/dock/modal ownership
at execution and fence deactivation, disposal and superseded callbacks.
## Baseline evidence
The focus race reproduces at baseline 04654996 and #845 head;
deterministic new coverage fails against the old focus implementation.
The other two failures also reproduce on both snapshots: the transcript
fixture returned an empty body for permission-receipts, rendering error
panels that changed row geometry. Fulfill that route with valid empty
receipts; no assertion changes, added waits or forced clicks.
## Validation
- 7 deterministic activation/selection tests pass; competing inputs,
modal/dock ownership, stale callbacks, normal activation and phone
behavior covered.
- 46 transcript tests pass.
- Header/mobile/dock: 57/58 initially; one cold fixture navigation
timeout passed its isolated rerun.
- UI TypeScript and production UI build pass.
- Independent gatekeeper and full CI required before the requested admin
merge.
## Maintenance
Existing oversized file:
packages/ui/src/components/session/session-view.tsx (~720 lines).
## Summary
Follow-up to #836 and #838. An expanded interruption now takes priority
over an enlarged composer without changing its saved height or draft.
Collapse/settlement restores normal sizing. Keep the dock non-shrinking
and bound the stack to Android visualViewport changes so response fields
and actions remain reachable.
## Reproduction and scope
Real InstanceShell at 851x393 with maximum composer height reduced the
dock to 54px and its body to 11px, clipping the response and submit
controls. The regression uses native Form events, mobile web/remote
runtime and coarse-pointer Chromium emulation.
The user's separate screenshot showed pre-836 navigation buttons: the
installed bundle still contains those old labels. Merged PRs had not
replaced that installed build. This follow-up fixes the independently
reproduced current-code height issue; it does not claim deployment to
the user's phone.
## Validation
- 7 mobile shell tests: portrait, short viewport, landscape, immersive,
saved maximum size, keyboard resize/pan, long Forms, background/global
requests and permission actions.
- 44 header/composer/interruption browser regressions and 1 isolated
Electron zoom test pass.
- UI TypeScript, production UI build and diff check pass; rendered
captures inspected.
## Gatekeeper
Independent review will be published and corrected in a loop until zero
findings before the requested admin merge.
## Maintenance
Existing large components touched:
packages/ui/src/components/instance/instance-shell2.tsx (~1327 lines),
prompt-input.tsx (~1081), session/session-view.tsx (~711).
## Summary
- Persist all permission decisions: allowed once, always allowed and
rejected, with request context and known reasons. Distinguish CodeNomad,
automatic Yolo and native settlements.
- Keep receipts visible alongside transcript messages even with hidden
tools; provide paginated source-less session receipts. Ownership-checked
bounded reads, atomic profile storage, deletion cleanup and stale-read
fencing.
- Enrich completed native question receipts with selected-option
descriptions, verbatim custom answers and a disclosure for other
choices. Translate labels in all ten locales.
## Validation
- Locked dependencies installed; server and UI TypeScript checks pass;
production UI build passes.
- 126 targeted server regressions during implementation, then 26
receipt/replier/service checks against the pinned client passed.
- 20 receipt/dock browser tests and 21 history navigation tests pass; 5
question decoding/copy tests pass.
- Rendered captures inspected at 393/1100px in light/dark, including
long text and pagination.
## Persistence boundaries
Native permission events are ephemeral: past lost decisions cannot be
reconstructed. Receipts are CodeNomad annotations outside native
search/copy/export. Storage namespaces follow execution host, native
root and authenticated channel; credential rotation starts a new
namespace. Bounded text excludes metadata/diffs.
## Review
Autonomous independent gatekeeper review will be published and repeated
until zero findings before the user-requested admin merge.
## Maintenance
Existing oversized files touched: server/http-server.ts (~2415),
server/api-types.ts (~717), server/index.ts (~707),
ui/message-section.tsx (~1566), ui/lib/api-client.ts (~650).
## Summary
- Keep pending questions in the composer-adjacent dock and native
answers in the transcript after completion; remove redundant navigation
links.
- Separate collapse from bounded request navigation and hide navigation
for one request. Preserve the selected draft across incoming permissions
and session changes.
- Add accented window chrome, fixed action footers, readable dark
receipts and visible scrolling. Preserve permission diff-review gates
and disable form editing during submission.
## Validation
- UI TypeScript and production build passed.
- 16 Form/settlement/diff-review unit-store tests passed.
- 10 dock browser tests, 1 cross-session selection test, 5
permission/Form browser regressions, 21 history-navigation tests and 1
session-search regression passed.
- Rendered captures inspected at 393 and 1100 CSS pixels in light/dark;
mobile permission actions validated.
## Review
Independent UX and interaction reviews informed the implementation.
Autonomous final gatekeeper review in progress before requested admin
merge.
## Maintenance note
Existing large components touched: message-block.tsx (~1965 lines),
message-section.tsx (~1561), tool-call.tsx (~991).
## Summary
- Answer native Forms and permissions in a persistent composer-adjacent
dock with queue navigation and source-session labels.
- Target requests from badges and inline tools; reveal off-window source
messages through bounded history navigation, closing file previews and
exposing hidden source tools.
- Render durable native question answers in the transcript and preserve
partial request/composer drafts.
- Replace the former permission modal and retain native global Form
routing and full permission-diff review.
## Gatekeeper
- Pass 1: two actionable P2 findings.
- Corrected both in fb7ed772 with regression tests reproducing failures
before the fixes.
- Independent pass 2 at fb7ed772: zero actionable findings.
## Validation
- UI TypeScript and production build passed after rebase.
- 30 focused browser and 17 native-store/unit regressions passed after
rebase.
- All six interruption-dock tests and TypeScript passed after
corrections.
- Independent final review: nine browser tests, 20 unit/store tests and
TypeScript passed.
- Final GitHub CI in progress.
See dev-docs/NATIVE_INTERRUPTION_UX.md for ownership and validation
details.