Skip to content
Merged
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
69 changes: 56 additions & 13 deletions ADOPTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -42,9 +42,13 @@ locked session may deny the network request that would otherwise retrieve them.

For a first adoption, the default is the day-zero coordinator:

Release candidate `v0.9.3` contains the terminal Architect handoff described
below but is not yet published. The tagged install command becomes valid only
after that release is published; until then, use the checked source-tree fallback.

```text
# Install the current tagged release.
python -m pip install "https://github.com/HLLMR/writwall/archive/refs/tags/v0.9.2.zip"
# After v0.9.3 is published, install that tagged release.
python -m pip install "https://github.com/HLLMR/writwall/archive/refs/tags/v0.9.3.zip"

# Installed command
writwall start --project-root /path/to/your-project
Expand All @@ -57,11 +61,13 @@ python3 scripts/start_writwall.py --project-root /path/to/your-project
```

It classifies the target from repository bytes, copies the complete skill bundle
into a temporary `.writwall-bootstrap/` directory, and emits the exact next
prompt. It is create-only bootstrap tooling, not an authority or installer.
It also initializes a durable project-specific privacy screen in per-user local
state outside the repository. The handoff records only ready status and entry
count, never its location or contents. See
into a temporary `.writwall-bootstrap/` directory only for a clean/new target,
and emits the exact next prompt. It is lifecycle-aware bootstrap and routing
tooling, not an authority or installer. Non-clean valid states skip intake and
change no target bytes. Only clean/new mode initializes a durable project-
specific privacy screen in per-user local state outside the repository. The
bootstrap handoff records only ready status and entry count, never its location
or contents. Its clean/new branch remains create-only bootstrap tooling. See
[`docs/privacy-screen.md`](docs/privacy-screen.md).
Contradictory active state stops before output. Full interface and external-
Operator packet behavior are documented in
Expand All @@ -80,6 +86,14 @@ Routes combine. A common path for an existing project is A (mapping conversation
The coordinator selects among these routes; it does not replace them. Its
handoff is temporary and must be removed before the adoption commit.

| Human command | Observed state | Fresh role receiving output | Prior session stops | Target bytes |
|---|---|---|---|---|
| `writwall start --project-root <project>` | Clean/new | Adoption coordinator | Launcher returns; coordinator stops at adoption closeout | Create-only bootstrap may be added |
| Same command | Partial/recovery | Recovery coordinator | Incomplete or locked session | Unchanged |
| Same command | Adopted/retired lockout | Owner-Agent / Project-Architect | Onboarding or prior work session | Unchanged |
| Same command | Active work order | Bounded Implementer | Prior coordinator or Implementer context | Unchanged |
| Same command | Malformed/contradictory | No role; fail-closed diagnostic | Invoking session | Unchanged |

---

## 2. Route A: the adoption prompt
Expand Down Expand Up @@ -281,12 +295,41 @@ What counts as proof is a **live-wall canary**: an Owner-authorized, genuinely m

5.9 Make the adoption commit containing `governance/`, the charter, the adapter, and DR-001. Its message names the baseline hash. This is one local commit; it is not a push, a tag, or a release. You may make it yourself or have an authorized recorder make it on your behalf after you have ratified exactly what it will contain — in either case the commit records a decision that was already yours.

5.10 Dispatch WO-001 as whatever the project genuinely needs next (6.1.4).
After the candidate passes `--work-order`, create
`.claude/active-wo.txt` with exactly one LF-terminated, repository-relative
line naming it, then run `--active`. The pilot begins. This is a fresh Owner
decision after adoption, never a continuation of the closeout: no bootstrap
or recorder run starts it.
5.10 End onboarding and hand the adopted project to a fresh Owner-Agent /
Project-Architect. The recorder presents this exact prompt and stops:

```text
Act as a fresh Owner-Agent / Project-Architect. Begin read-only and verify
the lifecycle from repository bytes rather than prior chat. Read the charter,
Plan, State, Routing, ratified adoption record, and open transactional records.
State the project's next decision plainly. Draft, but do not activate or
implement, the smallest genuine work order or bounded external Operator packet.
Lead with a concise Recommendation and material tradeoff; keep the detailed
packet behind it as supporting evidence rather than the conversational front
door. When the next safe mechanical action is available, ask once for one
combined disposition and action. If that action uses a new user-owned task,
explicitly include creation and dispatch of the named task in that approval
request; never infer task-creation permission afterward. Once approved, perform
every mechanically available authorized step. Do not ask for the same decision again.
The human Owner alone ratifies intent and activates work; preserve a distinct
fresh review after implementation. The onboarding coordinator stops here and
does not continue into project work.
```

The Architect drafts whatever genuine work the project needs next (6.1.4),
including a bounded external Operator packet when that is smaller than a
repository work order. It leads with its recommendation and material tradeoff;
the complete packet is supporting evidence. When a safe next mechanical action
is available, its single approval request combines the disposition with that
action. A new user-owned task is created or dispatched only when that same
request explicitly asks for it. After approval, the Architect performs all
mechanically available authorized steps without asking for the decision again.

For a repository work order, activation remains a distinct Owner decision.
After the candidate passes `--work-order`, the Owner-authorized lifecycle
creates `.claude/active-wo.txt` with exactly one LF-terminated, repository-
relative line naming it, then runs `--active`. The pilot begins. No bootstrap
or recorder run activates or implements that work.

---

Expand Down
2 changes: 1 addition & 1 deletion CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -78,7 +78,7 @@ gate against the final checked public candidate on native Windows and native
Ubuntu:

```text
python checks/check_coordinator_release.py <external-candidate-directory> --expected-tag v0.9.2
python checks/check_coordinator_release.py <external-candidate-directory> --expected-tag v0.9.3
```

The gate copies the candidate to temporary build space, builds and installs the
Expand Down
36 changes: 18 additions & 18 deletions PROJECTION-MANIFEST.sha256
Original file line number Diff line number Diff line change
Expand Up @@ -5,9 +5,9 @@ b2e36dfcfc6eb31570c9340640bcd73abc62f57c80b4794abf36e3d3e89ab34f .github/depend
9e90d43615b02a265b08692ef7a1c00a37477a5c6b1e8233a8fc7bedefaedea6 .github/pull_request_template.md
40e5cddf710e4e6fa4984ac864fdb30a7031005ef1a80082ce0cc6a4f9bc115e .github/workflows/ci.yml
e544abe8ffd83c81c7b002cbd2e552f9d56f226ea20e1e0722c5d1bdec914fe0 .gitignore
73bdedc8e39d50d9ee61e776583e601797b6e2a2b6c50d2741959472eb072861 ADOPTING.md
3070e0fcfea3c39c621d323b586e108ee86e83f56d4300117bba45db0f49124b ADOPTING.md
1179c999034f4ec1c1d44c1946bd2955c4625905e80767abe760c8c3ab01c493 CLAUDE.md
ab361087e7fd15a160587426f7ac6e8d45e7546fc821c2b07432a8e007447afa CONTRIBUTING.md
86f3193d5174d8bc5a594a2c5a065de97255e9f223da374632c8eb3f592ca6ab CONTRIBUTING.md
664196054cd98585105be457afa09c788a482416ccb48a87bb269b2156e49ae6 DOCTRINE.md
9ba9550ad48438d0836ddab3da480b3b69ffa0aac7b7878b5a0039e7ab429411 LICENSE
a38775f2d68b40577253ee48061ba67af3c75b7620dc506b34b40ce2a3b660ee LICENSE-MAP.md
Expand All @@ -16,17 +16,17 @@ c274f80372d90c012937370f0e1f15087d22e308ef98b27cea5dc0d2d088366c LICENSES/Apach
a2010f343487d3f7618affe54f789f5487602331c0a8d03f49e9a7c547cf0499 LICENSES/CC0-1.0.txt
59746d6285ffa44bfc7ecada352aa5d6a20dc8eab418a60ce091cc739012c135 LICENSES/MIT-0.txt
35e6d37b7c5fa0c1fc872315cbd362cd24bfa41e1b7dc3019fbcd31e99350f51 NAMING.md
bbbc4ba483ace56bc7e3827cdc24b867db981efec5ba13d53e1b788591d430ee PROJECTION-PROVENANCE.md
96b3466c452f1288020b5f62e0729deb04c860e5bd0d34a3f5f2418ee9aa25f0 PUBLICATION.md
e81903350f305351ccd52e7acaa584b4683b7ba65fa1ecbeb2c048eec357e483 README.md
61e2afa6304c7e1ba8f2cd9687d51d8bb9ab5f9c9b68bb6883b1f4252288ff51 PROJECTION-PROVENANCE.md
9716fb18ddca4626791e17474cdba2fd343f47886080c6ff8b1e7c41f63830ec PUBLICATION.md
2bef9b65ca9ff3aec8dc8149f185f337c7f0e4d71c79c62661f37f9c1a543c82 README.md
284a0862f3be77e8d867aa4d3ef92ed1a64ad4315d6d9074f6bb64771b6d1dd0 REUSE.toml
ab75b39490b4db4e203f5b23b480a1c998d87cf07d760cb787cb260778b21d0a SECURITY.md
6a51c1211cc675599634d144ca24a705ec1696f84640a6464b14efb1d6c3a629 SELF-HOSTING.md
04ee91f398218f895f9ef4cb990c01e3fea1847e46882a7700f352d00e879bda START-HERE.md
10d0bc5c620e4fb108869027cb69bd754e616927b9f9e6cec635a02b43abce1d START-HERE.md
75c7ae0f569148f489570d63df916a70b6ccf24b77db2076cdee29663f747428 adapters/claude-code/README.md
aeb7f81d139e7ffa6de9a1782444b99eb6d549ac1c3a8b9c0f8bcb9c6addfa6d adapters/claude-code/SECURITY.md
dd29af2a39d25e0270ad9acc23ee912f81e39c674e1179759f4a3010c6a0c1a0 adapters/claude-code/wo_capability_wall.py
3663baaaede31c20b87cbe27b37a7a2db6485782ffc581d2e3e05ca525adade7 checks/check_coordinator_release.py
cb1647439902b2ee7546ed7c7c84375f01164b662047e99f42002f5e5a8335bf checks/check_coordinator_release.py
b872c46f8a8ea2fc317b4c4fd0af00c9145012b11256c923987d878d79c726c2 checks/check_distribution.py
60fe377dac32b8d1697f859371ef40d26ed4e695fdceeda6d29ec0318d539504 checks/check_identity.py
30986c40ff7c9b29e2fba39ec04c18af3c1c351490410bd532a8391bcb92ed11 checks/check_licenses.py
Expand All @@ -48,7 +48,7 @@ fa88788242d920999b6e6737ea60b03dfe3f9ba2e0d90386b6bbcfeb6acd0509 docs/agents/do
0a5259d80265765aee16a421546e44458a1aabeecfa8c7f7dea8aead6a79655b docs/assets/writwall-readme-banner-0a5259d8.png
ad0fb4f671b8da9e3ab9720af7b39ac9c93201e6131c1df996e090a2bb2acc8a docs/assets/writwall-readme-banner.svg
7cfd0ae28d07cdfbb367adc4f7e606a1538ebf61ff140a32f8e793028110cedf docs/bootstrap-charter-addendum.md
efd77cef5df06a36f880053d4a33d038766fe9c22d2958b06072a6257d4014ac docs/day-zero-coordinator.md
d5c6554675bd34015949381bce96b7f46309bc27db12a5e583f3f4b2f9c2e2ca docs/day-zero-coordinator.md
e1214e3e6018642809339249bb091a6fd754847b4f77c4bc7a39c5c87e6769cc docs/identity-migration.md
4d54cd53db8c165b40af7eb11b97a7f4faf5f23479c0efc8238e5d463b159008 docs/name-clearance.md
1eef400dd2e12b109ceb9b30c107dbd7f25d3c64182346dd0f370bf9ccaa7088 docs/privacy-screen.md
Expand All @@ -62,10 +62,10 @@ d2c5a8ca21edf842dfd17a83862024afa0a92349abf693a60e55ce454c8d78fa examples/name-
30cdb11fbeb2fd9bbf4048255331ccbbdd6e516fae5adfa5317af00ce53607c9 governance/ADOPTION-MAPPING.md
08b235351ab7799715b1e2df4fa3dd9fa88bb85084c8aade4d01039bf255b489 governance/LOG-denials-probes.md
50784b173c90c4fd22572306429187c8a7e22614f4b9ad649a3005647467c7fa governance/LOG-denials.jsonl
6cd8bb10ebd50071b2f355c1934fdbb525452dabeee7cc98f24eaddf03a1fef6 governance/LOG.md
fcbdd620daea8b69e35ecb859f08f5332ceb89f6ac5dc9a293096b4190e4d437 governance/PLAN.md
8f1ae9b4f005a31eed74e9f68429fed33fc6ffed2bd31e05de59327d4f9db220 governance/LOG.md
3b5645777ed304ce7205fbd797323320fd10ddd421bf4b9562c5bd3c28b4df9f governance/PLAN.md
dd445eb2994e0d9615bc61fe2ae157a6b14ba7b190c65b705d380b31c49fdfe0 governance/ROUTING.md
609d2afa9e0bb198caebbfc08aee0b541fd713041b106d66100b5670bdf9639a governance/STATE.md
abd6676fd83bb1e7a480048ffc3e717fe9184a41e5c887ef223c40d3bed113a1 governance/STATE.md
e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 governance/archive/.gitkeep
e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 governance/briefs/.gitkeep
e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 governance/decisions/.gitkeep
Expand All @@ -82,20 +82,20 @@ b567ce0c0867464328e81774d888f6491fa66b68ac73be01f993e5c4c66d3ed8 governance/tem
d355e46f978f17de8824af805e05124e0f20b1c072523b518422044f88c6f079 governance/templates/D-adoption-record.md
2b586efadab716a59fcafb74312a45a05401a4787fee6ae18cb5c9dd14ef3a09 governance/templates/E-adoption-mapping.md
e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 governance/work-orders/.gitkeep
37cb8ccdbe1fd69854c88cf23acacae830cc14c532392a2a970b28530b9bee11 identity/legacy-references.json
2f0ce5496677f7a85b3bf49c22ebd16e8ece655bf1cc53a8714d1f148142bc0e identity/legacy-references.json
345b7e962731c085a95aea66a344eae000b27c9bde13b0d790c76b73273dbe7a init.sh
5c90584642f405534b2071f27396ff293ab01632e4dbb8ccb6b8ec043dca4cc9 migration-guides/0.1-to-0.6.md
ba4eff258ca5b9a45f3f9f1cbf646ba5bc5521fae812adacac65cd2e78698c9d migration-guides/0.6-to-0.7.md
7be9ff49c33830f929584e9e6756f06be8634b1c79ff7210bf5184b51bfc0769 migration-guides/0.7-to-0.8.md
fafcbf659c40d7260dddaa8a64b6b59c3b7de484f77d879a90323bb4b3e1a4a7 projection/public-files.txt
8a70068ac39d532fd783ae50e7f1458175a93dd8a31c3ccde6461d40e28f5430 pyproject.toml
cb875755a70e151f9ea75b11d88da8dff8f5e9732ff923c5d01156ecc392a445 pyproject.toml
455ca1ab3c9e7e78afbb9946e13b94497ba24003ab6f411ea96cce26d4ecc39e scripts/build_distribution.py
bdbe47e8ea246ceafb874229d5582a9cc18db7c66250c9873d50a787bd5d9fe2 scripts/build_public_projection.py
3cf88f936599e0e84bc2368bc0503a39b9f96e47b473e09b26569e5c3c9edbd9 scripts/collect_name_clearance.py
8441030e9df498e9c2621d37d9bf77850599723c985b1d958b8d11638dcb1ae4 scripts/privacy_screen.py
9885aa8bf47e055571ce47b35cecb655415d0355113e36bc341397ae38f0e2c9 scripts/start_writwall.py
fb793b5d08981e9a2f44f62c26d79d3652aa56f5d6db600fca4ce5546ba2c141 scripts/start_writwall.py
374f4e8a80b7b9e162b9360a3907b6ffe12ce94ba0ed827058c7b3c9c0658b2c skills/writwall-adopt/LICENSE-MAP.md
deb31382704a7db0531d96d06581a9d27082b9e77ee2ea319c9242d530a78ea4 skills/writwall-adopt/SKILL.md
1c15f2a97cddf727f3173b8971e6ea3e05ab93f57664f8c3031eb0e634a87933 skills/writwall-adopt/SKILL.md
75c7ae0f569148f489570d63df916a70b6ccf24b77db2076cdee29663f747428 skills/writwall-adopt/assets/adapters/claude-code/README.md
dd29af2a39d25e0270ad9acc23ee912f81e39c674e1179759f4a3010c6a0c1a0 skills/writwall-adopt/assets/adapters/claude-code/wo_capability_wall.py
7cfd0ae28d07cdfbb367adc4f7e606a1538ebf61ff140a32f8e793028110cedf skills/writwall-adopt/assets/bootstrap-charter-addendum.md
Expand All @@ -121,14 +121,14 @@ d355e46f978f17de8824af805e05124e0f20b1c072523b518422044f88c6f079 templates/D-ad
9924816cbbeade6f88f79d3e06fe04d143d801783888210ac2325925d69e4bdb tests/test_check_distribution.py
b046f2eea794070194294a33f2914e627eed384e63fccffc2ac46693db2a968c tests/test_check_licenses.py
9a106ff5182b4a15713575de42e90b0dc5cdeebcb17ba08d97522a4c9aa6b2fa tests/test_check_work_order_dispatch.py
c276150136fc37b056e43700b802ab42b29ecb0123028116e7bda1d6a03df146 tests/test_coordinator_release.py
22901437098bb4883153af4f8d02f14e02585343791ca813aa425e2956510927 tests/test_distribution.py
61c0276a850b38c39c9a8fb355b71fae6f9fa228d8cb664cff8f8c9ca60b1173 tests/test_coordinator_release.py
e5e6df9ead5effa20ee48167f070aa43eb8716e4df66fd997df65d6c2edc7c69 tests/test_distribution.py
e150a2f988a4b0beac5f70644f55f5e185a8aa575e988a19642bafabc0f07775 tests/test_identity_migration.py
11cd8090dbc53e8aa6a2f14cb181c8a11696335da8f40700eae5116798e49ba5 tests/test_init_sh.py
96c255d84e37b8884cde769897e763776b81027080c2308c33dc5e4b8df4a4bf tests/test_name_clearance.py
a8345b5da77a8b73dd0269110be89bc0ad85c253f2c76b1b075d494fa018a21f tests/test_privacy_screen.py
ee771c239c0fc072675f88617dec7e330c1e19be90a8b22691d7049dbb5a4544 tests/test_public_projection.py
5673f51cddbff6f0dc82c11dd3cc581ee2d0457717a5797844c464aff21e62b6 tests/test_start_writwall.py
478a470078cfb0ac10a9e93c5d4c656830bf089f7b7a4999c7ce975b7dc0b08e tests/test_start_writwall.py
0684c04067eb95eadc9f72ab126d8662b4a5e2005c80b2dea174075a6140eebc tests/test_wo_capability_wall.py
e8caf7f4421dc7f78b0d766741ec2ef4c2ac6dab6117fab6e4175b27d31e4d49 writwall_cli/__init__.py
9e0fbb2625b7a99ed80a3a708f8a0742d91bbf7e3cd2862d21a75515031083e5 writwall_cli/__main__.py
Expand Down
4 changes: 2 additions & 2 deletions PROJECTION-PROVENANCE.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,8 @@ Legacy commit identifiers in projected records refer to that private
source and are intentionally not resolvable from fresh public history.
No private remote URL is recorded here.

- Source commit: `0150c3a97996f50a9faf77501c03b7ff58a237a1`
- Source commit time: `2026-09-01T12:20:52-05:00`
- Source commit: `9da1a2b34e787737837a9c857f002dc23ebfb277`
- Source commit time: `2026-09-02T12:10:32-05:00`
- Projection allowlist SHA-256: `fafcbf659c40d7260dddaa8a64b6b59c3b7de484f77d879a90323bb4b3e1a4a7`

## Legacy identifier inventory
Expand Down
2 changes: 1 addition & 1 deletion PUBLICATION.md
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ point. Before creating a release tag, run this gate against the final external
candidate on native Windows and native Ubuntu, naming the exact intended tag:

```text
python checks/check_coordinator_release.py <candidate-directory> --expected-tag v0.9.2
python checks/check_coordinator_release.py <candidate-directory> --expected-tag v0.9.3
```

The command fails before building unless the canonical intended tag matches
Expand Down
35 changes: 24 additions & 11 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -93,14 +93,18 @@ actually blocks the current session before real work begins.

## Try it in five minutes

If you are new to Writwall, run the day-zero coordinator from this clean source
distribution. It inspects the target before assigning a role, makes the complete
adoption bundle local, and writes the exact next prompt without installing the
wall or claiming adoption:
Run the lifecycle-aware coordinator from this clean source distribution. It
inspects the target before intake, assigns the correct fresh role, and changes
target bytes only for clean/new bootstrap. It never installs the wall or claims
adoption. This routing happens without installing the wall or claiming adoption:

Release candidate `v0.9.3` contains the terminal Architect handoff described
below but is not yet published. The tagged install command becomes valid only
after that release is published; until then, use the checked source-tree fallback.

```text
# Install the current tagged release.
python -m pip install "https://github.com/HLLMR/writwall/archive/refs/tags/v0.9.2.zip"
# After v0.9.3 is published, install that tagged release.
python -m pip install "https://github.com/HLLMR/writwall/archive/refs/tags/v0.9.3.zip"

# Installed command
writwall start --project-root /path/to/your-project
Expand All @@ -113,11 +117,20 @@ py -3 scripts/start_writwall.py --project-root C:\path\to\your-project
python3 scripts/start_writwall.py --project-root /path/to/your-project
```

The command asks one question at a time, creates `.writwall-bootstrap/` in the
target, and initializes a durable project-specific privacy screen in your
operating system's local user state outside the repository. Read its
`HANDOFF.md`, open the named
agent in the named location, and paste the supplied prompt. Do not enter
| Observed state | Fresh role | Prior session stops | Target bytes |
|---|---|---|---|
| Clean/new | Adoption coordinator | Launcher returns; onboarding later stops at closeout | Create-only bootstrap may be added |
| Partial/recovery | Recovery coordinator | Incomplete or locked session | Unchanged |
| Adopted/retired lockout | Owner-Agent / Project-Architect | Onboarding or prior work session | Unchanged |
| Active work order | Bounded Implementer | Prior coordinator/Implementer context | Unchanged |
| Malformed/contradictory | No role; fail-closed diagnostic | Invoking session | Unchanged |

For clean/new state, the command asks one question at a time, creates
`.writwall-bootstrap/`, and initializes a durable project-specific privacy
screen in your operating system's local user state outside the repository.
Read its `HANDOFF.md`, open the named agent in the named location, and paste the
supplied prompt. Later states print their fresh-role handoff directly without
intake, privacy initialization, or target writes. Do not enter
passwords, API tokens, private keys, mailbox contents, DNS values, or other
secrets; intake is stored as local plain text. See the
[coordinator reference](docs/day-zero-coordinator.md), or use
Expand Down
Loading