@antoneeo/kb-agentic-skill 1.11.1 → 1.13.0
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 +30 -0
- package/gemini-extension.json +6 -6
- package/package.json +51 -51
- package/skills/kb-agentic-skill/SKILL.md +274 -274
- package/skills/kb-agentic-skill/review.md +53 -0
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,36 @@
|
|
|
2
2
|
|
|
3
3
|
Every significant change to this skill is recorded here.
|
|
4
4
|
|
|
5
|
+
## [1.13.0] - 2026-09-05
|
|
6
|
+
|
|
7
|
+
Spine-only release: `review.md` updated byte-identical across the family
|
|
8
|
+
(authored in the code lens, code 1.31.0).
|
|
9
|
+
|
|
10
|
+
### Changed
|
|
11
|
+
- **The form budget belongs to the FIRST draft (shared spine `review.md`).**
|
|
12
|
+
The lean operative form is the first draft's form, not the round-3 rescue:
|
|
13
|
+
the review request states the artifact's line count against a budget the
|
|
14
|
+
author fixed before drafting, and an artifact over budget is the reviewer's
|
|
15
|
+
first finding, before content. This replaces "rewrite lean at the latest
|
|
16
|
+
before round 3", which paid for the form only after two rounds had already
|
|
17
|
+
been spent reading a bloated artifact. The ~1,250 -> ~500 line measurement
|
|
18
|
+
already in the file is the budget's anchor.
|
|
19
|
+
|
|
20
|
+
## [1.12.0] - 2026-09-01
|
|
21
|
+
|
|
22
|
+
Spine-only release: `review.md` updated byte-identical across the family
|
|
23
|
+
(authored in the code lens, F-045 / code 1.30.0).
|
|
24
|
+
|
|
25
|
+
### Added
|
|
26
|
+
- **Review-loop convergence (shared spine `review.md`).** *Revise means
|
|
27
|
+
converge, not accrete*: lean rewrite at the latest before round 3, revision
|
|
28
|
+
archaeology lives in REVIEW_LOG, never in the artifact. *Severity contract*
|
|
29
|
+
stated with every review request: blocker = unfit-to-proceed evidence only,
|
|
30
|
+
wishes are WARN at most. *Scripted author pre-audit*: resolve every anchor
|
|
31
|
+
and recount every count before requesting. The new *behavioural-claim-probes*
|
|
32
|
+
reviewer clause is lens-gated and self-disarmed in this lens (this SKILL.md
|
|
33
|
+
defines no Execute-Before-Specify duty).
|
|
34
|
+
|
|
5
35
|
## [1.11.1] - 2026-08-28
|
|
6
36
|
|
|
7
37
|
### Fixed
|
package/gemini-extension.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "kb-agentic-skill",
|
|
3
|
-
"version": "1.
|
|
4
|
-
"description": "Knowledge-Base & Document-First protocol with risk triage, Vision governance, signal distillation and optional devPNT integration.",
|
|
5
|
-
"author": "Antonio Pinto (https://github.com/Antoneeo)"
|
|
6
|
-
}
|
|
1
|
+
{
|
|
2
|
+
"name": "kb-agentic-skill",
|
|
3
|
+
"version": "1.13.0",
|
|
4
|
+
"description": "Knowledge-Base & Document-First protocol with risk triage, Vision governance, signal distillation and optional devPNT integration.",
|
|
5
|
+
"author": "Antonio Pinto (https://github.com/Antoneeo)"
|
|
6
|
+
}
|
package/package.json
CHANGED
|
@@ -1,51 +1,51 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "@antoneeo/kb-agentic-skill",
|
|
3
|
-
"version": "1.
|
|
4
|
-
"description": "Knowledge-Base & Document-First protocol for Claude Code, Gemini CLI, Google Antigravity and Codex with risk triage, Vision governance, signal distillation and optional devPNT integration.",
|
|
5
|
-
"keywords": [
|
|
6
|
-
"claude-code",
|
|
7
|
-
"claude-skill",
|
|
8
|
-
"gemini-cli",
|
|
9
|
-
"skill",
|
|
10
|
-
"knowledge-base",
|
|
11
|
-
"documentation",
|
|
12
|
-
"ai-agent"
|
|
13
|
-
],
|
|
14
|
-
"author": "Antonio Pinto (https://github.com/Antoneeo)",
|
|
15
|
-
"license": "MIT",
|
|
16
|
-
"publishConfig": {
|
|
17
|
-
"access": "public"
|
|
18
|
-
},
|
|
19
|
-
"bin": {
|
|
20
|
-
"kb-agentic-init": "scripts/init.js",
|
|
21
|
-
"kb-agentic-install-skill": "scripts/postinstall.js"
|
|
22
|
-
},
|
|
23
|
-
"scripts": {
|
|
24
|
-
"postinstall": "node scripts/postinstall.js",
|
|
25
|
-
"preuninstall": "node scripts/preuninstall.js"
|
|
26
|
-
},
|
|
27
|
-
"files": [
|
|
28
|
-
"skills/kb-agentic-skill/SKILL.md",
|
|
29
|
-
"skills/kb-agentic-skill/templates.md",
|
|
30
|
-
"skills/kb-agentic-skill/taxonomy.md",
|
|
31
|
-
"skills/kb-agentic-skill/guides.md",
|
|
32
|
-
"skills/kb-agentic-skill/vision.md",
|
|
33
|
-
"skills/kb-agentic-skill/distillation.md",
|
|
34
|
-
"skills/kb-agentic-skill/reconciliation.md",
|
|
35
|
-
"skills/kb-agentic-skill/elicitation.md",
|
|
36
|
-
"skills/kb-agentic-skill/review.md",
|
|
37
|
-
"skills/kb-agentic-skill/dispatch.md",
|
|
38
|
-
"skills/kb-agentic-skill/routing.md",
|
|
39
|
-
"skills/kb-agentic-skill/portability.md",
|
|
40
|
-
"skills/kb-agentic-skill/ENFORCEMENT.md",
|
|
41
|
-
"skills/kb-agentic-skill/scripts/sdlc_check.py",
|
|
42
|
-
"skills/kb-agentic-skill/scripts/sdlc_core.py",
|
|
43
|
-
"gemini-extension.json",
|
|
44
|
-
"README.md",
|
|
45
|
-
"CHANGELOG.md",
|
|
46
|
-
"scripts/lib.js",
|
|
47
|
-
"scripts/init.js",
|
|
48
|
-
"scripts/postinstall.js",
|
|
49
|
-
"scripts/preuninstall.js"
|
|
50
|
-
]
|
|
51
|
-
}
|
|
1
|
+
{
|
|
2
|
+
"name": "@antoneeo/kb-agentic-skill",
|
|
3
|
+
"version": "1.13.0",
|
|
4
|
+
"description": "Knowledge-Base & Document-First protocol for Claude Code, Gemini CLI, Google Antigravity and Codex with risk triage, Vision governance, signal distillation and optional devPNT integration.",
|
|
5
|
+
"keywords": [
|
|
6
|
+
"claude-code",
|
|
7
|
+
"claude-skill",
|
|
8
|
+
"gemini-cli",
|
|
9
|
+
"skill",
|
|
10
|
+
"knowledge-base",
|
|
11
|
+
"documentation",
|
|
12
|
+
"ai-agent"
|
|
13
|
+
],
|
|
14
|
+
"author": "Antonio Pinto (https://github.com/Antoneeo)",
|
|
15
|
+
"license": "MIT",
|
|
16
|
+
"publishConfig": {
|
|
17
|
+
"access": "public"
|
|
18
|
+
},
|
|
19
|
+
"bin": {
|
|
20
|
+
"kb-agentic-init": "scripts/init.js",
|
|
21
|
+
"kb-agentic-install-skill": "scripts/postinstall.js"
|
|
22
|
+
},
|
|
23
|
+
"scripts": {
|
|
24
|
+
"postinstall": "node scripts/postinstall.js",
|
|
25
|
+
"preuninstall": "node scripts/preuninstall.js"
|
|
26
|
+
},
|
|
27
|
+
"files": [
|
|
28
|
+
"skills/kb-agentic-skill/SKILL.md",
|
|
29
|
+
"skills/kb-agentic-skill/templates.md",
|
|
30
|
+
"skills/kb-agentic-skill/taxonomy.md",
|
|
31
|
+
"skills/kb-agentic-skill/guides.md",
|
|
32
|
+
"skills/kb-agentic-skill/vision.md",
|
|
33
|
+
"skills/kb-agentic-skill/distillation.md",
|
|
34
|
+
"skills/kb-agentic-skill/reconciliation.md",
|
|
35
|
+
"skills/kb-agentic-skill/elicitation.md",
|
|
36
|
+
"skills/kb-agentic-skill/review.md",
|
|
37
|
+
"skills/kb-agentic-skill/dispatch.md",
|
|
38
|
+
"skills/kb-agentic-skill/routing.md",
|
|
39
|
+
"skills/kb-agentic-skill/portability.md",
|
|
40
|
+
"skills/kb-agentic-skill/ENFORCEMENT.md",
|
|
41
|
+
"skills/kb-agentic-skill/scripts/sdlc_check.py",
|
|
42
|
+
"skills/kb-agentic-skill/scripts/sdlc_core.py",
|
|
43
|
+
"gemini-extension.json",
|
|
44
|
+
"README.md",
|
|
45
|
+
"CHANGELOG.md",
|
|
46
|
+
"scripts/lib.js",
|
|
47
|
+
"scripts/init.js",
|
|
48
|
+
"scripts/postinstall.js",
|
|
49
|
+
"scripts/preuninstall.js"
|
|
50
|
+
]
|
|
51
|
+
}
|
|
@@ -1,274 +1,274 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: kb-agentic
|
|
3
|
-
version: 1.
|
|
4
|
-
description: Knowledge-Base & Document-First protocol with risk-proportional triage, Vision as a guide, Signal Distillation, a complete Standalone mode and optional symbiosis with devPNT. Use for user documentation, knowledge extraction, SOPs, research notes, decision logs, knowledge management — and for answering project questions from the claim ledger and topic graph.
|
|
5
|
-
author: Antonio Pinto (https://github.com/Antoneeo)
|
|
6
|
-
copyright: (c) 2026 Antonio Pinto
|
|
7
|
-
---
|
|
8
|
-
|
|
9
|
-
# KB Agentic
|
|
10
|
-
|
|
11
|
-
**Why this skill exists:** to prevent *knowledge degradation and myopia* — acting from partial understanding, where new information contradicts un-indexed notes and hard-won knowledge evaporates between sessions. Triage, the Vision Gate, signal distillation, the documentation lifecycle, and operative guide routers are all one defense against that.
|
|
12
|
-
|
|
13
|
-
This skill guides knowledge management and documentation with a Document-First process proportional to risk. It works fully even without devPNT. When devPNT is available and configured for the current project, the skill works in symbiosis with its governance: M-VISION, Master Plan, Action Plan and versioned artifacts become the authoritative frame for milestones and knowledge nodes.
|
|
14
|
-
|
|
15
|
-
Support files in the skill directory:
|
|
16
|
-
- `templates.md`: templates for Vision, Knowledge ANALYSIS, Research SPIKE, SOP GUIDE, audit plan, and handoff.
|
|
17
|
-
- `portability.md`: carrying knowledge between projects — what a bundle is, why export is a closure rather than a selection, and the rule that knowledge crosses a project boundary while authority does not (`prov: IMPORTED`). Read before `export`/`import`.
|
|
18
|
-
- `taxonomy.md`: placing a claim in the topic graph — descent over the generated index, the five verdicts (EXISTS / INADEQUATE / MISSING / GENERALIZES / UNPLACED), the sibling rule, guarded re-parenting, canonicalization — and the answer-mode descent (`§6`). Run at L3 before drafting.
|
|
19
|
-
- `guides.md`: pipeline for distilling user-provided indications into `ai_docs/reference/GUIDE_[topic].md`.
|
|
20
|
-
- `vision.md`: how to write a Vision a cold reviewer can actually apply — the properties that make a rule hold, the minimum operable sections, and the blind check.
|
|
21
|
-
- `distillation.md`: from a source to claim rows — intake (content-addressed originals, stored canonical extraction, every provenance a real file), the claim table, extraction discipline, signal rules (symbiosis with `distill`).
|
|
22
|
-
- `reconciliation.md`: what happens when two claims meet — five outcomes, detect-and-hold (the machine never decides), rulings with mandatory `basis:`, the claim state machine, the batched escalation form.
|
|
23
|
-
- `review.md`: the review discipline — when a review is due, how to request one, how to receive findings, how to review.
|
|
24
|
-
- `dispatch.md`: opt-in subagent execution of an approved plan.
|
|
25
|
-
- `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.
|
|
26
|
-
- `scripts/sdlc_check.py` + `scripts/sdlc_core.py`: the mechanical validator for the docs root (`check`, `validate`, `index`, `mark`, `gate`, `plan`, `orient`, `migrate`, and the knowledge overlay: `graph`, `corpus`, `claim-id`, `anchor`, `export`, `import`, `stale` (spine staleness plus `## claims` -- the time cycle's consolidated view), plus `remind` — the opt-in per-turn one-line reminder, ENFORCEMENT §4). Two files: the core is the family's shared spine; the entry point IS the knowledge overlay — the claim ledger and topic-graph checks live inside it, so the core alone runs none of them. Copy both, or neither.
|
|
27
|
-
- `ENFORCEMENT.md`: optional setup for CI and hooks.
|
|
28
|
-
|
|
29
|
-
Read these files only when needed. `SKILL.md` is the operating contract; the support files are progressive resources.
|
|
30
|
-
|
|
31
|
-
## Knowledge Values
|
|
32
|
-
|
|
33
|
-
- **Understand before writing/updating:** do not modify or create knowledge documents without checking root cause, user constraints, and existing notes — trust the primary sources and existing guides, not memory.
|
|
34
|
-
- **Apply DRY and Single Source of Truth:** do not duplicate knowledge across files; extend existing notes (`ANALYSIS_[topic].md` or `GUIDE_[topic].md`).
|
|
35
|
-
- **Signal & Distillation:** eliminate fluff, filler, and speculative statements; keep deterministic facts, constraints, decisions, and clear SOP steps (symbiosis with `distill`).
|
|
36
|
-
- **Lifecycle & Freshness:** mark superseded knowledge (`status: SUPERSEDED` or `DEPRECATED`) so outdated information does not cause hallucination.
|
|
37
|
-
- **Protect the Vision & User Style:** align all knowledge work with user strategic goals, operational preferences, and expected outcomes.
|
|
38
|
-
- **Map-First Navigation:** rely on `ai_docs/README.md`, `INDEX.md`, and `reference/INDEX.md` router for targeted retrieval before creating new documents — and before *answering from model memory* on the project's domain (`## Topic Recall`).
|
|
39
|
-
|
|
40
|
-
## Rule Zero: Triage
|
|
41
|
-
|
|
42
|
-
Always classify the request before choosing the process. Declare the chosen level to the user when you start operational work.
|
|
43
|
-
|
|
44
|
-
**Declare the level WITH the router verdict** (one line, for L2, L3 and Spike — L1 declares the level alone): the result of the guide-router lookup described under `## Operative Guides`, i.e. `Level: L2 · router: no match` or `Level: L3 · router: GUIDE_release_sop.md → read`. Name the guide you matched, or `no match`.
|
|
45
|
-
|
|
46
|
-
| Level | Criteria | Required process |
|
|
47
|
-
|---|---|---|
|
|
48
|
-
| **L1 - Quick Fact / Snippet** | One claim row added to an existing topic; a typo; a preference update. No node created, no source entering the corpus, no frontmatter change. | Implement edit directly in existing note. No new documents. |
|
|
49
|
-
| **L2 - Propagation of settled knowledge** | The fact is **already settled** in the corpus and the work carries it into existing documents — restating, correcting a stale copy, updating an SOP that quotes it. No node created or superseded, no hierarchy change, no node frontmatter change, no new source ingested. | Mini-analysis in message: objective, impact, sources, validation. Update existing document (full re-read per `## Revision`) or create single SOP/note. |
|
|
50
|
-
| **L3 - New knowledge unit / Corpus** | A source enters the corpus; a topic node is created or superseded; the hierarchy moves; a conflict must be reconciled; or what a claim asserts changes. | Full workflow: Vision Gate, Spec Elicitation, Taxonomy Pass, Knowledge Analysis, Distillation, Review, Indexing. |
|
|
51
|
-
| **Spike - Exploration** | Time-boxed exploratory research or draft without merging into official KB. | Outcome in `ai_docs/solutions/SPIKE_[topic].md`. |
|
|
52
|
-
|
|
53
|
-
Cross-cutting rules:
|
|
54
|
-
- **The unit of measure here is knowledge, never file count.** In this domain risk is
|
|
55
|
-
knowledge-shaped: carrying one settled fact into eight documents is small, and one
|
|
56
|
-
claim that re-parents a node is not. Do not import the code lens's file thresholds —
|
|
57
|
-
a level is chosen by what the change does to the corpus and the graph. What keeps
|
|
58
|
-
this from becoming an escape hatch is the trigger list below, which overrides the
|
|
59
|
-
level whatever the size, plus one limit: **propagation that changes what a claim
|
|
60
|
-
asserts is not propagation** — it is a new knowledge unit, so L3.
|
|
61
|
-
- **Domain routing (multi-lens installs only).** After the level is set, and only when a sibling lens skill of this family is installed (`agentic-sdlc`, `mkt-agentic-sdlc`), run the router in `routing.md` for every L2, L3 and Spike: it decides which lens's method and validation rules govern this unit of work. L1 never reaches it, and a single-lens install never reads the file — detection fails open. In such a project, never refer to a document whose meaning differs by lens ("threat model", "vision", `principles.md`, `handoff.md`) by its bare name: qualify it with its domain, or name its path.
|
|
62
|
-
- Personal data, credentials, security-sensitive processes, authN/authZ specs are high-risk: never L1.
|
|
63
|
-
- **Escalation triggers — ANY of these makes it L3, whatever the file count:** the change touches the topic hierarchy (`parents:`, a `GENERALIZES` verdict, a re-parent); it touches more than one node's frontmatter; it creates or supersedes a node other nodes reference. Re-shaping the graph is a unit of change, never a side effect of placing one claim.
|
|
64
|
-
- Adding one claim row to an existing topic is L1: the `id` may be left empty (the validator fills it — `claim-id --fill`), and no check errors on a hand-written row.
|
|
65
|
-
- If a bigger impact emerges during L1/L2 work, stop, reclassify and declare it.
|
|
66
|
-
- When in doubt, pick the higher level.
|
|
67
|
-
- **No useless questions.** Every question to the practitioner passes the legality test of the question discipline (`elicitation.md`): searched first with the search named, and the blocked decision named. Claim-conflict escalations additionally carry their own mandated form and are batched at run end (`reconciliation.md` §4).
|
|
68
|
-
|
|
69
|
-
## Write Triggers
|
|
70
|
-
|
|
71
|
-
Triage decides IF documentation is due; this table decides WHICH document each event produces, and when. **One event, one destination:** when the trigger fires and the document does not exist, create it; when it exists, update it — never duplicate it.
|
|
72
|
-
|
|
73
|
-
| Document | Write trigger | Phase |
|
|
74
|
-
|---|---|---|
|
|
75
|
-
| `solutions/ANALYSIS_[topic].md` | Every L3, after elicitation and before any drafting. On topic match with an existing analysis, update that one instead of a new file. | 3 |
|
|
76
|
-
| `solutions/SPIKE_[topic].md` | Closing any Spike — including a negative outcome. | — |
|
|
77
|
-
| `vision/features/VISION_[feature].md` | Multi-milestone topic at analysis time, or retroactive trigger (second ANALYSIS on same theme). | 3 |
|
|
78
|
-
| `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. Inventory for lookup, never a work board. | 5 / session end |
|
|
79
|
-
| `audit/HANDOFF_[topic].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. Carries the resume logistics too; the ANALYSIS Diary keeps the durable narrative (DRY). DELETED at closure — deleting it *is* removing the row. | 4 / 5 / session end |
|
|
80
|
-
| `audit/project_notes.md` | A note true for the whole project rather than one workstream. Appended verbatim to the generated registry, so regenerating cannot destroy notes that belong to no workstream. | 5 / session end |
|
|
81
|
-
| `audit/handoff.md` — converting an existing project | **Lazily, at the first write — and then ALL AT ONCE.** Converting one row at a time is the state that loses the others, so `index` refuses to write while anything in the file is unaccounted for and names it. Until the first source exists nothing generates and nothing errors. | 5 / session end |
|
|
82
|
-
| `audit/audit_plan.md` (Standalone) | Bootstrap, and whenever a mapped area changes state (`sdlc_check.py mark`). | 1 |
|
|
83
|
-
| `reference/GUIDE_[topic].md` (`source_kind: document`) | Origin+purpose test (`guides.md`), or a proactive proposal accepted by user. | 4 / 5 |
|
|
84
|
-
| `reference/GUIDE_[topic].md` (`source_kind: code`/`domain`) | Recognized high-complexity domain/concept with no CURRENT guide $\rightarrow$ duty to write autonomously. | 4 / 5 |
|
|
85
|
-
| `audit/reviews/REVIEW_LOG.md` | Every completed review — recorded in log. | 3 / 5 |
|
|
86
|
-
| ADR / Decision Log — `architecture/` or devPNT DB | A strategic decision was taken (pattern, policy, structural change): record before DONE. | 5 |
|
|
87
|
-
| `strategic/architecture.md`, `strategic/existing_features.md` | Bootstrap; update at closure when the knowledge catalog actually changed. | 1 / 5 |
|
|
88
|
-
| `vision/project_vision.md`, `roadmap.md`, `principles.md` | Bootstrap as `Status: DRAFT`; promoted to APPROVED only by explicit user confirmation. | 1 / 2 |
|
|
89
|
-
| `topics/<slug>.md` | A placement verdict creates it (MISSING/INADEQUATE-child, `taxonomy.md`); reconciliation updates its claim rows. One node per topic — a similar-but-distinct concept is a sibling with `related:` + a written distinction, never a merge and never a duplicate. Merged/renamed nodes become tombstones (`status: SUPERSEDED` + `redirect_to:`), never deleted. | 4 |
|
|
90
|
-
| a KB bundle (`export`) | Knowledge must leave this project. Export is L1 — it writes nothing into the corpus. **Importing one is L3**: a source enters the corpus and nodes are created, and a bundle is external input, so never L1 whatever its size (`portability.md`). | — |
|
|
91
|
-
| `corpus/given/*` + sidecar | A source arrives: it becomes a content-addressed artifact with a sidecar carrying digest/date/`supersedes:`. A text source is copied verbatim. A non-text source yields its stored canonical extraction — copied **beside** the original when that is small enough to keep, or **instead of it** on a large binary corpus, where the original stays where it lives and is recorded as `original_path:`/`original_sha256:` (`distillation.md` §1, which owns this rule). Never edited after ingest — the digest check on whatever `given/` holds is what enforces it. | 4 |
|
|
92
|
-
| `corpus/notes/*` | Something is said (`origin: elicited`), synthesised (`derived_from:`), or ruled (`basis:`). A note with none of the three is refused by the validator. | 4 / 5 |
|
|
93
|
-
| the day's decisions, at a user-signed closing (the Capture Moment sweep) | Verification that the phase-4 notes/claims exist; NEW `corpus/notes/*` + claim rows only for what the sweep surfaces un-captured. The event is the CLOSING, disjoint from the row above (which fires when something is SAID). | 5 / session end |
|
|
94
|
-
| `solutions/PLAN_[topic].md` + its ledger | A source too long for one context is ingested: **one task per reading window** (30 pages by default; the plan states the window used), each ending at a declared `extracted_through:`. That ledger is the register the ingestion resumes from across sessions — ingestion never builds a second one (`distillation.md` §3, `templates.md`). | 4 |
|
|
95
|
-
| `corpus/given/*.meta.md` — `extracted_through:` | Every reading window closes by advancing it (`p=<n>`, `L<n>`, `complete`). Required once any claim cites the artifact: unstated, "I am finished" cannot be falsified, which is how a sampled 200-page manual passes for an ingested one. | 4 |
|
|
96
|
-
| `INDEX.md`, `reference/INDEX.md`, `topics/INDEX.md`, `corpus/INDEX.md` | Regenerated by `sdlc_check.py index` at closure — never by hand; `validate` fails on a hand-edited one. | 5 |
|
|
97
|
-
|
|
98
|
-
## Operating Modes
|
|
99
|
-
|
|
100
|
-
### Full Standalone
|
|
101
|
-
Use this mode when devPNT is unavailable, not configured for the current project, or the user explicitly asks for a filesystem-only workflow.
|
|
102
|
-
- Source of truth: `ai_docs/` (`vision/`, `solutions/`, `reference/`, `audit/`, `strategic/`).
|
|
103
|
-
|
|
104
|
-
### Hybrid in symbiosis with devPNT
|
|
105
|
-
Use this mode when `devpnt_*` tools are available and point at the current project.
|
|
106
|
-
- devPNT governs `M-VISION`, Master Plan, Action Plan, and versioned artifacts.
|
|
107
|
-
- Local `ai_docs/` serves as readable context, Standalone fallback, local handoff, or shadow copy.
|
|
108
|
-
|
|
109
|
-
## L3 Workflow
|
|
110
|
-
|
|
111
|
-
### 1. Audit and Alignment
|
|
112
|
-
- Read `ai_docs/audit/handoff.md` (workstream registry) to see active topics.
|
|
113
|
-
- Read `ai_docs/README.md`, `ai_docs/INDEX.md` and `ai_docs/reference/INDEX.md` (the guide router) before exploring notes. 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.
|
|
114
|
-
- If `ai_docs/` is missing, create the bootstrap set: `README.md`, `vision/` docs, `strategic/` docs, and `audit/audit_plan.md`, then run `sdlc_check.py index`.
|
|
115
|
-
|
|
116
|
-
### 2. Vision Gate
|
|
117
|
-
- Read `project_vision.md`, `roadmap.md`, `principles.md` (or devPNT `M-VISION`).
|
|
118
|
-
- Verify request aligns with expected benefits, user goals, and success signals.
|
|
119
|
-
|
|
120
|
-
### 3. Request Analysis & Taxonomy Pass
|
|
121
|
-
- Run spec elicitation round (`elicitation.md`) before drafting analysis.
|
|
122
|
-
- Run taxonomy pass (`taxonomy.md`): verify whether topics, categories, or SOPs already exist in `ai_docs/`. Avoid duplication.
|
|
123
|
-
- Create or update `ai_docs/solutions/ANALYSIS_[topic].md`.
|
|
124
|
-
- **Design review gate (end of Phase 3, before any drafting):** the analysis is reviewed by somebody other than its author — a subagent with fresh context, or a declared self-pass when no higher rung is usable — a permission-gated rung is asked about, never silently skipped (`review.md`). Follow `review.md`; log the outcome in `audit/reviews/REVIEW_LOG.md`. A knowledge structure reviewed only by the person who chose it is not reviewed.
|
|
125
|
-
|
|
126
|
-
### 4. Knowledge Processing & Distillation
|
|
127
|
-
- **Isolate the work (Branch/worktree hygiene).** Distillation rewrites existing notes — full re-read per `## Revision` — and does it on a branch or a worktree, never directly on the shared corpus, so a half-finished reconciliation is never what the next reader finds.
|
|
128
|
-
- Before drafting (L2/L3; L1 exempt), **consult the guide router** for a guide covering the task and read it first (the consult trigger, `guides.md` §0). A targeted description match, not a blanket read. Its result is the router verdict already declared with the triage level (Rule Zero).
|
|
129
|
-
- Execute knowledge extraction using **Signal Distillation** (`distillation.md`).
|
|
130
|
-
- **Opt-in subagent execution**: for an L3 with an approved analysis, the work MAY be executed via subagents per `dispatch.md`; default stays same-session.
|
|
131
|
-
- Handle conflicting or outdated information via **Reconciliation** (`reconciliation.md`). Mark obsolete files `status: SUPERSEDED`.
|
|
132
|
-
|
|
133
|
-
### 5. Closure & Indexing
|
|
134
|
-
- Run verification checks (`sdlc_check.py check --root <project_root>`).
|
|
135
|
-
- If the session recorded any supersession, run `sdlc_check.py stale`: its
|
|
136
|
-
`## claims` section is the revision worklist (superseded-cited documents,
|
|
137
|
-
expired windows, superseded derivation chains), worked per `## Revision`
|
|
138
|
-
-- one document, one full re-read.
|
|
139
|
-
- If the work was governed by user-provided indications and is reusable, **PROPOSE distilling a guide** (proactive trigger, `guides.md` §1) — a proposal for the user, never a silent write, never from model knowledge.
|
|
140
|
-
- Update `audit/handoff.md`.
|
|
141
|
-
- Regenerate manifests: `python <skill_dir>/scripts/sdlc_check.py index --root <project_root>`.
|
|
142
|
-
- Mark output clean and complete.
|
|
143
|
-
|
|
144
|
-
## Operative Guides & Router
|
|
145
|
-
Guides are consulted, created, and distilled per `guides.md`.
|
|
146
|
-
- **Consult (before acting)**: check `ai_docs/reference/INDEX.md` — the guide router — and declare the verdict with the triage level.
|
|
147
|
-
- **Propose proactively**: when the user hands over indications that will govern future work, propose distilling them into a guide. A proposal, never a silent write, and never from model knowledge — a guide's whole value is that every claim traces to what the user actually provided.
|
|
148
|
-
- Distill from user instructions into `ai_docs/reference/GUIDE_[topic].md`.
|
|
149
|
-
|
|
150
|
-
## Topic Recall — the answer-side consult
|
|
151
|
-
|
|
152
|
-
The graph is only a second brain if it is READ when answering, not only written when
|
|
153
|
-
distilling. The descent (`taxonomy.md`) fires here with a new trigger — the answer-side
|
|
154
|
-
twin of the guide consult above.
|
|
155
|
-
|
|
156
|
-
- **Trigger — unconditional scan on domain assertions.** Whenever the reply would assert
|
|
157
|
-
facts about the PROJECT'S domain (its topics, decisions, sources, constraints), scan
|
|
158
|
-
`topics/INDEX.md`. Plausibility of coverage is judged ON the scanned top rows, never
|
|
159
|
-
before them — "the KB probably doesn't have this" is model memory talking, the exact
|
|
160
|
-
judgement this reflex removes. Exempt: pure mechanics (running a command, editing per
|
|
161
|
-
explicit instruction), general knowledge outside the project's domain, L1 gestures.
|
|
162
|
-
- **Once per topic per SESSION.** The dedup key is the matched slug (known ex post); a
|
|
163
|
-
question plainly within an already-descended branch reuses that consult, and a
|
|
164
|
-
placement descent already run this session counts. A compaction starts a new session.
|
|
165
|
-
- **The act.** Descend per `taxonomy.md` §6 (same doctrine, answer mode). On claims,
|
|
166
|
-
answer FROM them citing claim ids; a claim whose `state` is `SUPERSEDED <id>` is never
|
|
167
|
-
cited without naming its successor.
|
|
168
|
-
- **The declared verdict — only when the recall ran**, never a per-turn ritual. Four
|
|
169
|
-
legal values:
|
|
170
|
-
- `kb: <slug> → N claims cited`
|
|
171
|
-
- `kb: <slug> → node matched, no claims` — surface the node's `gaps:` when it answers
|
|
172
|
-
the question: "the KB knows it doesn't know" is a first-class answer.
|
|
173
|
-
- `kb: no coverage` — index read, nothing fits.
|
|
174
|
-
- `kb: index absent — regenerate (sdlc_check.py index)` — the INDEX is missing, not
|
|
175
|
-
necessarily the graph (nodes routinely exist while the index lags); regenerate and
|
|
176
|
-
rescan.
|
|
177
|
-
Never fake the verdict: an always-"no coverage" verdict certifies a lookup that did
|
|
178
|
-
not happen. The `router:` and `kb:` verdicts are independent and may co-occur, one
|
|
179
|
-
line each — a how-to question can match a guide AND carry claims.
|
|
180
|
-
- **Anti-echo — the re-touch rule.** When a DERIVED claim grounds a decision the user is
|
|
181
|
-
about to take, walk its chain to non-DERIVED ground — a GIVEN artifact, an ELICITED or
|
|
182
|
-
RULING note — and cite that ground beside the claim id; re-opening only the immediate
|
|
183
|
-
target may re-read the agent's own synthesis, which is the echo chamber itself. If the
|
|
184
|
-
ground does not resolve (imported bundle without originals, external `original_path:`,
|
|
185
|
-
tombstone): say so beside the claim id and treat the claim as **unverified for
|
|
186
|
-
decision-grounding** — surfaced, never silently cited. Per-provenance stance: GIVEN's
|
|
187
|
-
source column is already the direct citation; ELICITED/RULING carry the practitioner's
|
|
188
|
-
own authority; an IMPORTED claim grounding a decision is named as un-re-ratified
|
|
189
|
-
foreign authority.
|
|
190
|
-
- **The trace persists.** When the decision is recorded (a ruling note, a diary entry),
|
|
191
|
-
that record cites the claim id AND the re-touched ground — the trace survives in the
|
|
192
|
-
corpus, not in ephemeral chat.
|
|
193
|
-
- **Under dispatch**, recall is an orchestrator concern: the orchestrator runs the
|
|
194
|
-
descent itself; a context-free subagent never runs its own. The task schema has no
|
|
195
|
-
claims field today, so until a dispatch-focused unit adds one, the orchestrator
|
|
196
|
-
inlines the cited claim rows in the task's free text — an explicit interim.
|
|
197
|
-
|
|
198
|
-
## The Capture Moment — the day's decisions reach the ledger
|
|
199
|
-
|
|
200
|
-
Capture today is what makes recall honest tomorrow: a captured elicited or ruled note
|
|
201
|
-
is exactly the non-DERIVED ground the re-touch rule above walks to. The rails all
|
|
202
|
-
exist — this section adds only the MOMENT.
|
|
203
|
-
|
|
204
|
-
- **When — user-signed closings, once per session.** Phase 5 of a governed unit, or
|
|
205
|
-
any closing signal from the user in an un-governed session ("chiudiamo", "we're
|
|
206
|
-
done"); the session-end pass that updates `handoff.md`/`project_notes.md` then runs
|
|
207
|
-
at that same closing. Never per-turn, never a standing interruption. **Declared
|
|
208
|
-
residual**: an unsignaled end (the user simply stops writing) captures nothing —
|
|
209
|
-
the phase-4 duty (a decision stated mid-session owes its note WHEN SAID) is the
|
|
210
|
-
protection for sessions that never close, and the orient's recency line makes the
|
|
211
|
-
miss visible next time. That line measures NOTES recency, not full ledger
|
|
212
|
-
freshness, and trusts frontmatter `date:` over file mtimes — mtimes lie after a
|
|
213
|
-
clone or worktree.
|
|
214
|
-
- **The sweep question.** At the closing, ONE question, carrying its own search
|
|
215
|
-
result inline: "today I recorded: [what the sweep found already on the rails] —
|
|
216
|
-
any other decisions from today to record?". Scoped to TODAY, so it reaches
|
|
217
|
-
decisions taken outside the session (a meeting, a call) that no transcript search
|
|
218
|
-
could find — facts only the practitioner owns. This is a **scheduled elicitation**
|
|
219
|
-
in the same family as the phase-3 round, not a blocking question (nothing stalls;
|
|
220
|
-
the session is ending), so the blocking form does not attach; the inline result
|
|
221
|
-
satisfies the search-first duty. "Niente" ends it.
|
|
222
|
-
- **The sweep is idempotent.** It verifies the day's decisions are on the rails; a
|
|
223
|
-
decision already noted at phase 4 is verified, never re-captured — no second note,
|
|
224
|
-
no duplicate claim row. The moment closes gaps; the phase-4 row stays the primary
|
|
225
|
-
channel.
|
|
226
|
-
- **What counts as a decision**: domain choices made or confirmed today — a value, a
|
|
227
|
-
threshold, a rule, a stated preference, a rejected alternative with its reason.
|
|
228
|
-
NOT mechanics (commands run, files edited), NOT process state (the handoff's job).
|
|
229
|
-
- **The channeling — existing rails, explicit provenance.**
|
|
230
|
-
- The user's words → `corpus/notes/*` with `origin: elicited` and a `date:`; a
|
|
231
|
-
claim row distilled from it carries `prov: ELICITED`, source = that note with a
|
|
232
|
-
legal `L<a>-<b>` locator.
|
|
233
|
-
- A synthesis of the day's discussion → a note with `derived_from:` → claim
|
|
234
|
-
`prov: DERIVED`.
|
|
235
|
-
- **RULING only when the decision resolves an existing contested set** — then
|
|
236
|
-
`reconciliation.md` §2 applies in full (mandatory `basis:`, supersession of the
|
|
237
|
-
whole prior set). A fresh conflict-free decision is captured elicited: a preference
|
|
238
|
-
is not a fact, and `basis:` is reserved for the fact the corpus lacks.
|
|
239
|
-
- A fact on an existing topic → claim row, L1 (`id` empty; `claim-id --fill`).
|
|
240
|
-
- No owning topic → the note is written NOW and the placement is declared as the
|
|
241
|
-
next kb unit. Capture never smuggles an L3 hierarchy change, and
|
|
242
|
-
`topics/unplaced.md` is never a decision park — UNPLACED is for topic-less
|
|
243
|
-
scraps and is invisible to recall.
|
|
244
|
-
- **Reconciliation is wired.** A captured claim meeting an existing claim on the
|
|
245
|
-
node classifies per `reconciliation.md` — capture can confirm, refine, coexist or
|
|
246
|
-
CONTEST, never silently overwrite.
|
|
247
|
-
- **Silence stays legal where no one signed off**: no closing signal → no question,
|
|
248
|
-
no ritual line.
|
|
249
|
-
|
|
250
|
-
## Revision — the full re-read
|
|
251
|
-
|
|
252
|
-
Incorporating new knowledge into an existing document is a rewrite, not an
|
|
253
|
-
append: anchored edits are each correct while the global invariant — the body
|
|
254
|
-
reads as CURRENT state — is never re-verified. The gesture:
|
|
255
|
-
- Re-read the WHOLE document before editing; then rewrite the body so it reads
|
|
256
|
-
as written today — new knowledge fused, never quarantined in dated
|
|
257
|
-
sections — never append a delta.
|
|
258
|
-
- History goes to the Diary/notes, never an inline chronicle — and past Diary
|
|
259
|
-
entries are never rewritten: a correction is a new entry.
|
|
260
|
-
- A SUPERSEDED banner is a tombstone, never a revision device in a living doc.
|
|
261
|
-
- Claim tables are EXEMPT (rows move only per `reconciliation.md`) and node
|
|
262
|
-
frontmatter moves only per `taxonomy.md` — a revision never re-parents; the
|
|
263
|
-
rewrite governs prose, never the ledger or the graph edges.
|
|
264
|
-
- A multi-document pass re-reads PER DOCUMENT; set coverage is not integrity.
|
|
265
|
-
- The re-read raises the probability of catching a false premise; it cannot
|
|
266
|
-
guarantee it — domain judgment stays the human's.
|
|
267
|
-
|
|
268
|
-
## Mechanical Enforcement
|
|
269
|
-
- `scripts/sdlc_check.py index`: updates `ai_docs/INDEX.md` and `ai_docs/reference/INDEX.md`.
|
|
270
|
-
- `scripts/sdlc_check.py validate`: validates YAML frontmatter (`status`, `description`).
|
|
271
|
-
- `scripts/sdlc_check.py check`: checks dirty closures and missing indexes.
|
|
272
|
-
- `scripts/sdlc_check.py stale`: spine staleness plus `## claims` --
|
|
273
|
-
superseded-cited documents, expired `valid` windows, superseded
|
|
274
|
-
derivation chains (the time cycle's consolidated view).
|
|
1
|
+
---
|
|
2
|
+
name: kb-agentic
|
|
3
|
+
version: 1.13.0
|
|
4
|
+
description: Knowledge-Base & Document-First protocol with risk-proportional triage, Vision as a guide, Signal Distillation, a complete Standalone mode and optional symbiosis with devPNT. Use for user documentation, knowledge extraction, SOPs, research notes, decision logs, knowledge management — and for answering project questions from the claim ledger and topic graph.
|
|
5
|
+
author: Antonio Pinto (https://github.com/Antoneeo)
|
|
6
|
+
copyright: (c) 2026 Antonio Pinto
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
# KB Agentic
|
|
10
|
+
|
|
11
|
+
**Why this skill exists:** to prevent *knowledge degradation and myopia* — acting from partial understanding, where new information contradicts un-indexed notes and hard-won knowledge evaporates between sessions. Triage, the Vision Gate, signal distillation, the documentation lifecycle, and operative guide routers are all one defense against that.
|
|
12
|
+
|
|
13
|
+
This skill guides knowledge management and documentation with a Document-First process proportional to risk. It works fully even without devPNT. When devPNT is available and configured for the current project, the skill works in symbiosis with its governance: M-VISION, Master Plan, Action Plan and versioned artifacts become the authoritative frame for milestones and knowledge nodes.
|
|
14
|
+
|
|
15
|
+
Support files in the skill directory:
|
|
16
|
+
- `templates.md`: templates for Vision, Knowledge ANALYSIS, Research SPIKE, SOP GUIDE, audit plan, and handoff.
|
|
17
|
+
- `portability.md`: carrying knowledge between projects — what a bundle is, why export is a closure rather than a selection, and the rule that knowledge crosses a project boundary while authority does not (`prov: IMPORTED`). Read before `export`/`import`.
|
|
18
|
+
- `taxonomy.md`: placing a claim in the topic graph — descent over the generated index, the five verdicts (EXISTS / INADEQUATE / MISSING / GENERALIZES / UNPLACED), the sibling rule, guarded re-parenting, canonicalization — and the answer-mode descent (`§6`). Run at L3 before drafting.
|
|
19
|
+
- `guides.md`: pipeline for distilling user-provided indications into `ai_docs/reference/GUIDE_[topic].md`.
|
|
20
|
+
- `vision.md`: how to write a Vision a cold reviewer can actually apply — the properties that make a rule hold, the minimum operable sections, and the blind check.
|
|
21
|
+
- `distillation.md`: from a source to claim rows — intake (content-addressed originals, stored canonical extraction, every provenance a real file), the claim table, extraction discipline, signal rules (symbiosis with `distill`).
|
|
22
|
+
- `reconciliation.md`: what happens when two claims meet — five outcomes, detect-and-hold (the machine never decides), rulings with mandatory `basis:`, the claim state machine, the batched escalation form.
|
|
23
|
+
- `review.md`: the review discipline — when a review is due, how to request one, how to receive findings, how to review.
|
|
24
|
+
- `dispatch.md`: opt-in subagent execution of an approved plan.
|
|
25
|
+
- `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.
|
|
26
|
+
- `scripts/sdlc_check.py` + `scripts/sdlc_core.py`: the mechanical validator for the docs root (`check`, `validate`, `index`, `mark`, `gate`, `plan`, `orient`, `migrate`, and the knowledge overlay: `graph`, `corpus`, `claim-id`, `anchor`, `export`, `import`, `stale` (spine staleness plus `## claims` -- the time cycle's consolidated view), plus `remind` — the opt-in per-turn one-line reminder, ENFORCEMENT §4). Two files: the core is the family's shared spine; the entry point IS the knowledge overlay — the claim ledger and topic-graph checks live inside it, so the core alone runs none of them. Copy both, or neither.
|
|
27
|
+
- `ENFORCEMENT.md`: optional setup for CI and hooks.
|
|
28
|
+
|
|
29
|
+
Read these files only when needed. `SKILL.md` is the operating contract; the support files are progressive resources.
|
|
30
|
+
|
|
31
|
+
## Knowledge Values
|
|
32
|
+
|
|
33
|
+
- **Understand before writing/updating:** do not modify or create knowledge documents without checking root cause, user constraints, and existing notes — trust the primary sources and existing guides, not memory.
|
|
34
|
+
- **Apply DRY and Single Source of Truth:** do not duplicate knowledge across files; extend existing notes (`ANALYSIS_[topic].md` or `GUIDE_[topic].md`).
|
|
35
|
+
- **Signal & Distillation:** eliminate fluff, filler, and speculative statements; keep deterministic facts, constraints, decisions, and clear SOP steps (symbiosis with `distill`).
|
|
36
|
+
- **Lifecycle & Freshness:** mark superseded knowledge (`status: SUPERSEDED` or `DEPRECATED`) so outdated information does not cause hallucination.
|
|
37
|
+
- **Protect the Vision & User Style:** align all knowledge work with user strategic goals, operational preferences, and expected outcomes.
|
|
38
|
+
- **Map-First Navigation:** rely on `ai_docs/README.md`, `INDEX.md`, and `reference/INDEX.md` router for targeted retrieval before creating new documents — and before *answering from model memory* on the project's domain (`## Topic Recall`).
|
|
39
|
+
|
|
40
|
+
## Rule Zero: Triage
|
|
41
|
+
|
|
42
|
+
Always classify the request before choosing the process. Declare the chosen level to the user when you start operational work.
|
|
43
|
+
|
|
44
|
+
**Declare the level WITH the router verdict** (one line, for L2, L3 and Spike — L1 declares the level alone): the result of the guide-router lookup described under `## Operative Guides`, i.e. `Level: L2 · router: no match` or `Level: L3 · router: GUIDE_release_sop.md → read`. Name the guide you matched, or `no match`.
|
|
45
|
+
|
|
46
|
+
| Level | Criteria | Required process |
|
|
47
|
+
|---|---|---|
|
|
48
|
+
| **L1 - Quick Fact / Snippet** | One claim row added to an existing topic; a typo; a preference update. No node created, no source entering the corpus, no frontmatter change. | Implement edit directly in existing note. No new documents. |
|
|
49
|
+
| **L2 - Propagation of settled knowledge** | The fact is **already settled** in the corpus and the work carries it into existing documents — restating, correcting a stale copy, updating an SOP that quotes it. No node created or superseded, no hierarchy change, no node frontmatter change, no new source ingested. | Mini-analysis in message: objective, impact, sources, validation. Update existing document (full re-read per `## Revision`) or create single SOP/note. |
|
|
50
|
+
| **L3 - New knowledge unit / Corpus** | A source enters the corpus; a topic node is created or superseded; the hierarchy moves; a conflict must be reconciled; or what a claim asserts changes. | Full workflow: Vision Gate, Spec Elicitation, Taxonomy Pass, Knowledge Analysis, Distillation, Review, Indexing. |
|
|
51
|
+
| **Spike - Exploration** | Time-boxed exploratory research or draft without merging into official KB. | Outcome in `ai_docs/solutions/SPIKE_[topic].md`. |
|
|
52
|
+
|
|
53
|
+
Cross-cutting rules:
|
|
54
|
+
- **The unit of measure here is knowledge, never file count.** In this domain risk is
|
|
55
|
+
knowledge-shaped: carrying one settled fact into eight documents is small, and one
|
|
56
|
+
claim that re-parents a node is not. Do not import the code lens's file thresholds —
|
|
57
|
+
a level is chosen by what the change does to the corpus and the graph. What keeps
|
|
58
|
+
this from becoming an escape hatch is the trigger list below, which overrides the
|
|
59
|
+
level whatever the size, plus one limit: **propagation that changes what a claim
|
|
60
|
+
asserts is not propagation** — it is a new knowledge unit, so L3.
|
|
61
|
+
- **Domain routing (multi-lens installs only).** After the level is set, and only when a sibling lens skill of this family is installed (`agentic-sdlc`, `mkt-agentic-sdlc`), run the router in `routing.md` for every L2, L3 and Spike: it decides which lens's method and validation rules govern this unit of work. L1 never reaches it, and a single-lens install never reads the file — detection fails open. In such a project, never refer to a document whose meaning differs by lens ("threat model", "vision", `principles.md`, `handoff.md`) by its bare name: qualify it with its domain, or name its path.
|
|
62
|
+
- Personal data, credentials, security-sensitive processes, authN/authZ specs are high-risk: never L1.
|
|
63
|
+
- **Escalation triggers — ANY of these makes it L3, whatever the file count:** the change touches the topic hierarchy (`parents:`, a `GENERALIZES` verdict, a re-parent); it touches more than one node's frontmatter; it creates or supersedes a node other nodes reference. Re-shaping the graph is a unit of change, never a side effect of placing one claim.
|
|
64
|
+
- Adding one claim row to an existing topic is L1: the `id` may be left empty (the validator fills it — `claim-id --fill`), and no check errors on a hand-written row.
|
|
65
|
+
- If a bigger impact emerges during L1/L2 work, stop, reclassify and declare it.
|
|
66
|
+
- When in doubt, pick the higher level.
|
|
67
|
+
- **No useless questions.** Every question to the practitioner passes the legality test of the question discipline (`elicitation.md`): searched first with the search named, and the blocked decision named. Claim-conflict escalations additionally carry their own mandated form and are batched at run end (`reconciliation.md` §4).
|
|
68
|
+
|
|
69
|
+
## Write Triggers
|
|
70
|
+
|
|
71
|
+
Triage decides IF documentation is due; this table decides WHICH document each event produces, and when. **One event, one destination:** when the trigger fires and the document does not exist, create it; when it exists, update it — never duplicate it.
|
|
72
|
+
|
|
73
|
+
| Document | Write trigger | Phase |
|
|
74
|
+
|---|---|---|
|
|
75
|
+
| `solutions/ANALYSIS_[topic].md` | Every L3, after elicitation and before any drafting. On topic match with an existing analysis, update that one instead of a new file. | 3 |
|
|
76
|
+
| `solutions/SPIKE_[topic].md` | Closing any Spike — including a negative outcome. | — |
|
|
77
|
+
| `vision/features/VISION_[feature].md` | Multi-milestone topic at analysis time, or retroactive trigger (second ANALYSIS on same theme). | 3 |
|
|
78
|
+
| `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. Inventory for lookup, never a work board. | 5 / session end |
|
|
79
|
+
| `audit/HANDOFF_[topic].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. Carries the resume logistics too; the ANALYSIS Diary keeps the durable narrative (DRY). DELETED at closure — deleting it *is* removing the row. | 4 / 5 / session end |
|
|
80
|
+
| `audit/project_notes.md` | A note true for the whole project rather than one workstream. Appended verbatim to the generated registry, so regenerating cannot destroy notes that belong to no workstream. | 5 / session end |
|
|
81
|
+
| `audit/handoff.md` — converting an existing project | **Lazily, at the first write — and then ALL AT ONCE.** Converting one row at a time is the state that loses the others, so `index` refuses to write while anything in the file is unaccounted for and names it. Until the first source exists nothing generates and nothing errors. | 5 / session end |
|
|
82
|
+
| `audit/audit_plan.md` (Standalone) | Bootstrap, and whenever a mapped area changes state (`sdlc_check.py mark`). | 1 |
|
|
83
|
+
| `reference/GUIDE_[topic].md` (`source_kind: document`) | Origin+purpose test (`guides.md`), or a proactive proposal accepted by user. | 4 / 5 |
|
|
84
|
+
| `reference/GUIDE_[topic].md` (`source_kind: code`/`domain`) | Recognized high-complexity domain/concept with no CURRENT guide $\rightarrow$ duty to write autonomously. | 4 / 5 |
|
|
85
|
+
| `audit/reviews/REVIEW_LOG.md` | Every completed review — recorded in log. | 3 / 5 |
|
|
86
|
+
| ADR / Decision Log — `architecture/` or devPNT DB | A strategic decision was taken (pattern, policy, structural change): record before DONE. | 5 |
|
|
87
|
+
| `strategic/architecture.md`, `strategic/existing_features.md` | Bootstrap; update at closure when the knowledge catalog actually changed. | 1 / 5 |
|
|
88
|
+
| `vision/project_vision.md`, `roadmap.md`, `principles.md` | Bootstrap as `Status: DRAFT`; promoted to APPROVED only by explicit user confirmation. | 1 / 2 |
|
|
89
|
+
| `topics/<slug>.md` | A placement verdict creates it (MISSING/INADEQUATE-child, `taxonomy.md`); reconciliation updates its claim rows. One node per topic — a similar-but-distinct concept is a sibling with `related:` + a written distinction, never a merge and never a duplicate. Merged/renamed nodes become tombstones (`status: SUPERSEDED` + `redirect_to:`), never deleted. | 4 |
|
|
90
|
+
| a KB bundle (`export`) | Knowledge must leave this project. Export is L1 — it writes nothing into the corpus. **Importing one is L3**: a source enters the corpus and nodes are created, and a bundle is external input, so never L1 whatever its size (`portability.md`). | — |
|
|
91
|
+
| `corpus/given/*` + sidecar | A source arrives: it becomes a content-addressed artifact with a sidecar carrying digest/date/`supersedes:`. A text source is copied verbatim. A non-text source yields its stored canonical extraction — copied **beside** the original when that is small enough to keep, or **instead of it** on a large binary corpus, where the original stays where it lives and is recorded as `original_path:`/`original_sha256:` (`distillation.md` §1, which owns this rule). Never edited after ingest — the digest check on whatever `given/` holds is what enforces it. | 4 |
|
|
92
|
+
| `corpus/notes/*` | Something is said (`origin: elicited`), synthesised (`derived_from:`), or ruled (`basis:`). A note with none of the three is refused by the validator. | 4 / 5 |
|
|
93
|
+
| the day's decisions, at a user-signed closing (the Capture Moment sweep) | Verification that the phase-4 notes/claims exist; NEW `corpus/notes/*` + claim rows only for what the sweep surfaces un-captured. The event is the CLOSING, disjoint from the row above (which fires when something is SAID). | 5 / session end |
|
|
94
|
+
| `solutions/PLAN_[topic].md` + its ledger | A source too long for one context is ingested: **one task per reading window** (30 pages by default; the plan states the window used), each ending at a declared `extracted_through:`. That ledger is the register the ingestion resumes from across sessions — ingestion never builds a second one (`distillation.md` §3, `templates.md`). | 4 |
|
|
95
|
+
| `corpus/given/*.meta.md` — `extracted_through:` | Every reading window closes by advancing it (`p=<n>`, `L<n>`, `complete`). Required once any claim cites the artifact: unstated, "I am finished" cannot be falsified, which is how a sampled 200-page manual passes for an ingested one. | 4 |
|
|
96
|
+
| `INDEX.md`, `reference/INDEX.md`, `topics/INDEX.md`, `corpus/INDEX.md` | Regenerated by `sdlc_check.py index` at closure — never by hand; `validate` fails on a hand-edited one. | 5 |
|
|
97
|
+
|
|
98
|
+
## Operating Modes
|
|
99
|
+
|
|
100
|
+
### Full Standalone
|
|
101
|
+
Use this mode when devPNT is unavailable, not configured for the current project, or the user explicitly asks for a filesystem-only workflow.
|
|
102
|
+
- Source of truth: `ai_docs/` (`vision/`, `solutions/`, `reference/`, `audit/`, `strategic/`).
|
|
103
|
+
|
|
104
|
+
### Hybrid in symbiosis with devPNT
|
|
105
|
+
Use this mode when `devpnt_*` tools are available and point at the current project.
|
|
106
|
+
- devPNT governs `M-VISION`, Master Plan, Action Plan, and versioned artifacts.
|
|
107
|
+
- Local `ai_docs/` serves as readable context, Standalone fallback, local handoff, or shadow copy.
|
|
108
|
+
|
|
109
|
+
## L3 Workflow
|
|
110
|
+
|
|
111
|
+
### 1. Audit and Alignment
|
|
112
|
+
- Read `ai_docs/audit/handoff.md` (workstream registry) to see active topics.
|
|
113
|
+
- Read `ai_docs/README.md`, `ai_docs/INDEX.md` and `ai_docs/reference/INDEX.md` (the guide router) before exploring notes. 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.
|
|
114
|
+
- If `ai_docs/` is missing, create the bootstrap set: `README.md`, `vision/` docs, `strategic/` docs, and `audit/audit_plan.md`, then run `sdlc_check.py index`.
|
|
115
|
+
|
|
116
|
+
### 2. Vision Gate
|
|
117
|
+
- Read `project_vision.md`, `roadmap.md`, `principles.md` (or devPNT `M-VISION`).
|
|
118
|
+
- Verify request aligns with expected benefits, user goals, and success signals.
|
|
119
|
+
|
|
120
|
+
### 3. Request Analysis & Taxonomy Pass
|
|
121
|
+
- Run spec elicitation round (`elicitation.md`) before drafting analysis.
|
|
122
|
+
- Run taxonomy pass (`taxonomy.md`): verify whether topics, categories, or SOPs already exist in `ai_docs/`. Avoid duplication.
|
|
123
|
+
- Create or update `ai_docs/solutions/ANALYSIS_[topic].md`.
|
|
124
|
+
- **Design review gate (end of Phase 3, before any drafting):** the analysis is reviewed by somebody other than its author — a subagent with fresh context, or a declared self-pass when no higher rung is usable — a permission-gated rung is asked about, never silently skipped (`review.md`). Follow `review.md`; log the outcome in `audit/reviews/REVIEW_LOG.md`. A knowledge structure reviewed only by the person who chose it is not reviewed.
|
|
125
|
+
|
|
126
|
+
### 4. Knowledge Processing & Distillation
|
|
127
|
+
- **Isolate the work (Branch/worktree hygiene).** Distillation rewrites existing notes — full re-read per `## Revision` — and does it on a branch or a worktree, never directly on the shared corpus, so a half-finished reconciliation is never what the next reader finds.
|
|
128
|
+
- Before drafting (L2/L3; L1 exempt), **consult the guide router** for a guide covering the task and read it first (the consult trigger, `guides.md` §0). A targeted description match, not a blanket read. Its result is the router verdict already declared with the triage level (Rule Zero).
|
|
129
|
+
- Execute knowledge extraction using **Signal Distillation** (`distillation.md`).
|
|
130
|
+
- **Opt-in subagent execution**: for an L3 with an approved analysis, the work MAY be executed via subagents per `dispatch.md`; default stays same-session.
|
|
131
|
+
- Handle conflicting or outdated information via **Reconciliation** (`reconciliation.md`). Mark obsolete files `status: SUPERSEDED`.
|
|
132
|
+
|
|
133
|
+
### 5. Closure & Indexing
|
|
134
|
+
- Run verification checks (`sdlc_check.py check --root <project_root>`).
|
|
135
|
+
- If the session recorded any supersession, run `sdlc_check.py stale`: its
|
|
136
|
+
`## claims` section is the revision worklist (superseded-cited documents,
|
|
137
|
+
expired windows, superseded derivation chains), worked per `## Revision`
|
|
138
|
+
-- one document, one full re-read.
|
|
139
|
+
- If the work was governed by user-provided indications and is reusable, **PROPOSE distilling a guide** (proactive trigger, `guides.md` §1) — a proposal for the user, never a silent write, never from model knowledge.
|
|
140
|
+
- Update `audit/handoff.md`.
|
|
141
|
+
- Regenerate manifests: `python <skill_dir>/scripts/sdlc_check.py index --root <project_root>`.
|
|
142
|
+
- Mark output clean and complete.
|
|
143
|
+
|
|
144
|
+
## Operative Guides & Router
|
|
145
|
+
Guides are consulted, created, and distilled per `guides.md`.
|
|
146
|
+
- **Consult (before acting)**: check `ai_docs/reference/INDEX.md` — the guide router — and declare the verdict with the triage level.
|
|
147
|
+
- **Propose proactively**: when the user hands over indications that will govern future work, propose distilling them into a guide. A proposal, never a silent write, and never from model knowledge — a guide's whole value is that every claim traces to what the user actually provided.
|
|
148
|
+
- Distill from user instructions into `ai_docs/reference/GUIDE_[topic].md`.
|
|
149
|
+
|
|
150
|
+
## Topic Recall — the answer-side consult
|
|
151
|
+
|
|
152
|
+
The graph is only a second brain if it is READ when answering, not only written when
|
|
153
|
+
distilling. The descent (`taxonomy.md`) fires here with a new trigger — the answer-side
|
|
154
|
+
twin of the guide consult above.
|
|
155
|
+
|
|
156
|
+
- **Trigger — unconditional scan on domain assertions.** Whenever the reply would assert
|
|
157
|
+
facts about the PROJECT'S domain (its topics, decisions, sources, constraints), scan
|
|
158
|
+
`topics/INDEX.md`. Plausibility of coverage is judged ON the scanned top rows, never
|
|
159
|
+
before them — "the KB probably doesn't have this" is model memory talking, the exact
|
|
160
|
+
judgement this reflex removes. Exempt: pure mechanics (running a command, editing per
|
|
161
|
+
explicit instruction), general knowledge outside the project's domain, L1 gestures.
|
|
162
|
+
- **Once per topic per SESSION.** The dedup key is the matched slug (known ex post); a
|
|
163
|
+
question plainly within an already-descended branch reuses that consult, and a
|
|
164
|
+
placement descent already run this session counts. A compaction starts a new session.
|
|
165
|
+
- **The act.** Descend per `taxonomy.md` §6 (same doctrine, answer mode). On claims,
|
|
166
|
+
answer FROM them citing claim ids; a claim whose `state` is `SUPERSEDED <id>` is never
|
|
167
|
+
cited without naming its successor.
|
|
168
|
+
- **The declared verdict — only when the recall ran**, never a per-turn ritual. Four
|
|
169
|
+
legal values:
|
|
170
|
+
- `kb: <slug> → N claims cited`
|
|
171
|
+
- `kb: <slug> → node matched, no claims` — surface the node's `gaps:` when it answers
|
|
172
|
+
the question: "the KB knows it doesn't know" is a first-class answer.
|
|
173
|
+
- `kb: no coverage` — index read, nothing fits.
|
|
174
|
+
- `kb: index absent — regenerate (sdlc_check.py index)` — the INDEX is missing, not
|
|
175
|
+
necessarily the graph (nodes routinely exist while the index lags); regenerate and
|
|
176
|
+
rescan.
|
|
177
|
+
Never fake the verdict: an always-"no coverage" verdict certifies a lookup that did
|
|
178
|
+
not happen. The `router:` and `kb:` verdicts are independent and may co-occur, one
|
|
179
|
+
line each — a how-to question can match a guide AND carry claims.
|
|
180
|
+
- **Anti-echo — the re-touch rule.** When a DERIVED claim grounds a decision the user is
|
|
181
|
+
about to take, walk its chain to non-DERIVED ground — a GIVEN artifact, an ELICITED or
|
|
182
|
+
RULING note — and cite that ground beside the claim id; re-opening only the immediate
|
|
183
|
+
target may re-read the agent's own synthesis, which is the echo chamber itself. If the
|
|
184
|
+
ground does not resolve (imported bundle without originals, external `original_path:`,
|
|
185
|
+
tombstone): say so beside the claim id and treat the claim as **unverified for
|
|
186
|
+
decision-grounding** — surfaced, never silently cited. Per-provenance stance: GIVEN's
|
|
187
|
+
source column is already the direct citation; ELICITED/RULING carry the practitioner's
|
|
188
|
+
own authority; an IMPORTED claim grounding a decision is named as un-re-ratified
|
|
189
|
+
foreign authority.
|
|
190
|
+
- **The trace persists.** When the decision is recorded (a ruling note, a diary entry),
|
|
191
|
+
that record cites the claim id AND the re-touched ground — the trace survives in the
|
|
192
|
+
corpus, not in ephemeral chat.
|
|
193
|
+
- **Under dispatch**, recall is an orchestrator concern: the orchestrator runs the
|
|
194
|
+
descent itself; a context-free subagent never runs its own. The task schema has no
|
|
195
|
+
claims field today, so until a dispatch-focused unit adds one, the orchestrator
|
|
196
|
+
inlines the cited claim rows in the task's free text — an explicit interim.
|
|
197
|
+
|
|
198
|
+
## The Capture Moment — the day's decisions reach the ledger
|
|
199
|
+
|
|
200
|
+
Capture today is what makes recall honest tomorrow: a captured elicited or ruled note
|
|
201
|
+
is exactly the non-DERIVED ground the re-touch rule above walks to. The rails all
|
|
202
|
+
exist — this section adds only the MOMENT.
|
|
203
|
+
|
|
204
|
+
- **When — user-signed closings, once per session.** Phase 5 of a governed unit, or
|
|
205
|
+
any closing signal from the user in an un-governed session ("chiudiamo", "we're
|
|
206
|
+
done"); the session-end pass that updates `handoff.md`/`project_notes.md` then runs
|
|
207
|
+
at that same closing. Never per-turn, never a standing interruption. **Declared
|
|
208
|
+
residual**: an unsignaled end (the user simply stops writing) captures nothing —
|
|
209
|
+
the phase-4 duty (a decision stated mid-session owes its note WHEN SAID) is the
|
|
210
|
+
protection for sessions that never close, and the orient's recency line makes the
|
|
211
|
+
miss visible next time. That line measures NOTES recency, not full ledger
|
|
212
|
+
freshness, and trusts frontmatter `date:` over file mtimes — mtimes lie after a
|
|
213
|
+
clone or worktree.
|
|
214
|
+
- **The sweep question.** At the closing, ONE question, carrying its own search
|
|
215
|
+
result inline: "today I recorded: [what the sweep found already on the rails] —
|
|
216
|
+
any other decisions from today to record?". Scoped to TODAY, so it reaches
|
|
217
|
+
decisions taken outside the session (a meeting, a call) that no transcript search
|
|
218
|
+
could find — facts only the practitioner owns. This is a **scheduled elicitation**
|
|
219
|
+
in the same family as the phase-3 round, not a blocking question (nothing stalls;
|
|
220
|
+
the session is ending), so the blocking form does not attach; the inline result
|
|
221
|
+
satisfies the search-first duty. "Niente" ends it.
|
|
222
|
+
- **The sweep is idempotent.** It verifies the day's decisions are on the rails; a
|
|
223
|
+
decision already noted at phase 4 is verified, never re-captured — no second note,
|
|
224
|
+
no duplicate claim row. The moment closes gaps; the phase-4 row stays the primary
|
|
225
|
+
channel.
|
|
226
|
+
- **What counts as a decision**: domain choices made or confirmed today — a value, a
|
|
227
|
+
threshold, a rule, a stated preference, a rejected alternative with its reason.
|
|
228
|
+
NOT mechanics (commands run, files edited), NOT process state (the handoff's job).
|
|
229
|
+
- **The channeling — existing rails, explicit provenance.**
|
|
230
|
+
- The user's words → `corpus/notes/*` with `origin: elicited` and a `date:`; a
|
|
231
|
+
claim row distilled from it carries `prov: ELICITED`, source = that note with a
|
|
232
|
+
legal `L<a>-<b>` locator.
|
|
233
|
+
- A synthesis of the day's discussion → a note with `derived_from:` → claim
|
|
234
|
+
`prov: DERIVED`.
|
|
235
|
+
- **RULING only when the decision resolves an existing contested set** — then
|
|
236
|
+
`reconciliation.md` §2 applies in full (mandatory `basis:`, supersession of the
|
|
237
|
+
whole prior set). A fresh conflict-free decision is captured elicited: a preference
|
|
238
|
+
is not a fact, and `basis:` is reserved for the fact the corpus lacks.
|
|
239
|
+
- A fact on an existing topic → claim row, L1 (`id` empty; `claim-id --fill`).
|
|
240
|
+
- No owning topic → the note is written NOW and the placement is declared as the
|
|
241
|
+
next kb unit. Capture never smuggles an L3 hierarchy change, and
|
|
242
|
+
`topics/unplaced.md` is never a decision park — UNPLACED is for topic-less
|
|
243
|
+
scraps and is invisible to recall.
|
|
244
|
+
- **Reconciliation is wired.** A captured claim meeting an existing claim on the
|
|
245
|
+
node classifies per `reconciliation.md` — capture can confirm, refine, coexist or
|
|
246
|
+
CONTEST, never silently overwrite.
|
|
247
|
+
- **Silence stays legal where no one signed off**: no closing signal → no question,
|
|
248
|
+
no ritual line.
|
|
249
|
+
|
|
250
|
+
## Revision — the full re-read
|
|
251
|
+
|
|
252
|
+
Incorporating new knowledge into an existing document is a rewrite, not an
|
|
253
|
+
append: anchored edits are each correct while the global invariant — the body
|
|
254
|
+
reads as CURRENT state — is never re-verified. The gesture:
|
|
255
|
+
- Re-read the WHOLE document before editing; then rewrite the body so it reads
|
|
256
|
+
as written today — new knowledge fused, never quarantined in dated
|
|
257
|
+
sections — never append a delta.
|
|
258
|
+
- History goes to the Diary/notes, never an inline chronicle — and past Diary
|
|
259
|
+
entries are never rewritten: a correction is a new entry.
|
|
260
|
+
- A SUPERSEDED banner is a tombstone, never a revision device in a living doc.
|
|
261
|
+
- Claim tables are EXEMPT (rows move only per `reconciliation.md`) and node
|
|
262
|
+
frontmatter moves only per `taxonomy.md` — a revision never re-parents; the
|
|
263
|
+
rewrite governs prose, never the ledger or the graph edges.
|
|
264
|
+
- A multi-document pass re-reads PER DOCUMENT; set coverage is not integrity.
|
|
265
|
+
- The re-read raises the probability of catching a false premise; it cannot
|
|
266
|
+
guarantee it — domain judgment stays the human's.
|
|
267
|
+
|
|
268
|
+
## Mechanical Enforcement
|
|
269
|
+
- `scripts/sdlc_check.py index`: updates `ai_docs/INDEX.md` and `ai_docs/reference/INDEX.md`.
|
|
270
|
+
- `scripts/sdlc_check.py validate`: validates YAML frontmatter (`status`, `description`).
|
|
271
|
+
- `scripts/sdlc_check.py check`: checks dirty closures and missing indexes.
|
|
272
|
+
- `scripts/sdlc_check.py stale`: spine staleness plus `## claims` --
|
|
273
|
+
superseded-cited documents, expired `valid` windows, superseded
|
|
274
|
+
derivation chains (the time cycle's consolidated view).
|
|
@@ -94,6 +94,25 @@ Hybrid project's devPNT gates write to the same file.
|
|
|
94
94
|
The log is how the gate's value is measured over time; skipping it makes the gate
|
|
95
95
|
unfalsifiable, the same defect as an unnamed EXISTS or a faked router verdict.
|
|
96
96
|
|
|
97
|
+
**Revise means converge, not accrete.** Two revision failure modes generate their
|
|
98
|
+
own findings and can make the cap unreachable honestly. (1) *Patch-on-patch*:
|
|
99
|
+
each round's fixes are grafted onto the previous text until stale counts,
|
|
100
|
+
duplicated sections and internal contradictions are findings the revisions
|
|
101
|
+
themselves created. The lean operative form is the FIRST draft's form, not the
|
|
102
|
+
round-3 rescue: the review request states the artifact's line count against a
|
|
103
|
+
budget the author fixed before drafting (default: the measured figure below), and
|
|
104
|
+
an artifact over budget is the reviewer's first finding, before content. When a
|
|
105
|
+
round's findings are of that artifact-consistency class, rewrite lean instead of
|
|
106
|
+
patching again. (2) *Revision narrative in the
|
|
107
|
+
artifact*: the artifact under review carries its own review archaeology
|
|
108
|
+
("v1.2 fixed…", "as the round-2 review noted…"). An artifact states what IS,
|
|
109
|
+
once; how it got there lives in the REVIEW_LOG row's notes, never in the
|
|
110
|
+
artifact — archaeology bloats the object under review and every stale
|
|
111
|
+
self-reference is a future finding. Field measurement (2026-08): an artifact
|
|
112
|
+
that had grown to ~1,250 lines across eight failing rounds passed on the round
|
|
113
|
+
after a ~500-line operative rewrite moved the history out — the rewrite removed
|
|
114
|
+
an entire finding class.
|
|
115
|
+
|
|
97
116
|
**The reviewer is read-only and advisory.** It never edits, never commits, never
|
|
98
117
|
marks anything DONE, and a PASS is not an approval to merge — the human owns that.
|
|
99
118
|
|
|
@@ -124,6 +143,26 @@ When you hand work to a reviewer (human or agent), give them:
|
|
|
124
143
|
should have been. The design reviewer checks that every threat surface the change
|
|
125
144
|
touches has a matching security requirement.
|
|
126
145
|
|
|
146
|
+
- **The severity contract**: state with the request what counts as a blocker
|
|
147
|
+
versus a lesser finding. A blocker is *unfit-to-proceed* evidence only — a
|
|
148
|
+
false claim about existing code, a published falsehood, a missing impacted
|
|
149
|
+
file, an unresolvable internal contradiction, a real regression; an
|
|
150
|
+
improvement idea, a wish, or a style preference is at most a WARN and never
|
|
151
|
+
fails the artifact. An uncalibrated "hunt hard" mandate produces
|
|
152
|
+
blocker-inflated rounds that fail artifacts on wishes — each one burns a
|
|
153
|
+
round from the cap of 3 and patches the artifact for prose, the accretion
|
|
154
|
+
failure the round-cap rule names. Stating the taxonomy calibrates the
|
|
155
|
+
*scale*; it never pre-judges any specific finding (that stays forbidden
|
|
156
|
+
below) — the reviewer still decides where every finding lands.
|
|
157
|
+
|
|
158
|
+
**Pre-audit before you request.** Before handing the artifact over, run a
|
|
159
|
+
scripted author pre-audit: mechanically resolve every `file:line` / symbol
|
|
160
|
+
anchor the artifact cites against the real tree, and recount every count it
|
|
161
|
+
states — with a script, not by eye. Anchors rot between drafts, and a reviewer
|
|
162
|
+
that trips on a broken anchor spends its round proving your citation instead of
|
|
163
|
+
your design. Measured cost is near zero (one grep-loop); measured catch: four
|
|
164
|
+
rotted anchors in a single artifact, pre-review.
|
|
165
|
+
|
|
127
166
|
**The verdict travels back as the reviewer's own final output** — the text it
|
|
128
167
|
returns when it finishes, nothing else. A reviewer that tries to message the
|
|
129
168
|
requester mid-run depends on a delivery channel it cannot verify (a subagent
|
|
@@ -301,6 +340,20 @@ When you are the reviewer:
|
|
|
301
340
|
NOT checked here — architecture-awareness is the Capability Ledger / Impact
|
|
302
341
|
review's job; a clause for it would duplicate that.) A lens whose template
|
|
303
342
|
defines no such section (knowledge, marketing) never fires this clause.
|
|
343
|
+
- **Behavioural-claim probes (same reviews; fires only in the lens whose
|
|
344
|
+
SKILL.md defines Execute-Before-Specify — the code lens today; that paragraph
|
|
345
|
+
is the owning definition — cite it, never restate it).** On an L3 design
|
|
346
|
+
artifact, a claim of the form "the code today does X" must trace to an
|
|
347
|
+
assertion in the artifact's shipped harness
|
|
348
|
+
(`ai_docs/solutions/harness_[feature]/`): the check is mechanical — re-run
|
|
349
|
+
the harness and compare, instead of re-deriving the claims by reading. Three
|
|
350
|
+
findings live here and nowhere else: a behavioural claim backed by no probe
|
|
351
|
+
(report it as unproven — reading the source yourself is the same
|
|
352
|
+
insufficient evidence the rule bans for the author); a harness absent while
|
|
353
|
+
the prose carries behavioural claims; and a probe that no longer passes
|
|
354
|
+
against the current tree. Structural facts (a file exists, a symbol's
|
|
355
|
+
signature, its callers) are the blast-radius clause's territory, never probe
|
|
356
|
+
findings. A lens whose SKILL.md defines no such duty never fires this clause.
|
|
304
357
|
|
|
305
358
|
## Anti-patterns
|
|
306
359
|
|