@antoneeo/kb-agentic-skill 1.4.5 → 1.4.7

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,27 @@
2
2
 
3
3
  Every significant change to this skill is recorded here.
4
4
 
5
+ ## [1.4.7] - 2026-08-06
6
+
7
+ ### Fixed
8
+ - **Shared-spine sync: the scoped re-review contradicted `dispatch.md` (ACTIVE in this lens).**
9
+ `dispatch.md` said "exactly three review touches per task, never a loop" while `review.md`
10
+ required every review-driven correction to be re-reviewed. Reconciled: the scoped re-review is
11
+ a round inside slot 2 or 3, never a fourth slot. Also in the shared `review.md`: an unproven or
12
+ stale completion claim is now a reviewer finding; a PASS carrying findings is provisional until
13
+ its corrections pass a round; the single log row keeps the round-1 verdict (`FAIL → PASS`).
14
+ Found by the code lens's late design review of F-034.
15
+
16
+ ## [1.4.6] - 2026-08-06
17
+
18
+ ### Changed
19
+ - **Shared-spine sync: review-driven corrections + reviewer honesty (ACTIVE in this lens).**
20
+ The shared `review.md` gains the scoped re-review discipline — a fix made in response to a
21
+ finding is unreviewed work and gets a correction-scoped re-review with per-finding verdicts
22
+ before PASS — plus the `CANNOT VERIFY` reporting duty and the no-pre-judging rule. Unlike
23
+ prior spine syncs these are NOT inert here: reviews of knowledge artifacts inherit the
24
+ correction discipline directly.
25
+
5
26
  ## [1.4.5] - 2026-08-06
6
27
 
7
28
  ### Changed
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "kb-agentic-skill",
3
- "version": "1.4.5",
3
+ "version": "1.4.7",
4
4
  "description": "Knowledge-Base & Document-First protocol with risk triage, Vision governance, signal distillation and optional devPNT integration.",
5
5
  "author": "Antonio Pinto (https://github.com/Antoneeo)"
6
6
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@antoneeo/kb-agentic-skill",
3
- "version": "1.4.5",
3
+ "version": "1.4.7",
4
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
5
  "keywords": [
6
6
  "claude-code",
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: kb-agentic
3
- version: 1.4.5
3
+ version: 1.4.7
4
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 and knowledge management.
5
5
  author: Antonio Pinto (https://github.com/Antoneeo)
6
6
  copyright: (c) 2026 Antonio Pinto
@@ -1,87 +1,96 @@
1
- # Subagent Execution Discipline
2
-
3
- Opt-in orchestration for L3 work with an approved design: the orchestrator
4
- drives a `PLAN_[feature].md` through subagents instead of implementing every
5
- task in the same session. Default stays same-session; this is an escalation,
6
- never a requirement.
7
-
8
- ## Trigger
9
-
10
- Only for L3 (an approved E-TDD in Hybrid, or an ANALYSIS Action Plan in
11
- Standalone). Never for L1/L2 — the plan/ledger machinery is overhead a small
12
- change does not need. The plan is always `derived-from` the accepted design:
13
- it is never independently authored, exactly like an E-TDD is never authored
14
- without an E-ISP.
15
-
16
- ## The loop
17
-
18
- 1. `sdlc_check.py plan validate PLAN_[feature].md` — zero-execution schema +
19
- confinement + ledger cross-check. Non-zero exit = **no dispatch**. This is
20
- the hard gate: "no valid plan, no dispatch."
21
- 2. For each task, in plan order:
22
- - Read the task's status from the sidecar ledger
23
- (`PLAN_[feature].ledger.json`). `status: done` (exact sentinel) → skip,
24
- never re-dispatch. Anything else (pending, failed, missing, or a
25
- corrupt-but-parseable entry) → treat as pending and dispatch.
26
- - `sdlc_check.py plan brief PLAN_[feature].md --task <id>` — prints the
27
- task block, the `produces` of prior-order tasks (interfaces), and
28
- `guides` pointers (paths, never pasted content) to stdout.
29
- - Spawn the subagent with that brief as its entire context window.
30
- - Run `task.verify` out of band (the orchestrator executes it — the
31
- validator only ever prints it, never runs it) plus the one-shot review
32
- below.
33
- - Write `{status, verify_result, timestamp}` back to the ledger. The
34
- validator never writes the ledger — single-writer, orchestrator-owned.
35
-
36
- **Guide consumption under dispatch.** Selecting each task's `guides` field IS the
37
- consult trigger (`guides.md` §0) applied at plan-authoring time: the orchestrator
38
- runs the router lookup (project router `ai_docs/reference/INDEX.md` + the agent-KB
39
- router) when populating `guides`. A dispatched context-free subagent does **NOT**
40
- run its own router consult — it reads the guide pointers handed to it in the
41
- brief. The router verdict (Rule Zero) is therefore declared ONCE, by the
42
- orchestrator, when it authors the plan; a dispatched subagent does not declare
43
- one. (Proactive guide-creation stays at closure — the same broad final pass
44
- below — so it needs no separate dispatch hook.)
45
-
46
- ## Model tiers (client-relative, no provider names)
47
-
48
- - Default dispatch: **economy** implementer tier.
49
- - After **two** consecutive `verify_result: fail` on the same task: escalate
50
- to the **deep** tier for the retry (ADR 2026-07-02). Do not escalate on the
51
- first failure — a single fail is often a brief or environment issue, not a
52
- capability gap.
53
-
54
- ## Review slots — one-shot, not iterative
55
-
56
- Exactly three review touches per task, never a loop:
57
-
58
- 1. Inline self-review by the implementer subagent before it reports done
59
- (the standard critical-review pass, not a separate call).
60
- 2. One reviewer pass per task (Hybrid: reuse the devPNT code-review gate;
61
- Standalone: the `review.md` discipline).
62
- 3. One broad final pass over the whole plan at closure, after all tasks are
63
- DONE — catches cross-task drift a per-task review cannot see.
64
-
65
- If a review FAILs, fix and re-run `verify` — that is a normal loop iteration
66
- via the ledger's fail path, not an extra review slot.
67
-
68
- ## Ledger protocol summary
69
-
70
- Read skip-if-done dispatch-if-pending write. The ledger is the only
71
- memory the loop needs across sessions or context compaction: a resumed
72
- orchestrator re-reads it and picks up exactly where it left off, never
73
- re-running a DONE task.
74
-
75
- ## Degradation
76
-
77
- No subagent-spawning tool available → the orchestrator runs each task in the
78
- same session, against the same plan and ledger, with the same one-shot review
79
- slots. No capability is lost, only the parallelism/isolation subagents would
80
- have added.
81
-
82
- ## Hybrid note
83
-
84
- The plan's `derived-from` points at the accepted E-TDD document key. Per-task
85
- review reuses the devPNT independent reviewers (§4.6 code review gate) rather
86
- than restating review doctrine see `review.md` for the single definition
87
- both modes share.
1
+ # Subagent Execution Discipline
2
+
3
+ Opt-in orchestration for L3 work with an approved design: the orchestrator
4
+ drives a `PLAN_[feature].md` through subagents instead of implementing every
5
+ task in the same session. Default stays same-session; this is an escalation,
6
+ never a requirement.
7
+
8
+ ## Trigger
9
+
10
+ Only for L3 (an approved E-TDD in Hybrid, or an ANALYSIS Action Plan in
11
+ Standalone). Never for L1/L2 — the plan/ledger machinery is overhead a small
12
+ change does not need. The plan is always `derived-from` the accepted design:
13
+ it is never independently authored, exactly like an E-TDD is never authored
14
+ without an E-ISP.
15
+
16
+ ## The loop
17
+
18
+ 1. `sdlc_check.py plan validate PLAN_[feature].md` — zero-execution schema +
19
+ confinement + ledger cross-check. Non-zero exit = **no dispatch**. This is
20
+ the hard gate: "no valid plan, no dispatch."
21
+ 2. For each task, in plan order:
22
+ - Read the task's status from the sidecar ledger
23
+ (`PLAN_[feature].ledger.json`). `status: done` (exact sentinel) → skip,
24
+ never re-dispatch. Anything else (pending, failed, missing, or a
25
+ corrupt-but-parseable entry) → treat as pending and dispatch.
26
+ - `sdlc_check.py plan brief PLAN_[feature].md --task <id>` — prints the
27
+ task block, the `produces` of prior-order tasks (interfaces), and
28
+ `guides` pointers (paths, never pasted content) to stdout.
29
+ - Spawn the subagent with that brief as its entire context window.
30
+ - Run `task.verify` out of band (the orchestrator executes it — the
31
+ validator only ever prints it, never runs it) plus the one-shot review
32
+ below.
33
+ - Write `{status, verify_result, timestamp}` back to the ledger. The
34
+ validator never writes the ledger — single-writer, orchestrator-owned.
35
+
36
+ **Guide consumption under dispatch.** Selecting each task's `guides` field IS the
37
+ consult trigger (`guides.md` §0) applied at plan-authoring time: the orchestrator
38
+ runs the router lookup (project router `ai_docs/reference/INDEX.md` + the agent-KB
39
+ router) when populating `guides`. A dispatched context-free subagent does **NOT**
40
+ run its own router consult — it reads the guide pointers handed to it in the
41
+ brief. The router verdict (Rule Zero) is therefore declared ONCE, by the
42
+ orchestrator, when it authors the plan; a dispatched subagent does not declare
43
+ one. (Proactive guide-creation stays at closure — the same broad final pass
44
+ below — so it needs no separate dispatch hook.)
45
+
46
+ ## Model tiers (client-relative, no provider names)
47
+
48
+ - Default dispatch: **economy** implementer tier.
49
+ - After **two** consecutive `verify_result: fail` on the same task: escalate
50
+ to the **deep** tier for the retry (ADR 2026-07-02). Do not escalate on the
51
+ first failure — a single fail is often a brief or environment issue, not a
52
+ capability gap.
53
+
54
+ ## Review slots — one-shot, not iterative
55
+
56
+ Exactly three review touches per task, never a loop:
57
+
58
+ 1. Inline self-review by the implementer subagent before it reports done
59
+ (the standard critical-review pass, not a separate call).
60
+ 2. One reviewer pass per task (Hybrid: reuse the devPNT code-review gate;
61
+ Standalone: the `review.md` discipline).
62
+ 3. One broad final pass over the whole plan at closure, after all tasks are
63
+ DONE — catches cross-task drift a per-task review cannot see.
64
+
65
+ If a review FAILs, fix and re-run `verify` — that is a normal loop iteration
66
+ via the ledger's fail path, not an extra review slot.
67
+
68
+ **The scoped re-review is a round INSIDE slot 2 or 3, never a fourth slot.**
69
+ `review.md` §Receiving requires every review-driven correction to be
70
+ re-reviewed against the correction alone that round belongs to the slot whose
71
+ findings caused it, and is bounded by the same cap of 3 rounds. "Never a loop"
72
+ bounds the SLOTS (no unbounded re-reviewing of a task), not the rounds inside
73
+ one slot: a fix nobody looked at is the defect the round exists to catch. Slot 1
74
+ is the implementer's own pass, not an independent review, so its fixes carry no
75
+ re-review round. The ledger records the round on the task's fail path as usual.
76
+
77
+ ## Ledger protocol summary
78
+
79
+ Read skip-if-done dispatch-if-pending write. The ledger is the only
80
+ memory the loop needs across sessions or context compaction: a resumed
81
+ orchestrator re-reads it and picks up exactly where it left off, never
82
+ re-running a DONE task.
83
+
84
+ ## Degradation
85
+
86
+ No subagent-spawning tool available the orchestrator runs each task in the
87
+ same session, against the same plan and ledger, with the same one-shot review
88
+ slots. No capability is lost, only the parallelism/isolation subagents would
89
+ have added.
90
+
91
+ ## Hybrid note
92
+
93
+ The plan's `derived-from` points at the accepted E-TDD document key. Per-task
94
+ review reuses the devPNT independent reviewers (§4.6 code review gate) rather
95
+ than restating review doctrine — see `review.md` for the single definition
96
+ both modes share.
@@ -99,6 +99,12 @@ conversation instead of reviewing the change itself. Say which finding
99
99
  classes you want covered (correctness, security, conformance to the design,
100
100
  test coverage) if the default scope is not obvious.
101
101
 
102
+ Never pre-judge findings for the reviewer: do not instruct them to ignore or
103
+ not flag a specific issue ("don't treat X as a defect", "at most minor"). If
104
+ you believe a finding would be a false positive, let the reviewer raise it and
105
+ resolve it with evidence in §Receiving — pre-judging is usually the requester
106
+ sparing themselves a round.
107
+
102
108
  ## Receiving
103
109
 
104
110
  **MUST answer findings one by one — fix, or justify with evidence; why:
@@ -111,6 +117,28 @@ resolve a disagreement by rewording the finding until it goes away. When the
111
117
  project keeps a `REVIEW_LOG` (or equivalent), log the outcome of each
112
118
  finding there.
113
119
 
120
+ ### Review-driven corrections (scoped re-review)
121
+
122
+ A fix made in response to a finding is new, unreviewed work — stopping after
123
+ "I fixed it" ships the one version nobody reviewed. Every review-driven change
124
+ therefore gets a **scoped re-review** before the review can PASS: hand the
125
+ re-reviewer the original findings and ONLY the correction (the fix diff/range
126
+ for code, the amended sections for a document), and require a per-finding
127
+ verdict — `ADDRESSED`, `NOT ADDRESSED`, or `CONTESTED` with evidence. **A PASS
128
+ that carried findings is provisional until its corrections pass that round** —
129
+ the commonest real case is a PASS with non-blocking findings the author then
130
+ fixes, and stopping there ships precisely the unreviewed version this rule
131
+ exists to catch. The re-review also checks the correction itself for new
132
+ blocker-level breakage — and nothing else: out-of-scope observations become separately
133
+ recorded findings, never an extension of the loop. Expect two rounds as the
134
+ norm, not the exception — round 1 finds, round 2 verifies the fixes — inside
135
+ the same cap of 3 (§When a review is due). One logical review stays ONE
136
+ REVIEW_LOG row — a scoped re-review is a round, not a new review — with the
137
+ rounds narrated in the row's notes and **the verdict column carrying the
138
+ round-1 verdict and the final one (`FAIL → PASS`), never the final one alone**:
139
+ a first-round FAIL is the highest-value evidence the gate produces (§When a
140
+ review is due), and collapsing it into a bare `PASS` erases exactly that.
141
+
114
142
  ## Reviewing
115
143
 
116
144
  When you are the reviewer:
@@ -123,6 +151,21 @@ When you are the reviewer:
123
151
  (see `## Requesting`).
124
152
  - Cite evidence as `file:line` for every finding — a finding without a
125
153
  location is not actionable.
154
+ - **An unproven completion claim is a finding** (closure reviews, on the diff).
155
+ When the work under review states or implies that something passes, is fixed,
156
+ is clean or is complete, the evidence must be present and must post-date the
157
+ final relevant change; a claim resting on a stale run, on a narrower check
158
+ than the claim needs, or on a delegated agent's own report rather than the
159
+ diff, is a finding — name the claim and what would prove it. This is the
160
+ enforcement point of the author-side rule in `SKILL.md` §5 Closure, and the
161
+ reason a requester hands it over is that the reviewer cannot cite a rule it
162
+ was never given.
163
+ - **Say what you could NOT verify.** When a claim in the artifact cannot be
164
+ verified from the inputs you were given (it lives in unchanged code, another
165
+ document, or an environment you cannot reach), report it as a
166
+ `CANNOT VERIFY` item instead of silently passing it — the requester holds
167
+ the context to resolve it, and must do so before closing. A PASS that
168
+ silently skipped unverifiable claims is review theater.
126
169
  - Keep severity honest: do not inflate a style preference to a blocker, and
127
170
  do not soften a real correctness or security issue to a nit.
128
171
  - No praise padding. A review reports problems and their fixes, not a
@@ -447,8 +447,8 @@ adds values to the existing columns rather than a second table.
447
447
 
448
448
  | date | doc_key | tier | reviewer | findings_raised | findings_real | verdict | revise_rounds |
449
449
  |---|---|---|---|---|---|---|---|
450
- | 2026-06-11 | ANALYSIS_login_sso.md | design | subagent (opus, fresh ctx) | 4 | 3 | PASS | 2 |
451
- | 2026-06-12 | diff feature/sso-login | closure | self-pass (declared; no subagent facility) | 2 | 2 | PASS | 1 |
450
+ | 2026-06-11 | ANALYSIS_login_sso.md | design | subagent (opus, fresh ctx) | 4 | 3 | FAIL → PASS | 2 |
451
+ | 2026-06-12 | diff feature/sso-login | closure | self-pass (declared; no subagent facility) | 2 | 2 | PASS with findings → corrections re-reviewed, PASS | 2 |
452
452
 
453
453
  ## Notes
454
454
  <!-- One short paragraph per review that found something worth remembering: what
@@ -467,6 +467,13 @@ records the realization actually used — fresh subagent, one-shot client run, o
467
467
  honest; writing nothing, or implying independence you did not have, is the failure
468
468
  this column exists to prevent. `findings_real` is how many raised findings survived
469
469
  triage: over time it is the only evidence of whether the gate earns its cost.
470
+ `revise_rounds` counts **review rounds**, not fix cycles: the first review is round 1
471
+ and every scoped re-review adds one. A review that produced findings which were then
472
+ corrected therefore always reads ≥ 2 — the corrections are unreviewed work until a
473
+ round verifies them (`review.md` §Receiving) — and 3 is the ceiling, past which the
474
+ residue goes to the user rather than into a fourth round. `verdict` carries the
475
+ round-1 verdict and the final one when they differ (`FAIL → PASS`): collapsing a
476
+ first-round FAIL into a bare `PASS` erases the evidence this log exists to keep.
470
477
  Concurrent reviews: `init` writes a `.gitattributes` stanza giving this file
471
478
  `merge=union` — a **built-in** driver (no per-clone `git config`, unlike
472
479
  `merge=ours`, which silently does nothing until every clone configures it).