Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
35 changes: 35 additions & 0 deletions .llm/2026-07-17-rfc-single-deployment-run.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
# Session record — RFC single deployment (issue #820) orchestrator run

Date 2026-07-17 · run `.llm/runs/rfc-single-deployment--orchestrator/` · generator Claude Fable 5
· high (session `7f1fada7-805f-46cb-8ac4-5eb201bdc105`) · evaluator Codex GPT-5.6 Sol · max
(9 separate daemon threads).

## What happened

Seed/RFC harness run on the #820 charter: eis-chat POC forensics (@ `aeaf2df`, via authenticated
GitHub API after the local clone was sandbox-blocked), gap analysis G1–G8 against the PM/deploy
board, and nine revisions of the RFC design under nine adversarial Sol·max PLAN-EVAL cycles. The
owner authorized loop continuation after the standard two-failure escalation, then bounded the
loop at cycle 9. Final: **FAIL_PLAN with 6/8 plan-gate boxes PASS** (incl. Decisions-locked);
run closed as a design record (`closure.md`). No #820 comment (PASS-gated), zero board mutations
(evaluator-audited each cycle).

## Lessons worth keeping

- **The adversarial loop converges but is expensive**: each Sol·max cycle re-audited prior fixes
for *real closure* and expanded into genuinely deeper systems territory (junction atomicity →
journal durability → privilege separation → boot-order composability). Design-heavy RFCs
should budget 3+ cycles or pre-decompose into evaluable chunks.
- **Artifact currentness is a first-class gate**: three cycles flagged stale
worklog/context-pack/supervisor metadata as blocking. Reconcile resumable artifacts in the same
edit batch as the plan rev, every time.
- **Self-containment rule**: never write "unchanged from rev N" after overwriting rev N — the
candidate must stand alone (cycle-3 regression).
- **Launcher fallback recipe**: `agentic:launch-codex-slice` is Windows-host/implementation-slice
shaped; from WSL-native sessions, the wrapper's inner client
(`.llm/tools/agentic/codex/app-server-message-cli.ts --model gpt-5.6-sol --effort max --cwd …
--message "$(brief)"`) launches the same daemon-attached thread (drift entry 4 pattern;
`.llm/tmp/rfc820/launch-eval.ts`).
- **Evidence-honesty pays**: the evaluator repeatedly accepted designs only when grounded in
tree/corpus citations (e.g. rejecting Servy tree-kill and the runtime `AspireResource` as
unsupported) — write plans from the code, not from plausibility.
68 changes: 68 additions & 0 deletions .llm/runs/rfc-single-deployment--orchestrator/closure.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,68 @@
# Closure — RFC single deployment (issue #820) — design-record close per owner wrap-up directive

> **Post-closure amendment (2026-07-17, same day):** the owner re-opened the run for exactly the
> residual revision ("proceed with the revision I'll take care of the final eval myself").
> **plan.md rev 10** folds the surface classifications (residual 1 below) into §I.2/§E.2/§H; the
> cycle-10 eval is **owner-launched** (recipe in `context-pack.md` § "How the owner runs cycle
> 10"). The generator launches no further cycles; the #820 post + `drafts/` remain PASS-gated.
> This document otherwise stands as the cycle-1..9 record.

Run `rfc-single-deployment--orchestrator` · closed 2026-07-17 · generator Fable 5 · high, session
`7f1fada7-805f-46cb-8ac4-5eb201bdc105`. Owner directives: loop continuation authorized after the
cycle-2 escalation; loop bounded at cycle 9 ("one more pass then done").

## Outcome

**9 adversarial PLAN-EVAL cycles (Sol·max, all separate sessions), monotonically converging; the
final verdict is FAIL_PLAN with 6 of 8 plan-gate boxes PASS** — including, for the first time,
**"Decisions locked"**, plus board adjustments, risk register, gate set, deferred scope, and the
research content itself. Per the kickoff's hard gate, the RFC was **NOT posted to #820** and the
`drafts/` were **not written** (both were PASS-gated). **Zero board mutations occurred at any
point** — evaluator-audited in every cycle.

## What stands (evaluator-confirmed sound across the final cycles)

- **PM-first sequencing** (§A): the Tier-4 split keeping the PM-independent single-runtime lane
(#451/#453/#454/#455 + #452/#456a/#457a) complete in beta.11 while singleton-graph work
consumes the beta.12 PM engine in beta.13 — repeatedly endorsed as "sound, avoids
over-blocking".
- **Aspire-stack citizenship** (§B.4): generator-emitted `PackagingModel` → pure manifest
compiler → the canonical `deploy build` verb + a named TS-AppHost publish pipeline step, all in
SD-2; PM-20 stays pure extraction.
- **The installer** (§B): `DeployTargetPort` adapters + `MaintenancePort` (no rival axis), the
§B.1a operation state machines (incl. deterministic four-state purge + §B.1b canonical
machine-state root), the §B.3 identity/privilege matrix with updater least-privilege grants,
and the §B.2a install-graph digest rule.
- **The update lifecycle** (§C): one journaled release-snapshot mechanism from beta.11 (real
Windows apply; `Deno.autoUpdate` never the authority), crash-recoverable journal with migration
barriers, `maintenance(rollback-failed)` terminal, replay high-water, pinned trust, and the
§C.3b three-phase ownership that resolves boot-recovery composition.
- **Composition** (§D): both modes kept; typed manifests + the SD-7 cross-mode conformance suite
as the anti-fork enforcement; transport seam scoped to transport only.
- **The draft board** (§E): 22 bounded, dependency-ordered drafts; G1–G8 exactly-one ownership;
owner forks OF-A..OF-K.

## Residuals (the cycle-9 items — small)

1. **Public-vs-internal classification for three surfaces** (the only real design residual):
PM-5's `RuntimeCommandSpec` additions (`clearEnv` + strip list), PM-15's renderer knobs, and
SD-1's host-side supervisor/broker/proxy/Job-Object types. *Generator recommendation (non-
normative, unevaluated):* PM-5 additions = public contract extension (rubric at PM-5); PM-15
knobs = internal render config, classification re-decided at the PM-20 move; SD-1 host types =
internal (only #451/SD-6 client surfaces are public).
2. **Resume-artifact metadata lag** — reconciled as part of this closure (context-pack,
supervisor, worklog, drift now agree on the final state).

## Path to done (for a future session, if the owner wants the RFC posted)

One small rev folding residual 1 into §I.2/§E.2 + one PLAN-EVAL cycle would plausibly PASS; then
execute kickoff deliverable 5 (the #820 comment + `drafts/` files) and stage-H ratification of
OF-A..OF-K. Resume via `context-pack.md`; the eval launch recipe is `.llm/tmp/rfc820/
launch-eval.ts` + `plan-eval-brief.md` (route: Sol·max through the agentic app-server client).

## Record map

`plan.md` rev 9 (the RFC) · `research.md` (forensics + gaps + re-baseline + debt) ·
`plan-eval-cycle{1..9}.md` (verdict trail) · `escalation.md` (cycle-2 loop-limit stop) ·
`supervisor.md` / `worklog.md` / `context-pack.md` / `drift.md` (6 entries) · `corpus/`
(evidence) · session record `.llm/2026-07-17-rfc-single-deployment-run.md`.
76 changes: 76 additions & 0 deletions .llm/runs/rfc-single-deployment--orchestrator/context-pack.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,76 @@
# Context Pack: RFC single deployment (issue #820) — rev 10 ready; final eval OWNER-RUN

## Run Metadata

| Field | Value |
| -------------- | -------------------------------------------- |
| Run ID | `rfc-single-deployment--orchestrator` |
| Branch | `feat/beta10-cli-integration` @ `f391190f` (re-baselined vs `origin/main` @ `47cc2fa9`) |
| Current phase | **rev 10 staged; cycle-10 PLAN-EVAL pending, launched BY THE OWNER** (generator launches no further cycles per the 2026-07-17 owner instruction) |
| Archetype | N/A — seed/RFC run (downstream drafts span Archetypes 2/3/4/5/6/7 + all three overlays) |
| Session | generator `7f1fada7-805f-46cb-8ac4-5eb201bdc105` (Fable 5 · high) |
| Evaluator route | Codex · GPT-5.6 Sol · max via the agentic app-server client (drift entry 4); threads c1 `019f6fa1…` c2 `019f6fb5…` c3 `019f6fd5…` c4 `019f6feb…` c5 `019f7006…` c6 `019f701c…` c7 `019f7034…` c8 `019f7052…` c9 `019f7078…` |

## Current State (history in `closure.md`; this file is post-re-open)

plan.md **rev 10** is the staged candidate: after the cycle-9 verdict (FAIL_PLAN with **6/8
boxes PASS**, incl. Decisions-locked) and the design-record closure, the owner re-opened with
"proceed with the revision, I'll take care of the final eval myself". Rev 10 folds cycle 9's
only design residual — the surface classifications (PM-5 additions PUBLIC; PM-15 knobs INTERNAL
@ beta.12, re-decided at PM-20; SD-1 host surface INTERNAL, public = #451/SD-6) — into §I.2/§E.2
with §H dispositions. The RFC remains **unposted** (PASS-gated) and **zero board mutations have
ever occurred** (evaluator-audited cycles 1–9). Owner authorizations on record: loop
continuation (drift 5), cycle-9 bound (drift 6), owner-run final eval (drift 7).

## How the owner runs cycle 10

From the repo root:

```
deno run --no-lock --allow-read --allow-run --allow-env .llm/tmp/rfc820/launch-eval.ts
```

It sends `plan-eval-brief.md` (already carrying the cycle-10 note) to a fresh Codex Sol·max
thread via the agentic app-server client; the verdict overwrites `plan-eval.md` (cycles 1–9 are
archived as `plan-eval-cycle{1..9}.md`). On PASS: execute kickoff deliverable 5 — the #820 RFC
comment (public-repo hygiene: eis-chat PR/issue numbers OK, no internal process details) +
`drafts/` files (NOT filed) — then stage-H ratification of OF-A..OF-K.

## Key Decisions (rev 9 — evaluator-PASSed as locked)

| Decision | Source |
| --- | --- |
| PM-first Tier-4 split; single-runtime lane complete in beta.11; graph mode behind PM in beta.13 | plan §A.1 |
| PM bar PM-1..14 (+15/16/18 per-machine); PM-A/PM-B separate drafts; #543 stays beta.12 | plan §A.2/A.3 |
| Universal containment: harness+guardian pipe-EOF (PM-B core) + Job Objects; per-machine = PM-15 `KillMode` + Windows Job-Object wrapper (OF-K); SD-H Linux backstop @ stable (OF-H) | plan §A.3 |
| Installer = `DeployTargetPort` adapters + `MaintenancePort`; §B.1a op state machines; four-state deterministic purge; §B.1b canonical machine-state root | plan §B.1 |
| Schemas CLI-internal through beta.12 → SD-2 moves+publishes; pinned trust key; sequence high-water + explicit epoch reset (OF-J); `minBootstrapVersion` | plan §B.2 |
| Install-graph digest match-or-refuse (OF-I) | plan §B.2a |
| Identity/privilege matrix; updater sole writer; per-user read tokens via OS-auth broker | plan §B.3 |
| Per-user dynamic ports + `/_svc` proxy w/ per-launch token; per-machine port-reservation registry | plan §B.3a |
| `PackagingModel` (CLI-internal) + build verb + named Aspire publish step, all SD-2 | plan §B.4 |
| One journaled update mechanism incl. Windows apply (L0.7); stable bootstraps + journal-first resolution; §C.3b three-phase ownership + single confirmer | plan §C |
| Both composition modes kept; manifests + SD-7 conformance suite enforce | plan §D |
| Owner forks **OF-A..OF-K** resolve at stage-H filing | plan §F |

## Gates

| Gate | Status | Evidence |
| --- | --- | --- |
| PLAN-EVAL c1–c9 | FAIL_PLAN ×9; c9 = 6/8 boxes PASS | `plan-eval-cycle{1..9}.md` |
| PLAN-EVAL c10 (gate of record) | **PENDING — owner-launched** on rev 10 | recipe above; verdict → `plan-eval.md` |

## Open Questions

- OF-A..OF-K (plan §F, 11 forks) — stage-H owner forks.
- (cycle-9 residual 1 — surface classification — resolved in rev 10 §I.2/§E.2/§H.)

## Drift and Debt

- Drift: **7 entries** (effort raises; no dedicated PR; sandbox-blocked clone → API corpus;
evaluator via wrapper's inner client; owner-authorized loop continuation; owner wrap-up bound;
owner-run final eval). Debt: none created.

## Commits

- None — kickoff scoped this run to run-dir artifacts + a post-PASS #820 comment (never earned).
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
[]
Original file line number Diff line number Diff line change
@@ -0,0 +1,90 @@
{
"url": "https://api.github.com/repos/rickylabs/eis-chat/issues/135",
"repository_url": "https://api.github.com/repos/rickylabs/eis-chat",
"labels_url": "https://api.github.com/repos/rickylabs/eis-chat/issues/135/labels{/name}",
"comments_url": "https://api.github.com/repos/rickylabs/eis-chat/issues/135/comments",
"events_url": "https://api.github.com/repos/rickylabs/eis-chat/issues/135/events",
"html_url": "https://github.com/rickylabs/eis-chat/pull/135",
"id": 4802560256,
"node_id": "PR_kwDOTIdMCM7tiekE",
"number": 135,
"title": "fix(kb): shared Garnet queue fixes multi-process split-brain Deno KV (#133) + desktop perms (#118)",
"user": {
"login": "rickylabs",
"id": 129366361,
"node_id": "U_kgDOB7X5WQ",
"avatar_url": "https://avatars.githubusercontent.com/u/129366361?v=4",
"gravatar_id": "",
"url": "https://api.github.com/users/rickylabs",
"html_url": "https://github.com/rickylabs",
"followers_url": "https://api.github.com/users/rickylabs/followers",
"following_url": "https://api.github.com/users/rickylabs/following{/other_user}",
"gists_url": "https://api.github.com/users/rickylabs/gists{/gist_id}",
"starred_url": "https://api.github.com/users/rickylabs/starred{/owner}{/repo}",
"subscriptions_url": "https://api.github.com/users/rickylabs/subscriptions",
"organizations_url": "https://api.github.com/users/rickylabs/orgs",
"repos_url": "https://api.github.com/users/rickylabs/repos",
"events_url": "https://api.github.com/users/rickylabs/events{/privacy}",
"received_events_url": "https://api.github.com/users/rickylabs/received_events",
"type": "User",
"user_view_type": "public",
"site_admin": false
},
"labels": [],
"state": "closed",
"locked": false,
"assignees": [],
"milestone": null,
"comments": 0,
"created_at": "2026-07-03T10:08:50Z",
"updated_at": "2026-07-03T10:48:14Z",
"closed_at": "2026-07-03T10:43:13Z",
"assignee": null,
"author_association": "OWNER",
"active_lock_reason": null,
"draft": false,
"pull_request": {
"url": "https://api.github.com/repos/rickylabs/eis-chat/pulls/135",
"html_url": "https://github.com/rickylabs/eis-chat/pull/135",
"diff_url": "https://github.com/rickylabs/eis-chat/pull/135.diff",
"patch_url": "https://github.com/rickylabs/eis-chat/pull/135.patch",
"merged_at": "2026-07-03T10:43:13Z"
},
"body": "Closes the mechanism half of #133. Live-verified via the Aspire CLI/MCP.\n\n## Problem\nThe Aspire generator no-ops the `DenoKv` cache engine, so in **multi-process** mode workers-api (enqueue) and the workers processor (listen) each open their OWN per-process Deno KV → the `embed-document` job is enqueued in one KV and listened on another, so it never runs (KB doc pins `pending`). This is the real root cause of the stalled KB ingestion (deeper than the previously-suspected release blocker).\n\n## Fix (Docker-less Windows bare metal)\nShared Deno KV Connect (`denokv`) needs Docker, which this host lacks, so run **Garnet** (RESP-compatible, .NET-native) as an Aspire **executable** and point the workers at it. The SDK's `@netscript/kv/redis` + `@netscript/queue` `RedisAdapter` then give a real cross-process queue (`LPUSH`/`BRPOPLPUSH`).\n\n- `aspire/.helpers/register-infrastructure.mts` — `addExecutable('garnet','garnet-server', …)` (hand-edit, keep on regen).\n- `aspire/.helpers/register-plugins.mts` + `register-background.mts` — inject `GARNET_URI`/`REDIS_URI`/`CACHE_PROVIDER=garnet` + `waitFor(garnet)` into workers-api + the workers processor.\n- `workers/runtime.ts` — `import jsr:@netscript/kv/redis` to self-register the KV adapter before `getKv()`.\n- `apps/dashboard/deno.json` — `--allow-all` on `desktop:dev`/`desktop:build` so the deno-desktop runtime can read env (was crashing on `PORT`). (Partial #118; full desktop render is a follow-up PR.)\n\n## Verification (Aspire CLI/MCP only — shared stack never hacked)\ngarnet Running/Healthy; workers-api + workers both `WaitFor(garnet)` + carry `GARNET_URI`; a job triggered on **workers-api** was **executed by the separate workers processor** (cross-process delivery over Garnet). See #133 for logs.\n\n## Requires / upstream\n`dotnet tool install -g garnet-server`. Proper generator fix + self-provisioning: rickylabs/netscript#372 (Garnet executable) + #371 (Deno KV Connect).\n\n## Reconciliation\nOverlaps #134 (NetScript beta.1 bump) on `register-plugins.mts` (different hunks) and `deno.lock`, and this branch's `workers/runtime.ts` redis import is pinned to `alpha.19`. To be rebased onto master after #134 merges, with the redis import bumped to `beta.1`.",
"closed_by": {
"login": "rickylabs",
"id": 129366361,
"node_id": "U_kgDOB7X5WQ",
"avatar_url": "https://avatars.githubusercontent.com/u/129366361?v=4",
"gravatar_id": "",
"url": "https://api.github.com/users/rickylabs",
"html_url": "https://github.com/rickylabs",
"followers_url": "https://api.github.com/users/rickylabs/followers",
"following_url": "https://api.github.com/users/rickylabs/following{/other_user}",
"gists_url": "https://api.github.com/users/rickylabs/gists{/gist_id}",
"starred_url": "https://api.github.com/users/rickylabs/starred{/owner}{/repo}",
"subscriptions_url": "https://api.github.com/users/rickylabs/subscriptions",
"organizations_url": "https://api.github.com/users/rickylabs/orgs",
"repos_url": "https://api.github.com/users/rickylabs/repos",
"events_url": "https://api.github.com/users/rickylabs/events{/privacy}",
"received_events_url": "https://api.github.com/users/rickylabs/received_events",
"type": "User",
"user_view_type": "public",
"site_admin": false
},
"reactions": {
"url": "https://api.github.com/repos/rickylabs/eis-chat/issues/135/reactions",
"total_count": 0,
"+1": 0,
"-1": 0,
"laugh": 0,
"hooray": 0,
"confused": 0,
"heart": 0,
"rocket": 0,
"eyes": 0
},
"timeline_url": "https://api.github.com/repos/rickylabs/eis-chat/issues/135/timeline",
"performed_via_github_app": null,
"state_reason": null
}
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
[]
Loading
Loading