Skip to content
Open
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
1 change: 1 addition & 0 deletions .claude/doctrine-watermark
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
b2a3d4706516189d17533e30c9115d8c65b99d64
42 changes: 17 additions & 25 deletions .daintree/recipes/nforma-fleet.json

Large diffs are not rendered by default.

28 changes: 3 additions & 25 deletions CLAUDE.md
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,6 @@ disagree, the README wins and this file is the defect.

| path | contents | its own doc |
|---|---|---|
| `./onboard.md` | **the entry point for a coding agent installing this fleet elsewhere** — hand it the one-line bootstrap and it reads this | — |
| `docs/` | the thesis the rest is derived from | — |
| `prompts/` | five role prompts (`TEAMLEAD` `ARCHITECT` `DEVOPS` `DX` `DEV`) | `prompts/README.md` |
| `goals/` | per-role standing goals + the standard they must meet | `goals/README.md` |
Expand Down Expand Up @@ -55,37 +54,16 @@ Each is explained in full at the pointer; none of it is restated here.

## Facts with a measurement date, not standing claims

- ⛔ **~~No CI.~~ FALSE since 2026-08-20 — CI exists and GATES.** `.github/workflows/tools.yml`
is present on `main` and on multiple refs; `hermetic suites (gating)` is a **required check**
and has blocked a merge. *(re-measured 2026-08-20 at `2effc63`, `git ls-tree -r` over remote refs;
#272.)*
★ **The commit that falsified this claim cited it as its justification** — *"this repository
had no CI, so 23 instruments and 19 suites had never run"* (`239639a`). ⇒ **A measurement is
most likely to be falsified by work it caused**, which is exactly when nobody re-checks it: the
author of the fix already knows, and the files asserting it are not in the fix's blast radius.
⚠ The old line carried a date, a SHA, a method, and *"re-measure before relying on either"* —
**all four, and it still decayed for ~7 hours.** Dating a claim tells a reader it CAN decay; it
does not tell them it HAS. ⇒ `scripts/check-orientation.py` now re-measures this one.
- **No CI.** Zero workflow or `*.yml`/`*.yaml` files on any local or remote ref.
*(measured 2026-08-19 at `c465e8e`, 9 refs, `git ls-tree -r` per ref.)* Nothing here gates on
a green check, and opening a PR draws no runner.
- **One git credential for all panes** — GitHub records the operator for whatever any pane
posts, so name yourself in the body of anything you file. *(issue #4.)*

⇒ Re-measure before relying on either. A number without a date is a rumour.

---

## Onboarding someone else's repository

One line, handed to a coding agent — it is a **pointer, not a copy**, so it stays valid while the
instructions change under it:

> Clone https://github.com/nForma-AI/nForma-NEXT, then read `./onboard.md` at the root — it contains
> your full instructions for onboarding me through this tool.

⚠ `./onboard.md` installs **four things, not one**: the recipe, the prompts, `scripts/validate-recipe.py`,
and the goals. ⛔ Without the validator its validation step establishes nothing and reports no error.

---

`scripts/check-orientation.py` asserts that every path named above exists. Run it after moving
or renaming anything. A map whose pointers rot silently is worse than no map, because it is
still believed.
29 changes: 1 addition & 28 deletions docs/FOUNDING-THESIS.md
Original file line number Diff line number Diff line change
Expand Up @@ -32,38 +32,11 @@ reserved : merge · production/deploy · history rewrite · credential handling

`sendCommand` returned `{"sent": true}` for messages that reached nobody, three distinct ways:
a pane whose agent had exited, a workspace that silently flipped to another project, and text
that landed in the input box and was never submitted. ⚠ The third **leaves the text in the box**,
so the intuitive repair — send it again — double-delivers.
that landed in the input box and was never submitted.

`lastTransitionAt` advanced in **all three**, so the obvious verifier — compare a pre-send stamp —
passes on every false case.

**Measured since: five, and the fifth is not on this chain.** A mode is individuated by *which
arrow fails*, whether the loss is *terminal or transient*, and *what false signal accompanies it*
— never by which API produced the signal, or the list grows once per transport.

| # | mode | arrow | terminal? | false signal |
|---|---|---|---|---|
| 1 | pane's agent had exited | gen→del | terminal | `sent: true` |
| 2 | workspace silently flipped | gen→del *(wrong target)* | terminal | `sent: true` + `lastTransitionAt` |
| 3 | text in the box, never submitted | del→consumed | terminal | `sent: true` · also `terminal.inject` → `ok` |
| 4 | alive, delivered, queued, **not yet read** | del→consumed | ⚠ **transient** | `sent: true` + the pane reads *available* |
| 5 | a standing instruction edited into a file **the launch path never opens** | gen→del | terminal | ⛔ **none** |

⛔ **Mode 4 does not lose the message**, which is why nothing surfaces it: it is latency wearing
the appearance of availability. The remedy is a **content-free nudge** — never a re-send, because
the queued copies are still there.

⛔ **Mode 5 is a PULL failure; 1–4 are PUSH failures.** Nothing was sent, so nothing returned
true. ★ A wrong token eventually gets checked; **an absent signal gives nobody a reason to look**,
which is why this one persisted longest — measured, committed prompts had reached **one of eight**
live sessions. ★★ And its symptom is inverted: an undelivered *rule* does not look like a delivery
failure, **it looks like disobedience**. Seven roles were not emitting a `STATE:` line nobody had
ever asked them for. No other mode misattributes its failure to the recipient.

⚠ **The count is of modes OBSERVED.** Mode 5 was invisible for a day because it emits nothing, so
the absence of a sixth is the absence of a signal — not the absence of a mode.

**Consequence:** an instruction is a tracked object with a lifecycle
(`queued → delivered → acknowledged → acted-on`), and the terminal state is established by an
**off-pane effect** (branch pushed, file changed, issue transitioned), not by the substrate's
Expand Down
47 changes: 2 additions & 45 deletions docs/INSTRUCTION-PRECEDENCE.md
Original file line number Diff line number Diff line change
Expand Up @@ -290,51 +290,8 @@ TEAMLEAD as the competent grantor. ⇒ **AUTHORISED.**

⚠ **The reservation's stated _reason_ is false in this repository, and the verdict survives it
anyway — which is the part worth keeping.** Measured while writing this file: **zero** workflow
files and zero `*.yml`/`*.yaml` across all **19** remote refs, so neither command drew a lease.

⛔ **THAT MEASUREMENT EXPIRED THE SAME DAY. Re-measured at `f7b343f`, 2026-08-20:**

```
.github/workflows/tools.yml EXISTS
first run ever 2026-08-20T07:49:09Z (pull_request)
runs since 100
on: pull_request <- gh pr create STARTS A RUNNER
push: branches: [main] <- a push to a non-main branch does not
```

⛔ **The exposure window, and it is the measurement that matters:**

```
this claim published on main 2026-08-19 21:15 <- TRUE when written
CI began running 2026-08-20 07:49 <- FALSE from here
now 2026-08-20 14:24
-> 6h35m false while published, across 100 runs
```

⚠ **And the PR carrying this correction drew a runner itself** — `dev4/ci-premise-inverted`,
`pull_request`, 14:19:06, success. **The document asserting that PRs draw no runner was
corrected by a PR that drew one.**

⛔ **My first re-measurement of this said "5 runs". It was `gh run list --limit 5`** — the
default-truncation defect, in the paragraph about a decayed measurement, by the author who
filed the truncation finding. ⇒ *A reading is checkable only when the response carries its own
total*, and `gh run list` does not.

⇒ **The correct split is neither the original clause nor its removal.** The clause said push *and*
PR were spend; #42 removed both on the no-CI ground; **today the PR half is true again and the
branch-push half is not.**

★ **This is the rolling-baseline defect landing on a RESERVATION rather than on a number, and
that is the reason it belongs in this file.** A decayed count yields a stale figure. **A decayed
reservation yields an unmetered action** — and it is silent in *both* directions: over-restriction
produces no error signal (`goals/README.md`), and under-restriction produces none either, because
nothing goes red when an agent spends a runner it was told was free.

⚠ **The example above therefore survives on its own terms and its FOOTNOTE does not.** The verdict
is still AUTHORISED and still by R2 — TEAMLEAD is the named grantor under any rationale — which is
exactly the property this example was kept to demonstrate: **the procedure keys on WHO MAY GRANT,
not on why the thing was reserved.** ⇒ The rationale inverted twice in one day and the resolution
never moved. That justification was
files and zero `*.yml`/`*.yaml` across all **19** remote refs. There is no pipeline here, so
`git push` and `gh pr create` draw no metered lease and are not CI spend. That justification was
carried over from another estate and did not transfer — [#42](https://github.com/nForma-AI/nForma-NEXT/issues/42)
established it for ARCHITECT's goal file and re-based the reservation on *reserved because
TEAMLEAD admits work*; the DEV file still carries the untransferred wording ([#16](https://github.com/nForma-AI/nForma-NEXT/issues/16)'s
Expand Down
Loading
Loading