From 298f148a88dd65ae08d4a88ed5c7187d507c97bb Mon Sep 17 00:00:00 2001 From: Trevor Walker Date: Mon, 31 Aug 2026 08:45:52 -0600 Subject: [PATCH] docs(agents): record the ~/.pylon-code runtime-home default --- .agents/durable-facts.jsonl | 1 + 1 file changed, 1 insertion(+) diff --git a/.agents/durable-facts.jsonl b/.agents/durable-facts.jsonl index 60778aaed..89347d0d0 100644 --- a/.agents/durable-facts.jsonl +++ b/.agents/durable-facts.jsonl @@ -10,3 +10,4 @@ {"id":"2026-08-30-thread-id-recreation","recorded_at":"2026-08-30T01:34:28Z","scope":"server/orchestration","fact":"A failed first-send bootstrap may soft-delete and then recreate the same client-minted thread ID as a new incarnation. Projectors clear old per-thread rows on thread.created, replay preserves attachments when a later creation supersedes deletion, and WebSocket creation fences on ThreadDeletionReactor.drainThrough(createSequence) so old cleanup cannot stop new resources.","source_commits":["98d83492e8fee00f878d4af5e50101846fe71e3a","2c748f28dcf2c50ca156705410e64027289b6ca5"],"source_paths":["apps/server/src/orchestration/commandInvariants.ts","apps/server/src/orchestration/Layers/ProjectionPipeline.ts","apps/server/src/orchestration/Layers/ThreadDeletionReactor.ts","apps/server/src/persistence/Layers/OrchestrationEventStore.ts","apps/server/src/ws.ts"],"supersedes":[]} {"id":"2026-08-30-codex-jsonl-linear-framing","recorded_at":"2026-08-30T01:34:28Z","scope":"provider/codex-protocol","fact":"Codex app-server JSONL input framing must stay linear in input size: unfinished lines remain string fragments, each decoded chunk is scanned once for newlines, and fragments join only for a complete line or EOF. Repeatedly concatenating the remainder and splitting the whole buffer would restore quadratic copying for large messages.","source_commits":["8406ba5df429faf78c04bf4b9fd9a89ffc12274b","2c748f28dcf2c50ca156705410e64027289b6ca5"],"source_paths":["packages/effect-codex-app-server/src/protocol.ts","packages/effect-codex-app-server/src/protocol.test.ts"],"supersedes":[]} {"id":"2026-08-30-prime-correlated-prompt-lifecycle","recorded_at":"2026-08-30T01:34:28Z","scope":"provider/prime-agent","fact":"Prime foreground prompt ownership has two explicit modes and is never inferred from text or generic busy state. The optional correlated lifecycle is enabled only by explicit capability negotiation; its correlation stays provider-private and generation-bound, and recovery requires complete attributed event continuity without synthesizing snapshot output. Stock daemons use the conservative observed-activity busy path.","source_commits":["058193588f66d8b455cd49e9b014bc9fde4b0447","9a4de4c08ee62dea2b5ad68ff8bf022addb67d61","486af3ea52180c3dcda51b6411ffaeecf9987d08"],"source_paths":["docs/internals/prime-agent-daemon-parity.md","docs/user/providers-prime-agent.md","apps/server/src/provider/prime/PrimeAgentDaemonEvents.ts","apps/server/src/provider/prime/PrimeAgentDaemonAdapter.ts","apps/server/src/provider/prime/PrimeAgentDaemonSessionRuntime.ts"],"supersedes":[]} +{"id":"2026-08-30-runtime-home-default","recorded_at":"2026-08-31T14:45:36Z","scope":"server/runtime-home","fact":"Every Pylon server launch path defaults its runtime home to ~/.pylon-code: the t3 CLI's resolveBaseDir, the desktop's SSH remote launcher scripts, the WSL secondary backend, and the dev runner's implicit home. ~/.t3 is T3 Code's install and is never adopted as a fallback, because its database carries upstream migration numbering. --base-dir and T3CODE_HOME remain the unchanged, T3-compatible overrides. When a launch resolves the default base dir, finds no state there, and sees an older ~/.t3/userdata, warnAboutLegacyRuntimeHome writes one hint to stderr and never to the logger: auth, connect, and project resolve their base dir through the same helper and emit JSON payloads on the logger's stream, and their quietLogs guard is installed too late to suppress it. Migration moves the userdata state directory, not its parent: settings.json and secrets are derived from stateDir and live inside userdata, while the sibling caches and worktrees directories are disposable or referenced by absolute path and must stay. The SSH launch script names ~/.t3 only to retire a previous launcher's state directory once, and signals a recorded pid only after confirming its process arguments still carry serve --host 127.0.0.1 and --base-dir $HOME/.t3; where ps cannot report arguments it leaves the process running and still retires the directory. The maintainer database scripts keep their source home and their destructive-write guard separate: both read or seed from ~/.pylon-code but refuse to write to either runtime home, and migrate-dev-db applies that refusal before it checks whether a source exists.","source_commits":["a5cfa5da266c3e10ff5b7b049aea8035c222282a","8ec50a068a278b385428b5c131bf093ecaf7079c","ec31498eb69ebe7c6f15985ecb8320205a0ad872","5814f1a62a91d852b752562c39ad722323f999cc","fc7bda6e1fe7f058891d741ebea5116ce0ba4e37","1ace841de68d5e4563647182621d633a44025a81","8c298a75b153dba825114fe5601d26e2339c3f01","20bae41009f8cbb43ed7cb044ba024f5c6971ea5","a4ddf3266e6175de0cb76ffc5f8cc3ec3d180bac","66401f073eb502fd00e9719a18d6e8343cb500d9"],"source_paths":["apps/server/src/os-jank.ts","apps/server/src/os-jank.test.ts","apps/server/src/cli/config.ts","apps/server/src/cli/config.test.ts","apps/server/src/cli/triage.ts","packages/ssh/src/tunnel.ts","packages/ssh/src/tunnel.test.ts","apps/server/scripts/migrate-dev-db.ts","apps/server/scripts/t3-sqlite-state.ts","scripts/dev-runner.ts","docs/user/install.md","docs/user/remote-access.md","docs/operations/observability.md","docs/internals/scripts.md"],"supersedes":[]}