@erclx/aitk 0.77.1 → 0.78.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "aitk",
3
3
  "description": "Automated governance, versioning, and discovery tools for Claude Code.",
4
- "version": "0.77.1",
4
+ "version": "0.78.1",
5
5
  "author": {
6
6
  "name": "Eric Le",
7
7
  "url": "https://github.com/erclx"
@@ -81,6 +81,8 @@ Before a handoff, the orchestrator checks the plan against the tree rather than
81
81
 
82
82
  The plan's shape is fixed by `.claude/standards/plan.md`: the section list, the filename, the lifecycle, and the contract its questions keep. Every question carries a `- Suggested:` line and an empty `- Answer:` slot, and a blank answer accepts the suggestion at execution time. That default is what makes a plan decision-ready in one pass, and it is the opposite of the contract an intake folder keeps, where an empty slot means nobody reached the item.
83
83
 
84
+ An execution that picks other than the suggestion rewrites the `- Suggested:` line as `overridden at execution to <pick>,` followed by the measurement that moved it, and leaves the slot blank. That fixed phrase is how a reader of the archived plan tells an override from a suggestion the execution accepted, since an authored suggestion often carries a number of its own. The same deviation takes one line in the open task's `## Findings`, which is the register that survives the plan being archived. A deviation from a question somebody already answered goes back to whoever answered it instead, since a filled slot is a decision already made.
85
+
84
86
  `aitk records validate plans` reports where a plan and that standard disagree: a filename that is not `feature-<slug>.md`, a missing required section, a files-to-touch entry naming no file, and a question carrying a suggestion with no answer slot. The same verb takes `groundwork`, `intake`, and `memory`, which are governed the same way and were unreachable for the same reason. Nothing fires it automatically, because all four folders are gitignored and every check the repository runs reads changed files from git. It reports and never writes, since the folders are per-machine scratch with no history to recover a wrong repair from.
85
87
 
86
88
  A plan that ships is archived, never deleted. `aitk:claude-docs` moves it to `.claude/plans-archive/` and retargets the task file's `Plan:` line at the new location, so a completed task still leads to the reasoning behind it. Both folders are gitignored, which is why a deleted plan had no recovery path. A plan cited by more than one task stays put until the last of them closes, since moving it early would strand every other pointer.
@@ -11,6 +11,7 @@ paths:
11
11
 
12
12
  - Never fill an `- Answer:` slot on behalf of the person who owns it. A blank slot accepts the suggestion at execution time.
13
13
  - Never ship a question without a `- Suggested:` line. Write `- Suggested: needs your call, <why>` where the answer turns on preference.
14
+ - Rewrite the `- Suggested:` line as `overridden at execution to <pick>,` plus the measurement when execution deviates from an unanswered question, leaving the slot blank. Put the same deviation in one line under the open task's `## Findings`.
14
15
 
15
16
  ## Archiving
16
17
 
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@erclx/aitk",
3
3
  "type": "module",
4
- "version": "0.77.1",
4
+ "version": "0.78.1",
5
5
  "description": "Infrastructure and quality tooling for developer workflows",
6
6
  "license": "MIT",
7
7
  "bin": {
@@ -15,4 +15,10 @@ Cover in order:
15
15
  - Alignment and spacing rules
16
16
  - Export settings
17
17
 
18
- Use exact values from the spec. Do not restate design rationale. Use Title Case for all layer and frame names. Use Figma terminology throughout, not code or CSS equivalents. Reuse existing frames or components from the same Figma document by name instead of rebuilding from scratch.
18
+ Throughout:
19
+
20
+ - Use exact values from the spec
21
+ - Do not restate design rationale
22
+ - Use Title Case for all layer and frame names
23
+ - Use Figma terminology throughout, not code or CSS equivalents
24
+ - Reuse existing frames or components from the same Figma document by name instead of rebuilding from scratch
@@ -32,8 +32,21 @@ Does not govern:
32
32
 
33
33
  Use `## Overview`, `## Key technical decisions` with one named H3 per decision, and `## Risks / open questions`. Name each decision and give the reasoning, especially for non-obvious choices. Skip entries where the rationale is self-evident.
34
34
 
35
+ ## Verification anchors
36
+
37
+ A decision's reasoning stays correct while the numbers it cites move. The anchor records what a measured claim was read against, so a reader can tell a number that was checked and held from one nobody has looked at since.
38
+
39
+ - Close a decision entry whose reasoning cites a measured number with a trailing sentence naming the short commit SHA and the ISO date that number was read: `Measured at <short-sha> on <YYYY-MM-DD>.`
40
+ - Anchor on the number alone. A decision citing none takes no anchor whatever its reasoning rests on, because a marker over a claim nobody can re-measure is one no reader can falsify.
41
+ - Anchor a decision when writing it or when amending its reasoning. Leave an entry written before the rule unanchored rather than dating it by blame, which is archaeology for a marker nothing reads back.
42
+ - Read an absent anchor as unchecked rather than as current. On an entry citing no number there is nothing to check. On one citing a number the number is due a read.
43
+ - Do not edit a claim in the pass that first anchors it. The anchor states what the claim was measured against, so changing both at once leaves nothing to check the anchor against.
44
+ - Refresh the anchor whenever the number is re-read, whether or not it moved. A confirmed number and an unread one are the same text without the date.
45
+
35
46
  ## Template
36
47
 
48
+ The anchor sentence closes a decision whose reasoning cites a measured number and is absent from one that cites none.
49
+
37
50
  ```markdown
38
51
  # Architecture
39
52
 
@@ -43,7 +56,7 @@ Use `## Overview`, `## Key technical decisions` with one named H3 per decision,
43
56
 
44
57
  ### Decision name
45
58
 
46
- Reasoning and tradeoffs.
59
+ Reasoning and tradeoffs, carrying the measured number the choice rested on. Measured at <short-sha> on <YYYY-MM-DD>.
47
60
 
48
61
  ## Risks / open questions
49
62
  ```
package/standards/plan.md CHANGED
@@ -86,20 +86,33 @@ Every question carries a `- Suggested:` line and an empty `- Answer:` slot below
86
86
  - Answer:
87
87
  ```
88
88
 
89
+ An execution that deviates rewrites the suggestion into the form below, leaving the slot as it found it.
90
+
91
+ ```markdown
92
+ 1. <question>
93
+ - Suggested: overridden at execution to <pick>, <the measurement that moved it>
94
+ - Answer:
95
+ ```
96
+
89
97
  - A blank `- Answer:` means accept the suggestion at execution time. That default is what makes the plan decision-ready in one pass, with no separate round to collect answers.
90
98
  - Never ship a question without a suggestion. A bare question defers the judgment the plan exists to supply, and it arrives at the executing session as a stop.
91
99
  - State the pick in one line with its reason or its main tradeoff. List an alternative only where it changes the pick.
92
100
  - Write `- Suggested: needs your call, <why>` where the answer turns on preference rather than on a technical default. Fabricating a default there hides an open question behind an accepted answer.
93
101
  - Never fill an `- Answer:` slot on behalf of the person who owns it. Recording the pick as the suggestion is what the suggestion line is for.
102
+ - Rewrite the `- Suggested:` line to the pick execution made when it deviates from an unanswered question, and leave the slot blank. The prohibition above reaches the answer line alone, so the suggestion line is where a deviation goes.
103
+ - Open the rewritten text with `overridden at execution to <pick>,` and follow it with the measurement that moved the pick. The phrase is fixed, because a suggestion carrying a number is the ordinary shape of an authored one and says nothing about who wrote it.
104
+ - Take a deviation from an answered question back to whoever answered it rather than rewriting either line. A filled slot is a decision already made, and a suggestion rewritten under one leaves the plan holding two picks with no default resolving them.
94
105
  - Answer in place when a question is settled in conversation, so the file and the decision do not disagree.
95
106
 
107
+ The fixed phrase is what a later reader tells an override by, and the measurement alone is not, since an authored suggestion routinely carries a number of its own and a reader meeting one learns nothing about who put it there. The plan is archived at ship, so the same deviation takes one line in the open task's `## Findings` naming what shipped. That is one fact in two registers, the plan holding why the pick moved and the task holding what the tree now has, rather than two records to keep in step.
108
+
96
109
  This contract inverts the one an intake folder keeps, where an empty slot means unread and acceptance is typed out. A plan is written and read in one sitting with every question already surfaced, so silence is a usable default here and is not one there. Both files state the inversion, since a contract read on only one side of a boundary is the one that gets applied to the wrong document.
97
110
 
98
111
  ## Lifecycle
99
112
 
100
113
  - Write the plan before implementation starts, and treat it as the scope of the run that executes it.
101
114
  - Keep every plan at one root. A plan copied into each parallel working tree forks, and the copies answer the same question differently.
102
- - Amend the plan in place when a decision changes mid-flight. Do not append a second passage narrating the change, which leaves a reader to work out which of two answers is current.
115
+ - Amend the plan in place when a decision changes mid-flight. Do not append a second passage narrating the change, which leaves a reader to work out which of two answers is current. An execution-time deviation from a suggestion is one such amendment, and the contract above fixes which line takes it.
103
116
  - Move the plan to `.claude/plans-archive/` when the work it describes ships. Never delete it, because the plan is where the rejected alternative is written down and nothing else records it.
104
117
  - Write the plan in the same session that opens the task it serves. The session executing it later inherits reasoning it would otherwise re-derive.
105
118
 
@@ -109,6 +122,7 @@ This contract inverts the one an intake folder keeps, where an empty slot means
109
122
  - **The bundled plan.** Two concerns under one slug cannot be split later without rewriting both halves.
110
123
  - **The question with no suggestion.** It reads as thoroughness and lands as a blocked run.
111
124
  - **The answer filled in by the author.** A slot holding the writer's own pick destroys the only signal that anyone else agreed.
125
+ - **The deviation recorded off the plan.** The reasoning lands in a pull request description no later reader of the plan opens, and the archived plan reads as though its suggestion held.
112
126
  - **The count carried in.** A figure quoted from an earlier session survives the change that invalidated it, and the scope built on it is quietly wrong.
113
127
  - **The plan deleted on ship.** The considered-and-dropped reasoning goes with it, and the next session re-proposes what this one rejected.
114
128
 
@@ -79,9 +79,9 @@ description: One line on what the board covers
79
79
 
80
80
  ## Needs a plan
81
81
 
82
- | Task | Waiting on |
83
- | ------------------------------- | --------------------------------------- |
84
- | [vXX.Y <slug>](vXX.Y-<slug>.md) | <the collision or the task it waits on> |
82
+ | Task | Waiting on |
83
+ | ------------------------------- | ---------------------------------------------- |
84
+ | [vXX.Y <slug>](vXX.Y-<slug>.md) | <what the task needs before it can be planned> |
85
85
  ```
86
86
 
87
87
  The tests live here so the board does not carry them. Writing them as a sentence under each heading produces the paragraph the rule above deletes, and a criterion with no home gets restated from memory every time the board is touched.
@@ -171,6 +171,7 @@ The line is what lets a merge close its own task. Every merge on `main` is a squ
171
171
  - Task entries describing observable behavior, one outcome per line
172
172
  - A test strategy line naming the mechanism and what it verifies
173
173
  - Findings stating what constrains the task, including blockers and dependencies
174
+ - A deviation from the plan's suggestion, in one line naming what moved the pick. The plan is archived at ship and holds the reasoning, so this register carries what shipped.
174
175
 
175
176
  ## What does not go in
176
177