The build plan from the current code to the full architecture, for discussion, as docs/Development-Plan.md. It uses the format the architecture asks agents to use: milestones marked pre-approved or needs discussion.
Contents
Where we are: a survey of main against every section of docs/Architecture.md, marked done / partial / none. Two structural gaps: state is a single row, not a work-items table (L1), and canonical events carry no work item or actor (L7, the root of #78).
The environment today: services, the 4090 host, models by role, bring-up setup.
How we work: plan-first per milestone (a quick confirmation for pre-approved ones, design discussion for the rest); tests; the Quint model moves with the loop; a bring-up run on this box ends each phase, with guards (unprivileged user, test resources only, structural gates kept on until Phase 3 proves the classifier).
Phases:
0, housekeeping: retire the old spec and update references; a bring-up script with an unprivileged user.
Every open issue mapped.#46, #61, #79 and #81 are superseded by the new loop (M2.3, M2.5): they're specific to control.py, so fixing them there would be thrown away.
Old → new section table for M0.1, removed once references are updated.
Also in this PR (docs/Architecture.md): the status line now says agreed, and D7 regains the browser tool for nisse-dev (Playwright, internal test network only). The old B2 had it, and I left it out of the rewrite by mistake.
Points to decide:
The pre-approved / needs-discussion marking of each milestone.
Phase order: in particular, Phase 1 fixes run on the old loop first, so the Phase 2 switch-over lands on solid foundations; and production deployment comes at Phase 6, relying on the bring-up guards until then.
The build plan from the current code to the full architecture, for discussion, as `docs/Development-Plan.md`. It uses the format the architecture asks agents to use: milestones marked **pre-approved** or **needs discussion**.
**Contents**
1. **Where we are:** a survey of `main` against every section of `docs/Architecture.md`, marked done / partial / none. Two structural gaps: state is a single row, not a work-items table (L1), and canonical events carry no work item or actor (L7, the root of #78).
2. **The environment today:** services, the 4090 host, models by role, bring-up setup.
3. **How we work:** plan-first per milestone (a quick confirmation for pre-approved ones, design discussion for the rest); tests; the Quint model moves with the loop; **a bring-up run on this box ends each phase**, with guards (unprivileged user, test resources only, structural gates kept on until Phase 3 proves the classifier).
4. **Phases:**
- **0, housekeeping:** retire the old spec and update references; a bring-up script with an unprivileged user.
- **1, foundations:** work items, transcript views, fresh workspace, publish hygiene, review intake.
- **2, the conversational loop:** built alongside `control.py`, then retiring it.
- **3, authority:** action classes, the classifier, permissions and the trust dial.
- **4, environment:** toolchains.
- **5, memory:** Outline client, agent memory, scope memory.
- **6, production:** `nisse-dev` VM, secrets, delivery, browser.
- **7:** extract `nisse-core`, then `nisse-ops`.
5. **Every open issue mapped.** #46, #61, #79 and #81 are superseded by the new loop (M2.3, M2.5): they're specific to `control.py`, so fixing them there would be thrown away.
6. **Old → new section table** for M0.1, removed once references are updated.
**Also in this PR** (`docs/Architecture.md`): the status line now says agreed, and **D7 regains the browser tool** for `nisse-dev` (Playwright, internal test network only). The old B2 had it, and I left it out of the rewrite by mistake.
**Points to decide:**
- **The pre-approved / needs-discussion marking** of each milestone.
- **Phase order:** in particular, Phase 1 fixes run on the old loop first, so the Phase 2 switch-over lands on solid foundations; and production deployment comes at Phase 6, relying on the bring-up guards until then.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
https://claude.ai/code/session_01PPQ14L3LikyefCMFBqEbKE
docs/Development-Plan.md: where the code stands against each section of
docs/Architecture.md, the environment today, how we work (plan-first per
milestone, tests, the Quint model, a bring-up run on this box ending
each phase), and seven phases of milestones from housekeeping to
nisse-ops, each marked pre-approved or needs discussion. Every open
issue is mapped to a milestone or marked superseded; an old-to-new
section table serves the reference update in M0.1.
docs/Architecture.md: status now agreed; D7 regains the browser tool
for the internal test network, left out of the rewrite by mistake.
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01PPQ14L3LikyefCMFBqEbKE
No, only 4 of them are superseded. My wording made it sound like more.
Superseded (4):#46, #61, #79, #81. They exist only because of control.py's state machine, so fixing them there would be thrown away. They'll be closed, pointing at M2.3 and M2.5, when the plan is agreed.
Not yet scheduled (4), and stay open:#26, #28, #29, #30.
That's 19. §5 lists them all; the four older ones, #26–#30, are easy to miss. I've pushed a change that makes §5 say this outright, with a status column per issue.
No, only **4** of them are superseded. My wording made it sound like more.
- **Superseded (4):** #46, #61, #79, #81. They exist only because of `control.py`'s state machine, so fixing them there would be thrown away. They'll be closed, pointing at M2.3 and M2.5, when the plan is agreed.
- **Land in a milestone (11), and stay open until it's done:** #27, #33, #37, #42, #62, #65, #69, #70, #77, #78, #80.
- **Not yet scheduled (4), and stay open:** #26, #28, #29, #30.
That's 19. §5 lists them all; the four older ones, #26–#30, are easy to miss. I've pushed a change that makes §5 say this outright, with a status column per issue.
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
The build plan from the current code to the full architecture, for discussion, as
docs/Development-Plan.md. It uses the format the architecture asks agents to use: milestones marked pre-approved or needs discussion.Contents
mainagainst every section ofdocs/Architecture.md, marked done / partial / none. Two structural gaps: state is a single row, not a work-items table (L1), and canonical events carry no work item or actor (L7, the root of #78).control.py, then retiring it.nisse-devVM, secrets, delivery, browser.nisse-core, thennisse-ops.control.py, so fixing them there would be thrown away.Also in this PR (
docs/Architecture.md): the status line now says agreed, and D7 regains the browser tool fornisse-dev(Playwright, internal test network only). The old B2 had it, and I left it out of the rewrite by mistake.Points to decide:
🤖 Generated with Claude Code
https://claude.ai/code/session_01PPQ14L3LikyefCMFBqEbKE
You say that every issue opened will be superseeded, but only list 3. There are 18 issues open. Will all of them be superseeded?
No, only 4 of them are superseded. My wording made it sound like more.
control.py's state machine, so fixing them there would be thrown away. They'll be closed, pointing at M2.3 and M2.5, when the plan is agreed.That's 19. §5 lists them all; the four older ones, #26–#30, are easy to miss. I've pushed a change that makes §5 say this outright, with a status column per issue.