@antoneeo/kb-agentic-skill 1.13.0 → 1.15.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 CHANGED
@@ -2,6 +2,87 @@
2
2
 
3
3
  Every significant change to this skill is recorded here.
4
4
 
5
+ ## [1.15.0] - 2026-09-12
6
+
7
+ ### Fixed
8
+ - **F-047: one row asserts one thing.** Field report: a bundled claim row
9
+ ("X, and also Y") made the checker's remedies point in opposite directions —
10
+ the collision message told the author to merge rows that assert different
11
+ things, and the state-grammar message denied a multi-successor `SUPERSEDED`
12
+ that every documented site also denied. The collision message is now
13
+ narrow-first and proposes a merge only where a single assertion is shared;
14
+ the grammar message states the form it accepts; and a plurality hint
15
+ (notes tier, never the exit code) flags a row that reads as more than one
16
+ claim. NOT demonstrated: a pre-registered blind A/B of the citation-scope
17
+ rule on the field's own row returned NULL (3/3 correct in both arms —
18
+ ceiling effect, the row names its off-topic subject explicitly), and the
19
+ Diary records it as such.
20
+ - **F-053: kb had no human-approval rule.** "Never auto-accept a devPNT
21
+ proposal: present the preview and wait for explicit confirmation" existed in
22
+ both sibling packages and nowhere in this one — invisible because the only
23
+ battery assertion sat inside a test that skips every lens without a
24
+ `hybrid.md`, which is exactly the lens that lacked the rule. The rule is now
25
+ in kb's Hybrid block, and the battery test that pins it skips no lens and
26
+ goes red when the rule is stripped from a whole-lens copy.
27
+ - **F-053: the authoring-floor pointer reached one lens of three.** It is now
28
+ in this contract too, before the instruction to write the analysis — where
29
+ the rule can still change what gets written, rather than at the design-review
30
+ gate one phase too late.
31
+
32
+ ### Added
33
+ - **The shared spine gains the capability floor, the delegation boundary and
34
+ `benefit`** (F-048, F-049, F-050 — see the code lens's changelog for the
35
+ reasoning; the files are byte-identical across the three packages).
36
+
37
+ ### Read cost
38
+ - This lens's mandatory contract GREW **+7.1%** (27,516 -> 29,471 B): it
39
+ received the spine's new doctrine and the two rules above, and no diet. The
40
+ Hybrid seam was measured for extraction and DECLINED — kb's block is 299 B
41
+ against a 1,282 B pointer, so moving it would grow the file it should shrink.
42
+
43
+ ## [1.14.1] - 2026-09-06
44
+
45
+ ### Fixed
46
+ - **F-046 shipped a hook that wired nowhere.** `wireRemindHookInto` used the
47
+ ORIENT hook's opt-out marker (`orient-hook-wired`) as its own. That file is
48
+ present on every machine that ever installed the skill, so the installer read
49
+ it as "the user opted out of the per-turn reminder" and never wrote the hook —
50
+ for everyone. Two smaller faults in the same function: the marker was checked
51
+ BEFORE testing whether the hook was already present, and no marker was ever
52
+ written after a successful wire, so the real opt-out could never arm. The hook
53
+ now has its own `remind-hook-wired` marker, checked after the presence test and
54
+ written only on success. Regression pinned in `scripts/test_clients.js` (red
55
+ against 1.32.0: an orient-marked machine got no hook).
56
+
57
+ ## [1.14.0] - 2026-09-06
58
+
59
+ ### Added
60
+ - **F-046: the protocol reaches every turn (`remind`, UserPromptSubmit, wired by
61
+ default).** `orient` fires once at session start and decays; a session that
62
+ never loads the skill never had the protocol at all. Measured 2026-09-06: a
63
+ release ran against a `GUIDE_release.md` the session never consulted, because
64
+ `SKILL.md` -- where the duty is written -- had not been read. `remind` prints
65
+ ONE constant line at every prompt, and its first duty is that one: decide
66
+ whether the skill governs the work in front of you and, if it does, LOAD it
67
+ once. The carrier is kb's F-041 item B, LIFTED into the shared spine rather
68
+ than duplicated, so all three lenses share one machine; each lens declares its
69
+ own line in `set_profile(remind_line=...)`. Installing the package wires it
70
+ machine-wide on Claude Code alongside the orientation hook, never instead of
71
+ it; removing the hook entry is a standing opt-out. Per-turn cost disclosed and
72
+ accepted by the owner (`vision/rulings.md` r19, the "no ceremony ratchet"
73
+ Non-Goal's second door), and bounded to stay flat by a contract the new shared
74
+ `scripts/test_remind.py` guards: constant text, zero reads, one line under 500
75
+ characters, argv ignored whole, always exit 0.
76
+
77
+ ### Changed
78
+ - **`guides.md` said something false about code guides.** It claimed `stale`
79
+ works unchanged for `source_kind: code` because "the code-excerpt snapshot
80
+ drifts when the code changes". A snapshot is a frozen copy and never drifts:
81
+ freshness is NOT mechanized there, and the duty is the author's twice -- when
82
+ you MODIFY code a comprehension guide describes, and when you merely READ one
83
+ before trusting it. Measured 2026-09-06: the guided module had gained 388
84
+ lines and lost 71 across four commits with `stale` silent.
85
+
5
86
  ## [1.13.0] - 2026-09-05
6
87
 
7
88
  Spine-only release: `review.md` updated byte-identical across the family
package/README.md CHANGED
@@ -37,7 +37,7 @@ Deliberately absent: any per-node coverage or completion state. `gaps:` says wha
37
37
  - **Independent review, twice**: the design before it is implemented, the result before it is declared done — fresh-context subagent > one-shot run > a declared self-pass, 3 rounds max, one log line each, and a PASS is invalid on "found nothing".
38
38
  - **Question discipline**: a question is legal only when the agent searched first, names the search with its result, and names the decision it unblocks; otherwise it proceeds on a declared assumption, batched.
39
39
  - **Operative guides + agent-global KB**: distil user-provided indications into source-faithful `GUIDE_*.md` (`source_kind: document`) — verbatim snapshot plus hash, so drift is detected mechanically.
40
- - **Mechanical checks**: `check`, `validate`, `index`, `graph`, `corpus`, `claim-id`, `anchor`, `export`, `import`, `stale` (spine staleness plus `## claims` -- superseded-cited documents, expired `valid` windows, superseded derivation chains), plus the spine's `mark`/`gate`/`plan`/`orient`/`migrate`. The graph and corpus checks verify spans against the stored extraction, recompute every id, refuse cycles and unreachable nodes, and enforce `CONTESTED` symmetry.
40
+ - **Mechanical checks**: `check`, `validate`, `index`, `graph`, `corpus`, `claim-id`, `anchor`, `export`, `import`, `stale` (spine staleness plus `## claims` -- superseded-cited documents, expired `valid` windows, superseded derivation chains), plus the spine's `mark`/`benefit`/`gate`/`plan`/`orient`/`migrate`. `benefit` reports what the review gates have already caught, beside what the doctrine costs to read; it always exits 0 and carries no verdict. The graph and corpus checks verify spans against the stored extraction, recompute every id, refuse cycles and unreachable nodes, and enforce `CONTESTED` symmetry.
41
41
  - **Installed support files**: Claude, Codex, Gemini and Google Antigravity receive the full skill folder — `SKILL.md`, `templates.md`, `taxonomy.md`, `distillation.md`, `reconciliation.md`, `guides.md`, `vision.md`, `elicitation.md`, `review.md`, `dispatch.md`, `routing.md`, `ENFORCEMENT.md`, and the validator's two files, `scripts/sdlc_check.py` + `scripts/sdlc_core.py` (the core is the family's shared spine — copy both, or neither).
42
42
 
43
43
  ## Installation
@@ -115,3 +115,32 @@ Triage, the Vision Gate, the review gates, the guide router, question discipline
115
115
  Created by **Antonio Pinto** ([GitHub](https://github.com/Antoneeo)).
116
116
 
117
117
  MIT (c) 2026 Antonio Pinto.
118
+
119
+ ## Which model to run it on
120
+
121
+ The skill names **capability tiers**, never providers — a model name in doctrine
122
+ rots at the next release. The binding is yours to make, and the rule is one line:
123
+
124
+ > **A session's floor is the highest floor among the roles it performs itself.**
125
+
126
+ Authoring a governed artifact — the vision, the analysis, the use cases, the
127
+ threat model — is a **deep-tier** role: its output is judgement, and nothing
128
+ downstream scores it. So a session that will DESIGN wants your strongest model.
129
+ A session that only executes an already-approved plan, or does small maintenance,
130
+ can sit a tier lower. The cheapest tier is the wrong choice for the main session
131
+ whatever the task, because the failure there is not a wrong answer — it is
132
+ **silently not applying the process**: a triage never run, a router verdict
133
+ declared without the lookup, a gate nobody noticed. That failure is invisible to
134
+ every check in here.
135
+
136
+ **The reviewer's tier is not automatically yours.** On some clients a subagent
137
+ inherits the session's model; on others it takes one from its own definition, so
138
+ a strong session can be reviewed by a weak one — and a weak session can buy a
139
+ strong review. Set it deliberately; the
140
+ `model` column in the review log is where the choice becomes visible.
141
+
142
+ **Avoid one combination**: authoring below the floor AND reviewing below the floor
143
+ on the same unit. One disclosed weakness is a disclosed weakness; two is an
144
+ artifact nobody competent ever read. Where your client offers nothing better, the
145
+ review still runs and both facts are recorded — a disclosed worst case beats
146
+ skipping the review.
@@ -1,6 +1,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
- }
1
+ {
2
+ "name": "kb-agentic-skill",
3
+ "version": "1.15.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.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
+ {
2
+ "name": "@antoneeo/kb-agentic-skill",
3
+ "version": "1.15.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
+ }
@@ -102,7 +102,7 @@ Semantics: exit code 2 + message on stderr ⇒ the write is blocked and the mess
102
102
  - The paths in `--protected` are prefixes relative to the project root, separated by `;`.
103
103
  - `ai_docs/`, `tests/` and `test/` are always excluded from blocking.
104
104
  - The hook assumes the working directory is the project root (standard behavior of Claude Code hooks).
105
- - **Hybrid/devPNT projects**: add `--hybrid` to the gate command. Governed designs live in the devPNT DB, so the gate also unlocks when an approved E-TDD shadow (`ai_docs/solutions/SHADOW_*tdd*.md`, exported before implementation — see the SKILL.md shadow discipline) is present. Without the flag the gate would block legitimate governed work. The flag is deliberately explicit: never auto-detected.
105
+ - **Hybrid/devPNT projects**: add `--hybrid` to the gate command. Governed designs live in the devPNT DB, so the gate also unlocks when an approved E-TDD shadow (`ai_docs/solutions/SHADOW_*tdd*.md`, exported before implementation — in this package that clause is the whole statement of the duty; the sibling lenses keep it in their `hybrid.md`, which kb does not have) is present. Without the flag the gate would block legitimate governed work. The flag is deliberately explicit: never auto-detected.
106
106
 
107
107
  ## 4. SessionStart hook (orientation, recommended default)
108
108
 
@@ -202,20 +202,28 @@ Gemini CLI — wire the same command into its startup-hook mechanism if present;
202
202
  - **Hybrid/devPNT projects**: add `--hybrid` — the hook then appends a one-line pointer to run `devpnt_mcp_get_bootstrap` for the Master Plan / Knowledge Layer and does not replicate them; the filesystem orientation (router + handoff + README) still emits.
203
203
  - Like the CI gate (§2), if you copied `sdlc_check.py` into the repo, the hook references that copy — keep it current when you update the skill.
204
204
 
205
- ### Per-turn reminder: `remind` (UserPromptSubmit -- opt-in, NEVER a default)
206
-
207
- `orient` fires once, at session start; a long session drifts after it (a compaction,
208
- ten turns of other work -- the F-041 field report). `sdlc_check.py remind` prints ONE
209
- constant line -- the kb minimum: the triage levels, the topic-index recall trigger, the
210
- capture moment, the revision gesture -- for the client to inject at every prompt.
211
- Cost: 443 characters, ~75 tokens per prompt, which is exactly why `init` never wires it and never will by default: the
212
- per-turn cost is the project's choice. The line is constant and zero-read, so nothing
213
- repo-controlled can ride into the agent's context through it, and the vision's
214
- no-per-turn-graph-queries non-goal stays honored -- the line re-arms the
215
- entry-into-topic trigger; it never runs the reading itself.
216
-
217
- Claude Code -- in the project's `.claude/settings.json` (or `settings.local.json` when
218
- the validator path is machine-specific, same rule as the orientation hook above):
205
+ ### Per-turn reminder: `remind` (UserPromptSubmit -- wired by default)
206
+
207
+ `orient` fires once, at session start; a long session drifts after it, and a session
208
+ that never loads the skill never had the protocol at all. Measured (F-046, 2026-09-06):
209
+ a release ran against a `GUIDE_release.md` the session never consulted, because
210
+ `SKILL.md` -- where the duty is written -- had not been read. `sdlc_check.py remind` prints
211
+ ONE constant line at every prompt, and its first duty is that one: decide whether the
212
+ skill governs the work in front of you and, if it does, load it once.
213
+
214
+ Cost: 443 characters, ~75 tokens per prompt, paid on every turn including
215
+ trivial ones. That is admissible only because the owner accepted it explicitly
216
+ (`ai_docs/vision/rulings.md` r19, the "no ceremony ratchet" Non-Goal's second door) --
217
+ and the acceptance was for a FLAT cost. Hence the contract, guarded by
218
+ `scripts/test_remind.py`: the line is **constant and reads nothing** (so nothing repo-
219
+ or session-controlled rides into the agent's context through it, and the cost cannot
220
+ grow with the session), it is **one line under 500 characters**, and it **can never
221
+ break a prompt** (argv ignored whole, always exit 0). A trivial turn pays a yes/no
222
+ judgement, never a load.
223
+
224
+ Installing the package wires it machine-wide on Claude Code, alongside the orientation
225
+ hook and never instead of it; **removing that hook entry is a standing opt-out.** To
226
+ wire it by hand:
219
227
 
220
228
  ```json
221
229
  {
@@ -225,7 +233,7 @@ the validator path is machine-specific, same rule as the orientation hook above)
225
233
  "hooks": [
226
234
  {
227
235
  "type": "command",
228
- "command": "python \"C:\\Users\\<user>\\.claude\\skills\\kb-agentic\\scripts\\sdlc_check.py\" remind"
236
+ "command": "python \"C:\Users\<user>\.claude\skills\kb-agentic\scripts\sdlc_check.py\" remind"
229
237
  }
230
238
  ]
231
239
  }
@@ -253,3 +261,12 @@ It aggregates the three test files (`test_plan.py` + `test_session_start.py` + `
253
261
  **Optional CI** (same shape as §2, not mandatory): add a `run:` step invoking the `unittest discover` command above.
254
262
 
255
263
  **T10 note:** if you copied `sdlc_check.py` and the `test_*.py` battery into the repo for CI, that copy is authoritative — keep it current when you update the skill.
264
+
265
+ ## `benefit` is a report, never a CI gate
266
+
267
+ `sdlc_check.py benefit` reports what the review gates caught and what the
268
+ doctrine costs to read. It always exits 0 and emits no warning: **never wire
269
+ it into CI**. It is the criterion by which future units are judged, and a
270
+ measurement that can fail a build becomes a target -- a targeted measurement
271
+ stops measuring. Run it when deciding whether a proposed rule is worth its
272
+ ceremony, not on every push.