@antoneeo/agentic-sdlc-skill 1.42.0 → 1.43.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +16 -0
- package/README.md +2 -2
- package/gemini-extension.json +1 -1
- package/package.json +1 -1
- package/skills/agentic-sdlc-skill/SKILL.md +8 -8
- package/skills/agentic-sdlc-skill/elicitation.md +10 -1
- package/skills/agentic-sdlc-skill/templates.md +50 -7
- package/skills/agentic-sdlc-skill/vision.md +308 -245
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,22 @@
|
|
|
2
2
|
|
|
3
3
|
Tutte le modifiche significative a questa skill saranno documentate in questo file.
|
|
4
4
|
|
|
5
|
+
## [1.43.1] - 2026-10-18
|
|
6
|
+
|
|
7
|
+
### Fixed
|
|
8
|
+
- F-072 (field run): the `SKILL.md` line that announces the docs site now reads `scripts/docs_site.py --root <project> --open` and says to use it to show the project state. Asked for the state, an agent had opened the site in its own client pane, where it renders blank, and improvised a local server; `--open` opens it in the user's browser, where it works offline.
|
|
9
|
+
|
|
10
|
+
## [1.43.0] - 2026-10-18
|
|
11
|
+
|
|
12
|
+
### Added
|
|
13
|
+
- F-074: every Vision is born from an owner interview. Before any Vision text is written (project, feature, lens, and the devPNT M-VISION), the agent asks the owner six questions in order, re-asking an answer that has the wrong form: the problem as one concrete case, the benefit as a result for someone, the actors including who takes the initiative, a success signal with its starting value, the boundaries, and the known constraints with where each comes from. Then the owner approves a one- or two-sentence north star in their own words; without it no Vision is written, not even a draft. The blind check still tests that the rules hold; the approved north star shows they are the owner's. `vision.md` §The owner interview.
|
|
14
|
+
|
|
15
|
+
### Changed
|
|
16
|
+
- `elicitation.md`: the skip path never covers a Vision; one sentence plus a spike is not a complete spec.
|
|
17
|
+
- Bootstrap no longer writes a Vision reconstructed by the agent: `agentic-sdlc-init` seeds `ai_docs/vision/project_vision.md` as a stub awaiting the interview (an existing file is never overwritten).
|
|
18
|
+
- A Non-Goal now bounds scope. It rejects a proposal that pursues what it names; it is not a ban on behaviour that already exists and creates no obligation. A behaviour that must never happen is an Invariant or a constraint with its source.
|
|
19
|
+
- Vision templates ask for the north star in the owner's words with its approval, the problem as a case, the actor with the initiative, signals with starting values, and the source of every rule. Regression: `evals/scenarios/vision_needs_owner_interview.md`.
|
|
20
|
+
|
|
5
21
|
## [1.42.0] - 2026-10-18
|
|
6
22
|
|
|
7
23
|
### Added
|
package/README.md
CHANGED
|
@@ -21,7 +21,7 @@ Vendoring requires all three files: the entry point, `sdlc_core.py`, `knowledge.
|
|
|
21
21
|
## Key Features
|
|
22
22
|
|
|
23
23
|
- **Risk-proportional workflow**: L1/L2/L3/Spike triage avoids heavyweight process for trivial work, with a symmetric **Write Triggers** table mapping each event to the document it produces (one event, one destination).
|
|
24
|
-
- **Vision-guided governance**: Standalone projects use `ai_docs/vision/`; Hybrid projects use devPNT `M-VISION` as the milestone north star. The Vision names its **Actors** — the cast a feature serves, one light line each — so UX is designed for concrete roles, not an implicit "user".
|
|
24
|
+
- **Vision-guided governance**: Standalone projects use `ai_docs/vision/`; Hybrid projects use devPNT `M-VISION` as the milestone north star. The Vision names its **Actors** — the cast a feature serves, one light line each — so UX is designed for concrete roles, not an implicit "user". Every Vision, the M-VISION included, is written only after a six-question **owner interview** and your explicit approval of a one- or two-sentence north star in your own words — the agent never writes one alone.
|
|
25
25
|
- **Architect pass — capabilities before files**: at L3, before listing what changes, the feature is stated as the *capabilities* it needs and each is ruled against the platform (EXISTS / INADEQUATE / MISSING); what is missing is designed as a component with its own contract, of which the feature is one consumer — never inlined into the feature's code path. A `## Component Map` in `strategic/architecture.md` is the durable inventory the pass reads, so the platform is not re-derived from source every session. On a codebase the methodology arrives in late, the map's silence is treated as **unread, not empty**: it can never ground a MISSING verdict.
|
|
26
26
|
- **Execution disciplines**: explicit TDD (RED/GREEN/REFACTOR), evidence-first debugging with hypotheses ranked by likelihood and verification cost, supported causal questioning and clean Poka-Yoke correction with regression checks; an L3 spec-elicitation round and a single code-review definition wired into the workflow phases.
|
|
27
27
|
- **Operative + comprehension guides + agent-global KB**: distil user-provided indications into source-faithful operative `GUIDE_*.md` (`source_kind: document`), and let the agent autonomously author **code-comprehension guides** (`source_kind: code`) for complex components — a source-faithful mental-model map that survives across sessions, so the next session doesn't re-derive and break the component from partial understanding. Consulted before work; shared cross-project via `~/.agentic-sdlc`.
|
|
@@ -71,7 +71,7 @@ The global package also exposes:
|
|
|
71
71
|
agentic-sdlc-init
|
|
72
72
|
```
|
|
73
73
|
|
|
74
|
-
Run it inside a project to create `ai_docs/`, Vision
|
|
74
|
+
Run it inside a project to create `ai_docs/`, Vision stubs awaiting your interview, strategic docs, audit plan, and agent protocol files (`AGENTS.md` — also the Antigravity CLI surface, `CLAUDE.md`, `GEMINI.md`, `.cursorrules`).
|
|
75
75
|
|
|
76
76
|
It also **wires the SessionStart orientation hook** into `.claude/`, so an agent opening
|
|
77
77
|
the project is handed the reading guide, the generated manifest, the guide router and the
|
package/gemini-extension.json
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@antoneeo/agentic-sdlc-skill",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.43.1",
|
|
4
4
|
"description": "Documentation-First SDLC protocol for Claude Code, Gemini CLI, Google Antigravity and Codex with risk triage, Vision governance, installed support files and optional devPNT integration.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"claude-code",
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: agentic-sdlc
|
|
3
|
-
version: 1.
|
|
3
|
+
version: 1.43.1
|
|
4
4
|
description: Documentation-First SDLC protocol with risk-proportional triage, Vision as a guide, a complete Standalone mode and optional symbiosis with devPNT. Use for features, significant bugs, refactors, audits and documented maintenance.
|
|
5
5
|
author: Antonio Pinto (https://github.com/Antoneeo)
|
|
6
6
|
copyright: (c) 2026 Antonio Pinto
|
|
@@ -21,7 +21,7 @@ Support files in the skill directory:
|
|
|
21
21
|
- `hybrid.md`: the devPNT seam — the authoritative hierarchy, the ownership matrix (who owns what when both authorities are live), the triage equivalence, the feature-state mapping and the shadow discipline. Read it when the `devpnt_*` tools point at this project; a Standalone session never needs it.
|
|
22
22
|
- `routing.md`: which lens owns this unit of work. Read ONLY when a sibling lens skill is installed alongside this one; a single-lens install never reads it.
|
|
23
23
|
- `scripts/sdlc_check.py` + `scripts/sdlc_core.py`: the mechanical validator for the docs root (`check`, `validate`, `index`, `stale`, `mark`, `benefit`, `gate`, `plan`, `orient`, `migrate`). Keep the entry point, `scripts/sdlc_core.py` and `scripts/knowledge.py` together; the last supplies common memory and KB integrity.
|
|
24
|
-
- `scripts/docs_site.py --root <project
|
|
24
|
+
- `scripts/docs_site.py --root <project> --open`: opens in the user's browser a read-only site of what the agent reads; use it to show the project state.
|
|
25
25
|
- `ENFORCEMENT.md`: optional setup for CI and hooks.
|
|
26
26
|
|
|
27
27
|
Read these files only when needed. `SKILL.md` is the operating contract; the support files are progressive resources.
|
|
@@ -89,7 +89,7 @@ Triage decides IF documentation is due; this table decides WHICH document each e
|
|
|
89
89
|
| `solutions/SPIKE_[topic].md` | Closing any Spike — including a failed one (a negative outcome is still an outcome). | — |
|
|
90
90
|
| `solutions/E2E_TEST_[feature].md` | Every L3, before the closure review (it is part of the reviewed diff): the human tester's post-merge script — new-behavior scenarios when behavior changed, regression scenarios always (`templates.md`). | 5 |
|
|
91
91
|
| `solutions/MERGE_REVIEW_[feature].md` | Every L3, after the closure review: the integrator's brief — what to review (`sdlc_check.py review-map`), what was verified by which gate, what only a human can judge (`templates.md`). The PR description links it. | 5 |
|
|
92
|
-
| `vision/features/VISION_[feature].md` | Feature known multi-milestone at analysis time, OR the retroactive trigger: you are about to create the SECOND `ANALYSIS_*` on the same theme — extract the shared feature vision first, then let both analyses reference it. | 3 |
|
|
92
|
+
| `vision/features/VISION_[feature].md` | Feature known multi-milestone at analysis time, OR the retroactive trigger: you are about to create the SECOND `ANALYSIS_*` on the same theme — extract the shared feature vision first, then let both analyses reference it. Either way it is written after the owner interview (`vision.md` §The owner interview). | 3 |
|
|
93
93
|
| `audit/handoff.md` (workstream registry) | **Never by hand — generated by `sdlc_check.py index` from the `HANDOFF_*.md` sources**, and `validate` errors when the two disagree. Regenerate at every L3 closure and at session end; the `Date:` header is derived, so no writer touches it. It is an inventory for lookup, not a work board: no assignment, no due dates, no ordering, no holder. | 5 / session end |
|
|
94
94
|
| `audit/HANDOFF_[feature].md` | **One per OPEN workstream, with or without volatile state** — it is the authored home of that workstream's registry row (frontmatter `workstream`/`level`/`branch`/`status`/`since`/`next`/`details`/`updated`), so no file means no row. Its `next:` is the next concrete step in one sentence; what happened, and the state of the work, go to the Diary as a dated entry. Also carries the resume logistics; **the ANALYSIS Diary keeps the durable narrative (DRY)**, and this file is DELETED at closure — deleting it *is* removing the row. | 4 / 5 / session end |
|
|
95
95
|
| `audit/project_notes.md` | A note true for the whole project rather than for one workstream (release pending, environment quirk). Appended verbatim to the generated registry; it exists so regenerating cannot destroy notes that belong to no workstream. | 5 / session end |
|
|
@@ -101,7 +101,7 @@ Triage decides IF documentation is due; this table decides WHICH document each e
|
|
|
101
101
|
| ADR — `architecture/` (Standalone) or devPNT DB (Hybrid) | An architectural decision was taken (new pattern, layer or contract change, structural dependency): record it at closure, before DONE. No decision, no ADR. | 5 |
|
|
102
102
|
| `strategic/architecture.md`, `strategic/existing_features.md` | Bootstrap; update at closure when the stack or the feature catalog actually changed. | 1 / 5 |
|
|
103
103
|
| `strategic/architecture.md` — `## Component Map` | A component was BORN, its contract changed, **or the pass DISCOVERED an existing one while searching an unmapped area** — the same closure adds or corrects its row (`architect.md`). Keyed on the component, not on the stack: a new component is not a stack change, and a discovered one is how an area gets marked ANALYZED while the map stays silent about what lives there — after which the next feature may lawfully rule it MISSING and build it twice. | 5 |
|
|
104
|
-
| `vision/project_vision.md`, `roadmap.md`, `principles.md` | Bootstrap
|
|
104
|
+
| `vision/project_vision.md`, `roadmap.md`, `principles.md` | Bootstrap writes each as a **stub** (`Status: DRAFT`, body: awaiting the owner interview) — never a Vision reconstructed by the agent; what it observed goes to `strategic/`. The Vision itself is written only after the owner interview and its approved north star (`vision.md` §The owner interview), against `vision.md` §1–§4; promoted to APPROVED only by explicit user confirmation, and only after the blind check (`vision.md` §6) — which also gates any amendment of an APPROVED Vision. | 1 / 2 |
|
|
105
105
|
| `INDEX.md`, `reference/INDEX.md`, `strategic/features_history.md` | Never by hand: regenerated by `sdlc_check.py index` at closure when canonical docs or guides changed (prose discipline where the validator is not adopted). | 5 |
|
|
106
106
|
|
|
107
107
|
## Operating Modes
|
|
@@ -142,7 +142,7 @@ devPNT is not there, work Standalone and nothing is lost.
|
|
|
142
142
|
- Read `ai_docs/audit/handoff.md` if it exists — the **workstream registry**: one row per open workstream, so you see at a glance what is in PROGRESS, on which branch, since when, before touching anything. It is generated from the `HANDOFF_*.md` files, so it is read here and never edited here. If a row's Date/Branch are inconsistent with reality, treat that row as history. When resuming a specific workstream, read its `audit/HANDOFF_[feature].md` (its row plus the resume logistics) AND its ANALYSIS Diary (the durable narrative) — the registry row points at both. A hand-written or pre-1.17 narrative handoff still works and is converted when you next write it, not now (Write Triggers).
|
|
143
143
|
- Read `ai_docs/README.md` (curated must-reads), `ai_docs/INDEX.md` (generated manifest of all canonical docs) and `ai_docs/reference/INDEX.md` (the guide router) to know what exists before exploring the code. The router is a mandatory read, not an optional one: it is the only orientation step that tells you a guide already governs the work you are about to do. On a project with no guides yet it exists as an empty stub (`sdlc_check.py index` writes it precisely so the mandatory read has something to read) — the honest verdict there is `router: no match`, and if the file is genuinely absent, say `router: absent (no router file)` and regenerate it rather than inventing a match. `solutions/` and `audit/` are not indexed per file: search them with glob/grep.
|
|
144
144
|
- Recommended default: a SessionStart hook (`ENFORCEMENT.md` §4) emits this orientation automatically at session start (README + INDEX + guide router + handoff + triage reminder), so the router reaches the context even in a session that never opens Phase 1 explicitly. Wire it wherever Python is available; when it is not wired, do these reads manually as above — the process never depends on it, and it fails open (a missing/empty `ai_docs/` never blocks the session).
|
|
145
|
-
- If `ai_docs/` is missing or incomplete, create the structure and the **bootstrap set** by analyzing the project in batches: `README.md`, the three `vision/` docs (`Status: DRAFT
|
|
145
|
+
- If `ai_docs/` is missing or incomplete, create the structure and the **bootstrap set** by analyzing the project in batches: `README.md`, the three `vision/` docs as stubs awaiting the owner interview (`Status: DRAFT`; the agent never reconstructs a Vision — Write Triggers), `strategic/architecture.md`, `strategic/existing_features.md` and — Standalone — `audit/audit_plan.md`; then regenerate `INDEX.md`. Nothing else is mandatory at bootstrap (per-document triggers: Write Triggers).
|
|
146
146
|
- **Arriving in a project that was never curated** (the usual case — you arrive with a task, not with a bootstrap): write `audit/audit_plan.md` FIRST. It is the scope ledger the rest is built on — one row per area, all PENDING, `SKIPPED` for what genuinely does not merit reading (vendored, generated). Then the other bootstrap documents describe what you have actually analyzed, and the `## Component Map` in `strategic/architecture.md` starts at whatever the first task made you understand. **No full-codebase sweep is required before the first feature**: the map grows feature by feature, each one marking the areas it covered (`sdlc_check.py mark`). What is NOT deferred is comprehension of what the change touches or depends on — that is understood now, at full standard, mapped or not. The licence is about writing the inventory, never about designing on a guess (`architect.md` §2: unmapped is *unread*, not *empty*, and can never ground a MISSING verdict).
|
|
147
147
|
- In Standalone use `ai_docs/audit/audit_plan.md` for mapping and state.
|
|
148
148
|
- In Hybrid prefer the devPNT/KL mapping when available; do not duplicate plan governance.
|
|
@@ -153,13 +153,13 @@ devPNT is not there, work Standalone and nothing is lost.
|
|
|
153
153
|
Standalone:
|
|
154
154
|
- Read `project_vision.md`, `roadmap.md`, `principles.md`.
|
|
155
155
|
- Compare them with the request as recorded in `audit/requests/REQUEST_[feature].md`, not with a paraphrase of it.
|
|
156
|
-
- If a document declares `Status: DRAFT`, treat it as a hypothesis: flag conflicts, but do not block an explicit user request.
|
|
156
|
+
- If a document declares `Status: DRAFT`, treat it as a hypothesis: flag conflicts, but do not block an explicit user request. A stub awaiting the owner interview is no Vision at all: an L3 that needs one opens the interview.
|
|
157
157
|
- If it declares `Status: APPROVED` and the request conflicts, stop and ask for a choice: update the Vision or modify/reject the request.
|
|
158
158
|
- Never promote a Vision to `APPROVED` without the user's confirmation.
|
|
159
|
-
- **Writing or amending a Vision is its own discipline — follow `vision.md`.**
|
|
159
|
+
- **Writing or amending a Vision is its own discipline — follow `vision.md`.** It starts with the **owner interview** (`vision.md` §The owner interview): six questions in order, then the north star in the owner's words, explicitly approved, before any Vision text exists — there is no skip path, and a one-line request plus a spike is not a spec. Then draft against its §1–§4 (the properties that make a rule survive a motivated reader, and the minimum sections a gate needs), then run the **blind check** (§6) before promotion to APPROVED and before any amendment of an approved Vision. A Vision that has never been read cold by someone with no other context has not been tested at the only thing it exists to do.
|
|
160
160
|
|
|
161
161
|
Hybrid:
|
|
162
|
-
- Read the milestone's M-VISION, or ask for/create the step required by the devPNT protocol.
|
|
162
|
+
- Read the milestone's M-VISION, or ask for/create the step required by the devPNT protocol. A new or amended M-VISION is born from the owner interview (`vision.md` §The owner interview) exactly like a local Vision: north star approved before the draft, answers in the request record.
|
|
163
163
|
- Verify that the request serves a benefit or success signal of the M-VISION.
|
|
164
164
|
- If the request adds unauthorized scope, treat it as a Vision divergence.
|
|
165
165
|
- The M-VISION is a Vision: `vision.md` applies to it too. The gate lens of the blind check (§6) is the proportional subset for a milestone-scope document.
|
|
@@ -11,7 +11,16 @@ requirements or an earlier reply already answer goal, scope, and constraints, an
|
|
|
11
11
|
any remainder is settled as §When a doubt emerges allows — skip the round and add
|
|
12
12
|
a one-line note in the analysis stating why it was skipped and naming the
|
|
13
13
|
sources. Do not run the round as a formality when the answers are already on
|
|
14
|
-
record.
|
|
14
|
+
record. The skip path never covers a Vision (next paragraph).
|
|
15
|
+
|
|
16
|
+
Vision path: when the unit writes or amends a Vision — any kind, the M-VISION
|
|
17
|
+
included — the owner interview in `vision.md` §The owner interview runs instead
|
|
18
|
+
of this round for the Vision's own content, and it has **no skip path**: one
|
|
19
|
+
sentence from the user plus a spike never makes a Vision's spec complete. The
|
|
20
|
+
round then covers only what the interview did not (the unit's own scope and
|
|
21
|
+
acceptance), deriving from the interview's answers. The interview is a planned
|
|
22
|
+
occasion like the round (§Ask before the write): its questions go in one numbered
|
|
23
|
+
set, and only an answer in the wrong form is asked again.
|
|
15
24
|
|
|
16
25
|
Unattended path: when the user is not reachable (a scheduled or autonomous run)
|
|
17
26
|
and a real doubt remains, do not stall and do not invent consensus. Write it as a
|
|
@@ -106,18 +106,31 @@ the first draft — the properties that make a rule survive a motivated reader a
|
|
|
106
106
|
cheap to apply while writing and expensive to retrofit. `vision.md` §6 is the
|
|
107
107
|
blind check that gates promotion to APPROVED.
|
|
108
108
|
|
|
109
|
+
**No section below is written before the owner interview** (`vision.md` §The owner
|
|
110
|
+
interview) and its approved north star. Until then — at bootstrap, or for an owner
|
|
111
|
+
not yet reached — the file is this stub, and nothing traces to it:
|
|
112
|
+
|
|
113
|
+
```markdown
|
|
114
|
+
# Project Vision
|
|
115
|
+
Status: DRAFT
|
|
116
|
+
<!-- STUB: awaiting the owner interview (vision.md §The owner interview). Not a
|
|
117
|
+
Vision: no artifact traces to it. What the agent observed is in strategic/. -->
|
|
118
|
+
```
|
|
119
|
+
|
|
109
120
|
Sections below marked **[gate]** are load-bearing for that ruling; the others are
|
|
110
121
|
orientation for humans. Keep the human ones — just know which is which.
|
|
111
122
|
|
|
112
123
|
```markdown
|
|
113
124
|
# Project Vision
|
|
114
125
|
Status: DRAFT
|
|
115
|
-
<!-- Status: DRAFT (
|
|
126
|
+
<!-- Status: DRAFT (written from the owner interview, NOT yet a gating authority)
|
|
116
127
|
or APPROVED (by <who>, <date>) — only after the user's explicit confirmation
|
|
117
128
|
AND the blind check in vision.md §6. -->
|
|
118
129
|
|
|
119
130
|
## North Star
|
|
120
|
-
<!-- [gate, partly]
|
|
131
|
+
<!-- [gate, partly] One or two sentences IN THE OWNER'S WORDS, explicitly approved
|
|
132
|
+
before any other section was written (Gate 1) — cite the approval:
|
|
133
|
+
(approved: REQUEST_[unit].md#R<n>). The BENEFIT to be obtained — what the actor gets, never the
|
|
121
134
|
mechanism, and never by comparison to another product (a comparative
|
|
122
135
|
definition rots silently when the comparison target moves). Concrete enough
|
|
123
136
|
that an obstacle to it is recognizable: that is what makes every Non-Goal
|
|
@@ -126,11 +139,15 @@ Status: DRAFT
|
|
|
126
139
|
scale levels. Routing the reader to another file breaks the cold-read
|
|
127
140
|
premise. -->
|
|
128
141
|
## Core Problem
|
|
129
|
-
<!--
|
|
130
|
-
|
|
142
|
+
<!-- Interview question 1: ONE concrete case that today does not get the expected
|
|
143
|
+
result, with its example — never a missing feature. Cite the answer
|
|
144
|
+
(REQUEST_[unit].md#R<n>). Human orientation: carries no gate weight unless
|
|
145
|
+
the admission test names it. -->
|
|
131
146
|
## Actors
|
|
132
147
|
<!-- [gate] the cast this product serves. One light line per actor:
|
|
133
148
|
**Role** — primary goal; good UX = what a good experience means to them.
|
|
149
|
+
Interview question 3: who receives the benefit, who acts, and who has the
|
|
150
|
+
INITIATIVE — an actor that acts unprompted is named here, or it goes missing.
|
|
134
151
|
The "good UX =" clauses are admissible work, not decoration — say so in the
|
|
135
152
|
admission test. Define each actor ONCE here; use-cases (Standalone) / D-UC
|
|
136
153
|
(Hybrid) reference them by role and never re-describe them (anti-DRY).
|
|
@@ -147,7 +164,14 @@ Status: DRAFT
|
|
|
147
164
|
with BOTH branches answered, plus an anti-laundering clause naming the
|
|
148
165
|
re-descriptions you expect. Omit the section if the product has none. -->
|
|
149
166
|
## Non-Goals
|
|
150
|
-
<!-- [gate — the REJECT side
|
|
167
|
+
<!-- [gate — the REJECT side, with the Invariants]
|
|
168
|
+
A Non-Goal bounds SCOPE: it rejects a proposal that pursues what it names; it
|
|
169
|
+
never bans a behaviour the product already has and never creates an
|
|
170
|
+
obligation (obligations come from the North Star and the Success Signals). A
|
|
171
|
+
behaviour that must never happen is an Invariant, with its provenance.
|
|
172
|
+
PROVENANCE on every rule, at the end of its bullet: (source: owner
|
|
173
|
+
REQUEST_[unit].md#R<n> | higher Vision: "quoted line" | inference confirmed
|
|
174
|
+
REQUEST_[unit].md#R<n>). An unconfirmed author inference is not a rule.
|
|
151
175
|
Derive every rule by the deletion test: remove it — if the benefit is still
|
|
152
176
|
reachable, the rule does not belong (it spends a degree of freedom on
|
|
153
177
|
nothing); if not, keep it and name the obstacle it removes. Constraints
|
|
@@ -167,7 +191,7 @@ Status: DRAFT
|
|
|
167
191
|
clause. State the default for anything unreached, per path. -->
|
|
168
192
|
## Success Signals
|
|
169
193
|
<!-- [gate] Each checkable against a NAMED artifact or command by someone who was
|
|
170
|
-
not here. Not "we are the best" — a file, a command, a battery, and what the
|
|
194
|
+
not here, with its STARTING VALUE (interview question 4). Not "we are the best" — a file, a command, a battery, and what the
|
|
171
195
|
result must be. -->
|
|
172
196
|
## Where the rest lives
|
|
173
197
|
<!-- Pointers, so an absence reads as intentional rather than as a gap. Competitive
|
|
@@ -200,16 +224,33 @@ Only for features spanning multiple ANALYSIS documents or multiple milestones: o
|
|
|
200
224
|
```markdown
|
|
201
225
|
# Feature Vision: [Name]
|
|
202
226
|
|
|
227
|
+
<!-- Written only after the owner interview (vision.md §The owner interview); the
|
|
228
|
+
same applies to a devPNT M-VISION. Each section cites the answer it comes
|
|
229
|
+
from: REQUEST_[feature].md#R<n>. -->
|
|
230
|
+
## North Star
|
|
231
|
+
<!-- One or two sentences in the owner's words, explicitly approved before any
|
|
232
|
+
other section (Gate 1): (approved: REQUEST_[feature].md#R<n>). -->
|
|
203
233
|
## Problem
|
|
234
|
+
<!-- One concrete case that today does not get the expected result, with its
|
|
235
|
+
example — not a missing feature. -->
|
|
204
236
|
## Expected Benefit
|
|
237
|
+
<!-- What who obtains once solved: a result, not a function. -->
|
|
205
238
|
## Actors
|
|
206
239
|
<!-- the cast this feature serves — usually a subset/refinement of the project
|
|
207
240
|
Actors, or a distinct feature-local cast for internal-tooling work. One light
|
|
208
241
|
line each: **Role** — primary goal; good UX = what good feels like.
|
|
242
|
+
Name who receives the benefit, who acts, and who has the initiative.
|
|
209
243
|
Referenced by the use-cases, not re-described in them. -->
|
|
210
244
|
## Success Signals
|
|
245
|
+
<!-- Observable, each with its starting value. -->
|
|
211
246
|
## Non-Goals / Out of Scope
|
|
247
|
+
<!-- Scope this feature does not pursue. Not a ban on existing behaviour, and no
|
|
248
|
+
obligation: those come from the Benefit and the Signals. -->
|
|
212
249
|
## Related Constraints and Principles
|
|
250
|
+
<!-- Each with its provenance: (source: owner REQUEST_[feature].md#R<n> | higher
|
|
251
|
+
Vision: "quoted line" | inference confirmed REQUEST_[feature].md#R<n>). A
|
|
252
|
+
constraint imported from a higher Vision is asked about, never assumed to
|
|
253
|
+
apply here. -->
|
|
213
254
|
```
|
|
214
255
|
|
|
215
256
|
## ai_docs/solutions/ANALYSIS_[feature_name].md
|
|
@@ -241,7 +282,9 @@ checks: [marketing.funnel] # optional — extra portable checks to run on t
|
|
|
241
282
|
or point to the project Vision's ## Actors — do not re-describe them here).
|
|
242
283
|
This is the single home of the feature vision: the separate file
|
|
243
284
|
VISION_[feature].md is created only if the feature spans multiple
|
|
244
|
-
ANALYSIS documents or multiple milestones.
|
|
285
|
+
ANALYSIS documents or multiple milestones. A benefit that no existing
|
|
286
|
+
Vision names makes this section a Vision: write it after the owner
|
|
287
|
+
interview (vision.md §The owner interview). -->
|
|
245
288
|
|
|
246
289
|
## Use Cases / User Needs
|
|
247
290
|
<!-- who needs this and why: the concrete use-cases / user-needs the change serves
|
|
@@ -1,245 +1,308 @@
|
|
|
1
|
-
# Writing a Vision that a cold reviewer can actually apply
|
|
2
|
-
|
|
3
|
-
Support file for `ai_docs/vision/project_vision.md`, `vision/features/VISION_*.md`
|
|
4
|
-
and (Hybrid) the devPNT M-VISION. Read it when writing or amending any of them.
|
|
5
|
-
The template lives in `templates.md`; this file is the *why it works*.
|
|
6
|
-
|
|
7
|
-
**The problem this solves.** A Vision's job is to be read cold — by a later
|
|
8
|
-
session, by a reviewer, by another agent — and to produce a ruling on a proposed
|
|
9
|
-
change. Most Visions cannot do that: they read as intent to whoever wrote them and
|
|
10
|
-
as ambiguity to everyone else, and the gap is invisible until something wrong gets
|
|
11
|
-
through. Writing one and then discovering the holes by adversarial rounds works,
|
|
12
|
-
but it costs several rewrites. The checklist below exists so a Vision is
|
|
13
|
-
verifiable on the **first** draft.
|
|
14
|
-
|
|
15
|
-
Everything here was derived empirically: six blind adversarial rounds against one
|
|
16
|
-
real Vision, reviewers with no repository access, ~25 attack proposals. Rules that
|
|
17
|
-
survived every attack and rules that fell were compared for structure. What
|
|
18
|
-
follows is that difference.
|
|
19
|
-
|
|
20
|
-
## What a Vision IS
|
|
21
|
-
|
|
22
|
-
A Vision states **what is to be obtained — the benefit — while leaving the most
|
|
23
|
-
degrees of freedom possible. It binds nothing that does not obstruct that
|
|
24
|
-
benefit.**
|
|
25
|
-
|
|
26
|
-
Four consequences, each operational:
|
|
27
|
-
|
|
28
|
-
- **State the benefit, not the mechanism.** What the actor *obtains*, never how —
|
|
29
|
-
and concrete enough that an obstacle to it is *recognizable*. This is the test a
|
|
30
|
-
North Star must pass: from "best-in-class" no constraint is derivable and none
|
|
31
|
-
is refutable, because nothing recognizably obstructs it. From "everything the
|
|
32
|
-
methodology produces stays usable in full without paying", a metering ban
|
|
33
|
-
follows and can be checked.
|
|
34
|
-
- **The deletion test — the generative rule for every constraint.** Remove the
|
|
35
|
-
rule: is the benefit still reachable? If **yes**, delete the rule — it was
|
|
36
|
-
spending a degree of freedom on nothing. If **no**, keep it, and its sentence
|
|
37
|
-
must name the obstacle it removes. This is also the stop rule: when nothing on
|
|
38
|
-
the table would obstruct the benefit, the Vision needs no new rule.
|
|
39
|
-
- **Constraints accumulate as the work reveals obstacles.** The first draft is the
|
|
40
|
-
benefit plus the few constraints already known — usually almost none, and that
|
|
41
|
-
is correct (`DRAFT` informs, `APPROVED` binds). Each constraint added later
|
|
42
|
-
*sharpens* the Vision without shrinking it more than the obstacle requires.
|
|
43
|
-
- **A constraint never obstructs the Vision.** A proposed rule that conflicts with
|
|
44
|
-
the benefit is not a constraint to negotiate in place — it is a Vision
|
|
45
|
-
**amendment**, and amending is the owner's decision, never a side effect of a
|
|
46
|
-
downstream edit.
|
|
47
|
-
|
|
48
|
-
Extracting the benefit from a discussion is real work: a discourse arrives with
|
|
49
|
-
solutions, preferences and constraints tangled together, and the Vision is the
|
|
50
|
-
distilled benefit only. The
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
1
|
+
# Writing a Vision that a cold reviewer can actually apply
|
|
2
|
+
|
|
3
|
+
Support file for `ai_docs/vision/project_vision.md`, `vision/features/VISION_*.md`
|
|
4
|
+
and (Hybrid) the devPNT M-VISION. Read it when writing or amending any of them.
|
|
5
|
+
The template lives in `templates.md`; this file is the *why it works*.
|
|
6
|
+
|
|
7
|
+
**The problem this solves.** A Vision's job is to be read cold — by a later
|
|
8
|
+
session, by a reviewer, by another agent — and to produce a ruling on a proposed
|
|
9
|
+
change. Most Visions cannot do that: they read as intent to whoever wrote them and
|
|
10
|
+
as ambiguity to everyone else, and the gap is invisible until something wrong gets
|
|
11
|
+
through. Writing one and then discovering the holes by adversarial rounds works,
|
|
12
|
+
but it costs several rewrites. The checklist below exists so a Vision is
|
|
13
|
+
verifiable on the **first** draft.
|
|
14
|
+
|
|
15
|
+
Everything here was derived empirically: six blind adversarial rounds against one
|
|
16
|
+
real Vision, reviewers with no repository access, ~25 attack proposals. Rules that
|
|
17
|
+
survived every attack and rules that fell were compared for structure. What
|
|
18
|
+
follows is that difference.
|
|
19
|
+
|
|
20
|
+
## What a Vision IS
|
|
21
|
+
|
|
22
|
+
A Vision states **what is to be obtained — the benefit — while leaving the most
|
|
23
|
+
degrees of freedom possible. It binds nothing that does not obstruct that
|
|
24
|
+
benefit.**
|
|
25
|
+
|
|
26
|
+
Four consequences, each operational:
|
|
27
|
+
|
|
28
|
+
- **State the benefit, not the mechanism.** What the actor *obtains*, never how —
|
|
29
|
+
and concrete enough that an obstacle to it is *recognizable*. This is the test a
|
|
30
|
+
North Star must pass: from "best-in-class" no constraint is derivable and none
|
|
31
|
+
is refutable, because nothing recognizably obstructs it. From "everything the
|
|
32
|
+
methodology produces stays usable in full without paying", a metering ban
|
|
33
|
+
follows and can be checked.
|
|
34
|
+
- **The deletion test — the generative rule for every constraint.** Remove the
|
|
35
|
+
rule: is the benefit still reachable? If **yes**, delete the rule — it was
|
|
36
|
+
spending a degree of freedom on nothing. If **no**, keep it, and its sentence
|
|
37
|
+
must name the obstacle it removes. This is also the stop rule: when nothing on
|
|
38
|
+
the table would obstruct the benefit, the Vision needs no new rule.
|
|
39
|
+
- **Constraints accumulate as the work reveals obstacles.** The first draft is the
|
|
40
|
+
benefit plus the few constraints already known — usually almost none, and that
|
|
41
|
+
is correct (`DRAFT` informs, `APPROVED` binds). Each constraint added later
|
|
42
|
+
*sharpens* the Vision without shrinking it more than the obstacle requires.
|
|
43
|
+
- **A constraint never obstructs the Vision.** A proposed rule that conflicts with
|
|
44
|
+
the benefit is not a constraint to negotiate in place — it is a Vision
|
|
45
|
+
**amendment**, and amending is the owner's decision, never a side effect of a
|
|
46
|
+
downstream edit.
|
|
47
|
+
|
|
48
|
+
Extracting the benefit from a discussion is real work: a discourse arrives with
|
|
49
|
+
solutions, preferences and constraints tangled together, and the Vision is the
|
|
50
|
+
distilled benefit only. The owner interview below asks for it — and a mechanism
|
|
51
|
+
("a dashboard") is not an acceptable answer to a benefit question ("never lose
|
|
52
|
+
the thread"); ask again until the answer names what the actor obtains.
|
|
53
|
+
|
|
54
|
+
The deletion test decides **which** rules exist. Everything below decides **how**
|
|
55
|
+
to write a rule so it holds once you know it must exist.
|
|
56
|
+
|
|
57
|
+
## The owner interview (before any Vision text)
|
|
58
|
+
|
|
59
|
+
A Vision is the **owner's** statement of what is to be obtained. Nothing in this
|
|
60
|
+
file after this section can detect a Vision the author wrote alone: the blind
|
|
61
|
+
check (§6) tests whether the rules survive a hostile reader, never whether they
|
|
62
|
+
are the owner's. So every Vision is born from an interview of the owner, and its
|
|
63
|
+
north star is approved **before** a line of it is drafted.
|
|
64
|
+
|
|
65
|
+
**Scope — every Vision, in every mode:** `project_vision.md`, a feature
|
|
66
|
+
`VISION_*.md`, a lens Vision (course, marketing), and the devPNT M-VISION in
|
|
67
|
+
Hybrid; also an ANALYSIS `## Feature Vision` that states a benefit no existing
|
|
68
|
+
Vision names (one that cites an approved Vision's benefit is alignment, not a
|
|
69
|
+
Vision). An amendment re-runs the questions whose answers it changes, and Gate 1
|
|
70
|
+
again when the north star changes. **There is no skip path**: one sentence from
|
|
71
|
+
the user plus a spike is not a complete spec — that exact shortcut produced a
|
|
72
|
+
Vision with an imported prohibition, no north star and a missing actor, and four
|
|
73
|
+
downstream artifacts built on it (field case, 2026-10). A reply already on record
|
|
74
|
+
in the owner's words is read back for confirmation, never re-asked as an open
|
|
75
|
+
question; an answer the author derived (from a spike, the code, another Vision)
|
|
76
|
+
is never an answer — it is a proposal the owner confirms or rejects.
|
|
77
|
+
|
|
78
|
+
**The questions, in this order.** Each is repeated until its answer has the form
|
|
79
|
+
stated; the wrong form is named so it can be recognized and asked again.
|
|
80
|
+
|
|
81
|
+
| # | Question | Right form | Wrong form — ask again |
|
|
82
|
+
|---|---|---|---|
|
|
83
|
+
| 1 | **Problem** — which concrete case today does not get the expected result? | one real case, with an example | a missing feature ("there is no drawing tool") |
|
|
84
|
+
| 2 | **Benefit** — once solved, who obtains what? | a result for a named actor | a function or mechanism ("a renderer") |
|
|
85
|
+
| 3 | **Actors** — who receives the benefit, who acts, who has the initiative? | all three named, initiative included | only the one who asks — the actor who acts unprompted goes missing |
|
|
86
|
+
| 4 | **Success** — what observable signal shows the benefit arrived? | a signal with its starting value | a feeling, or a signal with no baseline |
|
|
87
|
+
| 5 | **Boundaries** — what does this NOT pursue? | scope excluded from this work | a ban on behaviour ("X must never happen") — that is a constraint (6) or an obligation (2, 4) |
|
|
88
|
+
| 6 | **Known constraints** — each with its provenance: owner, a quoted line of a higher Vision, or author inference | every constraint sourced; every inference asked here | a constraint written in silently, or imported from a higher Vision without asking whether it applies here |
|
|
89
|
+
|
|
90
|
+
A **Non-Goal bounds scope**: it rejects a proposal that pursues what it names; it
|
|
91
|
+
is not a ban on behaviour that already exists, and it creates no obligation.
|
|
92
|
+
Obligations come from the Benefit and the Success Signals.
|
|
93
|
+
|
|
94
|
+
**Gate 1 — north star.** One or two sentences, in the owner's words, explicitly
|
|
95
|
+
approved by the owner. The author may compose a wording from the answers; the
|
|
96
|
+
approval is of that exact text, recorded verbatim in the request record
|
|
97
|
+
(`audit/requests/REQUEST_[unit].md`; a Vision written outside any unit, such as
|
|
98
|
+
the project Vision after bootstrap, records its interview in
|
|
99
|
+
`audit/requests/REQUEST_project_vision.md`). **Without it no Vision text is written** —
|
|
100
|
+
not a DRAFT, not a reconstruction: bootstrap writes a stub awaiting the
|
|
101
|
+
interview, and what the agent observed goes to `strategic/`.
|
|
102
|
+
Unattended, the unit is `BLOCKED on the user` (`elicitation.md` Unattended path).
|
|
103
|
+
|
|
104
|
+
**Gate 2 — the full Vision**, written from the answers. Every section traces to
|
|
105
|
+
an answer or a stated provenance (`REQUEST_[unit].md#R<n>`); every rule carries
|
|
106
|
+
its provenance; an author inference the owner did not confirm is not in it. The
|
|
107
|
+
blind check (§6) verifies that it holds; the approved north star verifies that it
|
|
108
|
+
is the owner's. Promotion to APPROVED still needs the owner's explicit
|
|
109
|
+
confirmation — Gate 2 is that confirmation, given on the written text.
|
|
110
|
+
|
|
111
|
+
## 0. The one-line test
|
|
112
|
+
|
|
113
|
+
> Could a reader who has never seen this project rule ACCEPT or REJECT on a
|
|
114
|
+
> proposed change, quoting one line of this document, without asking anyone
|
|
115
|
+
> anything?
|
|
116
|
+
|
|
117
|
+
If a section cannot contribute to that, it is background — keep it if it helps a
|
|
118
|
+
human, but know it carries no gate weight.
|
|
119
|
+
|
|
120
|
+
## 1. The nine properties of a rule that holds
|
|
121
|
+
|
|
122
|
+
Each is stated as a drafting action, with the attack it defeats.
|
|
123
|
+
|
|
124
|
+
1. **Key the rule to a property observable in the artifact — never to intent,
|
|
125
|
+
commitment, plan or purpose.** Test while drafting: *could I verify compliance
|
|
126
|
+
by reading the diff, without asking the author what they meant?*
|
|
127
|
+
→ Defeats: the proposer simply promises the opposite. A rule that forbids
|
|
128
|
+
"committing to track someone's format" is satisfied by saying "we commit to
|
|
129
|
+
nothing"; a rule that forbids "code in this repo that parses a format we do
|
|
130
|
+
not define" is not.
|
|
131
|
+
2. **Write it as one yes/no question with BOTH branches answered.**
|
|
132
|
+
→ Defeats: a gate that can only reject. A prohibition-only Vision rejects the
|
|
133
|
+
work it wants (new client support, packaging, bug fixes) and is abandoned.
|
|
134
|
+
3. **Phrase the question counterfactually about capability, not about the status
|
|
135
|
+
quo** — "could the user obtain this…", not "does the product currently do it".
|
|
136
|
+
→ Defeats: "we never shipped it, so nothing is being taken away."
|
|
137
|
+
4. **Enumerate the near-miss verbs, not just the headline one** — charge / count /
|
|
138
|
+
cap / condition / gate / degrade / delay / require-signup.
|
|
139
|
+
→ Defeats: the soft form. A generous cap, a free-but-registered tier, a
|
|
140
|
+
zero-cost counter — all are the same harm and none is the headline verb.
|
|
141
|
+
5. **Define every term the rule turns on by EFFECT, and close the list.** A
|
|
142
|
+
definition that enumerates mechanisms is a list of the ways you already thought
|
|
143
|
+
of; end it with "…and anything else the user must give, accept or obtain from
|
|
144
|
+
us."
|
|
145
|
+
→ Defeats: the third mechanism. "Charge = payment or account" is walked past by
|
|
146
|
+
"requires opting into telemetry".
|
|
147
|
+
6. **Enumerate the FORMS a violation can take, then state a closure rule** —
|
|
148
|
+
"anything not named here is out unless it is X".
|
|
149
|
+
→ Defeats: the unnamed variant. "A step, a required field, a check, or a cost
|
|
150
|
+
that varies but is never zero" kills "auto-filled, zero human input", because
|
|
151
|
+
the form is still a required field.
|
|
152
|
+
7. **State the subject predicate of any enumerated test in checkable terms.** If
|
|
153
|
+
the test applies to "a record of work", say what makes something one.
|
|
154
|
+
→ Defeats: denying the subject. The proposer agrees with every item on your
|
|
155
|
+
list and asserts the list does not apply.
|
|
156
|
+
8. **Give one IN and one OUT example on the same axis, differing in a single
|
|
157
|
+
variable.** The pair carries the discriminator; without it the reader invents
|
|
158
|
+
one.
|
|
159
|
+
→ Defeats: the borderline case, which is where every real argument happens.
|
|
160
|
+
9. **Name the re-descriptions you expect, inside the rule's own sentence** —
|
|
161
|
+
"in any presentation", "however the code got here", "not by a component that
|
|
162
|
+
does not exist yet", "storing it as Markdown changes nothing".
|
|
163
|
+
→ Defeats: relabeling. A board called a "view" is still a board.
|
|
164
|
+
|
|
165
|
+
## 2. The five clauses a Vision needs around its rules
|
|
166
|
+
|
|
167
|
+
Rules do not hold alone. These structural clauses were the difference between a
|
|
168
|
+
rule that survived and the same rule leaking.
|
|
169
|
+
|
|
170
|
+
- **Supremacy clause** — on any rule a second layer, product, tier or future
|
|
171
|
+
component could route around: *"these bind the product as a whole; shipping a
|
|
172
|
+
forbidden thing in the paid layer does not put it out of reach."*
|
|
173
|
+
- **Exceptions attached to the rule they limit, in the same bullet, phrased
|
|
174
|
+
affirmatively.** An exception in another section is a leak; an exception phrased
|
|
175
|
+
only as a negation produces CANNOT DECIDE. *"This rule does not reach X;
|
|
176
|
+
supporting one more X is squarely wanted."*
|
|
177
|
+
- **Anti-abuse clause on every exemption, naming the only permitted outcomes.**
|
|
178
|
+
A maintenance exemption without one lets any forbidden thing that already
|
|
179
|
+
shipped be maintained forever, and any new one be framed as a fix to it:
|
|
180
|
+
*"work framed as a fix to something that should never have shipped is not
|
|
181
|
+
exempt — it is the removal of that thing, or it is out."*
|
|
182
|
+
- **Stated defaults, per path including the exempt path** — "anything unreached is
|
|
183
|
+
out"; "an exempt fix that preserves a forbidden thing is out". A test that says
|
|
184
|
+
"admitted only if" gives new capability a default; exempt work has none unless
|
|
185
|
+
you write one.
|
|
186
|
+
- **Precedence, when two sentences can both apply.** Two adjacent statements
|
|
187
|
+
pointing opposite ways are decided by whichever the reader reaches first.
|
|
188
|
+
|
|
189
|
+
## 3. Only prohibitions can reject; only positives can admit
|
|
190
|
+
|
|
191
|
+
This is the most common structural failure and it is invisible from the inside.
|
|
192
|
+
|
|
193
|
+
- **A Goal cannot reject anything.** If the admission test says "advances a Goal
|
|
194
|
+
and violates no Non-Goal", then rejection power lives *only* in the Non-Goals
|
|
195
|
+
(and the Invariants, where the Vision has them).
|
|
196
|
+
- **A Non-Goal rejects scope, not behaviour.** It turns away a proposal that
|
|
197
|
+
pursues what it names; it never forbids a behaviour the product already has, and
|
|
198
|
+
it never creates an obligation — obligations come from the Benefit and the
|
|
199
|
+
Success Signals. A behaviour the product must never have is an Invariant, or a
|
|
200
|
+
constraint with its provenance (§The owner interview, question 6). Written as a
|
|
201
|
+
Non-Goal, it reads as a ban the owner never stated.
|
|
202
|
+
A Goal that says "scale cost to risk in both directions" cannot stop cost
|
|
203
|
+
inflation — you need a prohibition for that.
|
|
204
|
+
- **A prohibition scoped to one rung of your own scale protects only that rung.**
|
|
205
|
+
Banning ceremony on trivial edits invites the same ceremony one level up.
|
|
206
|
+
- **A criterion phrased as an already-true state cannot be advanced.** "The check
|
|
207
|
+
is CLEAN at every closure" is a state, so "advances this signal" is meaningless
|
|
208
|
+
and any proposal citing it is undecidable. Give every positive criterion a
|
|
209
|
+
**baseline with headroom**: a current value and date, or an explicit list of
|
|
210
|
+
improvement categories that count.
|
|
211
|
+
- **Give recurring legitimate work an explicit authorization clause**, or it will
|
|
212
|
+
be rejected by your own test: packaging and installation, the product's own
|
|
213
|
+
tests, reducing what the agent must read, supporting one more client. Each needs
|
|
214
|
+
a home in the positive sources — otherwise "moves nothing this document commits
|
|
215
|
+
to" fires on exactly the maintenance the product needs.
|
|
216
|
+
|
|
217
|
+
## 4. Minimum operable sections
|
|
218
|
+
|
|
219
|
+
A Vision is a gate. These are the load-bearing parts; anything else is
|
|
220
|
+
orientation for humans and should be recognized as such.
|
|
221
|
+
|
|
222
|
+
| Section | Must contain | Enables |
|
|
223
|
+
|---|---|---|
|
|
224
|
+
| Authority & scope | what it binds (all layers, tiers, future components), that packaging is irrelevant, precedence among its own sections, the approval line | both |
|
|
225
|
+
| Defaults | the default ruling for anything unreached, stated per path | both |
|
|
226
|
+
| Admission test | one sentence naming *exactly which* sections are positive sources and *exactly which* are prohibitions | ACCEPT |
|
|
227
|
+
| Positive sources | Goals / Actor commitments / Success Signals — each with a baseline and headroom, checkable against a named artifact | ACCEPT |
|
|
228
|
+
| Prohibitions | property-based, closed enumerations, named re-descriptions, in/out pairs | REJECT |
|
|
229
|
+
| Invariants | the decision question with both branches answered, plus an anti-laundering clause | both |
|
|
230
|
+
| Exemptions | each with its anti-abuse clause | prevents laundering |
|
|
231
|
+
| Definitions & imported facts | terms defined by effect; **any fact from another document a ruling depends on, restated here** with the reason | standalone use |
|
|
232
|
+
| Pointers | what deliberately lives elsewhere, so an absence reads as intentional | prevents false CANNOT DECIDE |
|
|
233
|
+
|
|
234
|
+
**Imported facts matter more than they look.** If a ruling needs your triage
|
|
235
|
+
levels, your risk tiers or your lifecycle states, restate the boundaries in the
|
|
236
|
+
Vision — routing the reader to another file breaks the cold-read premise the
|
|
237
|
+
whole gate rests on. Keep the procedure elsewhere; bring the boundaries here.
|
|
238
|
+
|
|
239
|
+
**Keep competitive positioning OUT.** A Vision defined by comparison to another
|
|
240
|
+
product rots silently: the comparison target moves and no one edits your document.
|
|
241
|
+
Put it in a dated snapshot elsewhere and point to it.
|
|
242
|
+
|
|
243
|
+
## 5. What no wording can fix — use a mechanism instead
|
|
244
|
+
|
|
245
|
+
Five failure classes are structural. Prose cannot close them; do not try.
|
|
246
|
+
|
|
247
|
+
| Failure | Mechanism |
|
|
248
|
+
|---|---|
|
|
249
|
+
| "Advances a Goal" is a claim about the world, not the text | Measure it: run the ruling battery before and after, admit on measured improvement |
|
|
250
|
+
| **Cumulative ratchet** — each addition defensible, the sum is the ceremony the Vision forbids | A measured budget: steps per level, tokens the agent loads, artifacts per change; add-one-remove-one |
|
|
251
|
+
| Facts the proposal never states ("a quota of *what*?") | A proposal template that demands them, and a stated rule that omission resolves against the proposal |
|
|
252
|
+
| Structural compliance without truth — every rule satisfied, the artifact still wrong | Independent review; a Vision cannot detect this |
|
|
253
|
+
| An accepted change silently falsifying the Vision | Require the amendment in the same change; check cross-document facts mechanically |
|
|
254
|
+
|
|
255
|
+
And the sixth, which is why this file exists:
|
|
256
|
+
|
|
257
|
+
**Adversarial re-description is unbounded.** Every patch names the evasions seen so
|
|
258
|
+
far; a new one always exists. Patch-after-defeat is a treadmill. The only thing
|
|
259
|
+
that converts it into a ratchet is a **standing battery**: keep every attack
|
|
260
|
+
proposal that ever worked as a fixture and re-run the whole set against every
|
|
261
|
+
Vision edit. A Vision without a battery decays the moment someone motivated reads
|
|
262
|
+
it.
|
|
263
|
+
|
|
264
|
+
## 6. The blind check (procedure)
|
|
265
|
+
|
|
266
|
+
Run this **before promoting any Vision to APPROVED, and before any amendment of an
|
|
267
|
+
approved one**. It runs on a Vision that already passed Gate 1 (§The owner
|
|
268
|
+
interview): it tests whether the rules hold against a hostile reader, and it
|
|
269
|
+
cannot see whether they are the owner's — a Vision the author wrote alone passes
|
|
270
|
+
it cleanly. Not for DRAFT edits — promotion is when authority is granted, and
|
|
271
|
+
it is rare, so the cost lands where it buys most.
|
|
272
|
+
|
|
273
|
+
1. **Give the reviewer the document text and nothing else.** Not a path — the
|
|
274
|
+
text, pasted. Forbid opening files, searching, and web access explicitly. A
|
|
275
|
+
term the reviewer cannot resolve is then a property of the document, not of
|
|
276
|
+
their tooling.
|
|
277
|
+
2. **Fresh context, and a different model from the author where the client allows
|
|
278
|
+
it.** Author self-review is structurally blind to its own omissions.
|
|
279
|
+
3. **Hand them a battery, not an open question.** Concrete proposals to rule on:
|
|
280
|
+
- the standing fixtures (every attack that ever worked — see §5);
|
|
281
|
+
- **reject-side** proposals aimed at each prohibition;
|
|
282
|
+
- **accept-side** proposals the document plainly wants (a bug fix, packaging
|
|
283
|
+
work, supporting one more client, a documentation improvement). *A gate that
|
|
284
|
+
can only reject is half a gate, and the accept side is where most Visions
|
|
285
|
+
fail without anyone noticing.*
|
|
286
|
+
4. **Ask for the mechanism, not just the verdict.** For each ruling: the exact
|
|
287
|
+
quoted line, or precisely what the document fails to say. Then: *which rules
|
|
288
|
+
could you not get around, and what structural property defeated you?* That
|
|
289
|
+
answer is worth more than the findings.
|
|
290
|
+
5. **Ask for rewords.** "Slip a bad proposal past this document, including one
|
|
291
|
+
dressed in its own approving vocabulary." A rule nobody can reword is done; a
|
|
292
|
+
rule that falls to the first attempt was never a rule.
|
|
293
|
+
6. **Every finding is answered — fixed, or refused with reasoning** (`review.md`
|
|
294
|
+
§Receiving). Add every successful reword to the standing battery, whether or
|
|
295
|
+
not you fix it this round.
|
|
296
|
+
|
|
297
|
+
Three lenses are worth running for a product-level Vision: **comprehension** (what
|
|
298
|
+
is this, what could you not resolve), **gate operability** (the battery above),
|
|
299
|
+
**durability** (what rots, what is unfalsifiable, what is a time bomb). For a
|
|
300
|
+
feature-level Vision or an M-VISION, the gate lens alone is usually enough.
|
|
301
|
+
|
|
302
|
+
## 7. Cost, honestly
|
|
303
|
+
|
|
304
|
+
A first draft written against §1–§4 will still have findings — the checklist
|
|
305
|
+
removes the structural classes, not judgement errors. Expect one blind round to
|
|
306
|
+
find real things and a second to confirm. What it should NOT take is five rounds
|
|
307
|
+
of discovering the same class of defect in a new disguise; that is the specific
|
|
308
|
+
waste this file exists to prevent.
|