@erclx/aitk 3.38.1 → 3.39.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.
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "aitk",
3
3
  "description": "Automated governance, versioning, and discovery tools for Claude Code.",
4
- "version": "3.38.1",
4
+ "version": "3.39.0",
5
5
  "author": {
6
6
  "name": "Eric Le",
7
7
  "url": "https://github.com/erclx"
@@ -35,6 +35,8 @@ Every one of them therefore has to ship inside the skill, the four covering the
35
35
 
36
36
  The dispatch's return leg is unplaced for the same reason. A reply reaches this session as a message and settles a finding, corrects which session holds which branch, or names a gate a worker's edits pass through, and reading it is the whole of what happens to it. Both sessions then end, so the half that belonged on the pull request never reaches it and the half that belonged on the board is rediscovered by whoever needs it next.
37
37
 
38
+ Cost never enters the decision to widen a wave. The rule weighing how many tracks to open measures collision and review attention, and both describe what a worker writes rather than what the loop spends. Claude Code delivers a message from another session as a fresh turn carrying the whole accumulated context, and a recurring poll bills that same window on its own interval, so a wave's spend tracks this session's context rather than the work coming back. The one setting that bounds it reads as available to whoever finds it, and the two values that would bound it break the handback the loop runs on.
39
+
38
40
  The session also records nothing of what it learns. Both other callers of memory capture are ship-chain skills and this one never ships, so the session taking every operator correction is the session with no moment that writes one down. Hanging that moment on the merge sweep answers it and bills the operator a capture pass per batch of merges while nothing is being built, which is a cost paid on the days shipping is fastest.
39
41
 
40
42
  ## Must
@@ -43,6 +45,7 @@ The session also records nothing of what it learns. Both other callers of memory
43
45
  - Report the state of play so the human knows what to launch, what to review, and what to merge
44
46
  - Verify a plan against the tree before handing it over, counting the sites it claims and opening the files it describes
45
47
  - List a candidate's file set against every track in flight, and serialize when the sets are not disjoint
48
+ - State what a wave costs in inbound turns beside the collision rule, and name the control that bounds it together with the reason it stays unset, since a lever recorded without its conclusion reads as available to set
46
49
  - Place every finding a merged pull request produced against the surface that owns it
47
50
  - Place what the return leg carries by what it changes, sending an answer that settles a finding onto the pull request and one that corrects this session's model of the world to the task owning that surface, since neither becomes a record by being read
48
51
  - Keep one planned, non-conflicting task in reserve beyond what is running
@@ -200,6 +200,21 @@ properly and stop when you cannot. An operator can also cap this session's
200
200
  workers by saying so, and a spoken cap binds for that session rather than
201
201
  standing as a number in a file.
202
202
 
203
+ Inbound turns are the third input to that judgment. Claude Code delivers a
204
+ message from another session as a new turn whenever this one sits idle, and the
205
+ turn carries the whole accumulated context rather than the few lines the worker
206
+ sent, so one handback from a wide wave costs more than the same handback from a
207
+ narrow one. A recurring review poll bills that window again on every interval it
208
+ fires. Weigh the spend before widening, since it lands on this session's context
209
+ and never on the worker's.
210
+
211
+ `crossSessionInbound` is the control, on an `accept`, `hold`, `refuse` ladder,
212
+ and it is recorded here as deliberately not pulled. `hold` and `refuse` are the
213
+ two values that bound the cost, and both break the handback this loop runs on,
214
+ since a held message reaches nobody until a later `accept` applies and a refused
215
+ one is dropped outright. `accept` bounds nothing. Read the ladder before turning
216
+ concurrency up rather than after, and leave it unset.
217
+
203
218
  Serialize any track that touches a shared wiring seam with another in flight, and
204
219
  serialize one whose sets are disjoint when a stated reason still puts it behind
205
220
  another, since two tracks interact in ways no file-set comparison reads. One
@@ -37,7 +37,7 @@ The set is closed rather than derived, so widening it is a deliberate change to
37
37
 
38
38
  A sentence has to carry an assertion verb (`loads`, `ships`, `carries`, `holds`, `counts`, `totals`, `documents`, `declares`, `installs`, `lists`, `contains`, `comprises`, `authors`), the quantifier `all`, or an article (`the`, `a`, `an`) immediately ahead of the number, which is immediately ahead of the catalog noun, with one optional qualifying word between the number and the noun (`sixty-one shipped skills`). The number reads either as digits or as a spelled-out cardinal through ninety-nine, since this corpus states a catalog size in words as often as in digits.
39
39
 
40
- Nothing stands between the trigger and the number, which is the rule an author writing a new count has to know. It separates `the toolkit authors 69 rules` and `took all 69 rules`, both read, from `a domain of 55 skills` and `denominator of sixty-one shipped skills`, neither of them read. A figure meant as a past state takes a date in the same sentence instead, which reads the sentence past whatever its shape.
40
+ Nothing stands between the trigger and the number, which is the rule an author writing a new count has to know. It separates `the toolkit authors 70 rules` and `took all 70 rules`, both read, from `a domain of 55 skills` and `denominator of sixty-one shipped skills`, neither of them read. A figure meant as a past state takes a date in the same sentence instead, which reads the sentence past whatever its shape.
41
41
 
42
42
  ## How the trigger set grew
43
43
 
@@ -45,7 +45,7 @@ The verb gate is not the first design tried. A bare number next to a catalog nou
45
45
 
46
46
  The article half was added after a first review of the shipped design found a live miss: `.claude/context/development/gates.md` stated a stale audit total while the tree held 20, and the verb gate never reached it, since that sentence puts its verb after the noun rather than ahead of the number. Widening the trigger set to admit an article ahead of the number closed that gap.
47
47
 
48
- The quantifier `all` and the verb `authors` joined on the same evidence, two more live misses failing only the trigger test. Allowing words to stand between the trigger and the number was the other candidate, measured and declined: at widths of one, two, and three it reached 77, 104, and 132 sentences against a baseline of 65, missed `took all 69 rules` at every width, and reached `the toolkit authors 69 rules` only at a width admitting the indirect-noun shape below. The two words reach both at 75 sentences and no false positive.
48
+ The quantifier `all` and the verb `authors` joined on the same evidence, two more live misses failing only the trigger test. Allowing words to stand between the trigger and the number was the other candidate, measured and declined: at widths of one, two, and three it reached 77, 104, and 132 sentences against a baseline of 65, missed `took all 70 rules` at every width, and reached `the toolkit authors 70 rules` only at a width admitting the indirect-noun shape below. The two words reach both at 75 sentences and no false positive.
49
49
 
50
50
  ## The plausibility filter
51
51
 
@@ -59,7 +59,7 @@ The article gate is looser than the verb list and carries a real cost. Re-runnin
59
59
 
60
60
  A delta phrased as a transition (`from fourteen to fifteen`), a fraction (`thirteen of sixteen`), and a total reached through an indirect noun (`denominator of sixty-one shipped skills`) are all catalog-size claims this corpus carries, and none matches the trigger shape this reads. Each stays a known gap. The false-positive rate that gated closing them has a measurement behind it now, and what it showed is that the widening these three need is the one that costs a false positive rather than the one that does not.
61
61
 
62
- A second figure in a sentence whose first figure already matched is a fourth gap and a structural one, since one match is taken per catalog per sentence. `authors 69 rules under governance/rules/ and consumes 54 into .claude/rules/` is read for its 69 alone, which is correct here because the two figures name different populations, and a sentence stating one catalog twice would go unread the same way.
62
+ A second figure in a sentence whose first figure already matched is a fourth gap and a structural one, since one match is taken per catalog per sentence. `authors 70 rules under governance/rules/ and consumes 55 into .claude/rules/` is read for its 70 alone, which is correct here because the two figures name different populations, and a sentence stating one catalog twice would go unread the same way.
63
63
 
64
64
  A calendar date (`2026-08-21`) or a backticked commit reference in the same sentence reads the whole sentence past, since that is how this corpus already marks a figure as a historical record rather than a live claim. `.claude/ARCHITECTURE.md` and the context entries carry a figure this way deliberately, and every one of them stays correct forever.
65
65
 
@@ -154,6 +154,14 @@ above it, and stop adding once you can no longer review every output properly.
154
154
  Serialize a track sharing a wiring seam with another, and serialize one whose
155
155
  sets are disjoint when a stated reason still puts it behind another.
156
156
 
157
+ Inbound turns cost the controlling session as well, so weigh the spend before
158
+ widening. A message from one of your other sessions arrives as a new turn
159
+ carrying the whole accumulated context, and a recurring poll bills that window
160
+ again on its own interval, which means a wide wave spends against the
161
+ orchestrator rather than against any worker. `crossSessionInbound` is the one
162
+ control over that and stays unset here, since `hold` and `refuse` both break the
163
+ worker handback and `accept` bounds nothing.
164
+
157
165
  Unit checks run freely in many worktrees at once.
158
166
  A dev server, an end-to-end run, and a screenshot run alongside each other on a
159
167
  web stack, since every worktree derives its own port. Singleton resources (one
@@ -0,0 +1,14 @@
1
+ ---
2
+ description: State the autoContinueAtUsageLimit inversion and the autoCompactWindow cap for .claude/settings.json and its seeded copy
3
+ paths:
4
+ - '.claude/settings.json'
5
+ - 'tooling/claude/seeds/.claude/settings.json'
6
+ ---
7
+
8
+ # Settings standards
9
+
10
+ ## Session budget settings
11
+
12
+ - Never set `autoContinueAtUsageLimit` in this file. Its scope is user or managed, and a repository file setting it while no user, `--settings`, or managed value does makes Claude Code read the setting as off, so writing `true` here turns the behavior off for every operator carrying no value of their own.
13
+ - Treat `autoCompactWindow` as capped at the model's own context window. A value above that cap is inert on a session running a smaller window and bites only on one running the larger, so name the window a recorded value is meant for.
14
+ - Record why a session budget setting is left unset in the project's own development notes rather than in this file. JSON carries no pointer, so a session reading the settings file alone concludes the setting is unconfigured and sets it again.
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@erclx/aitk",
3
3
  "type": "module",
4
- "version": "3.38.1",
4
+ "version": "3.39.0",
5
5
  "description": "Infrastructure and quality tooling for developer workflows",
6
6
  "license": "MIT",
7
7
  "bin": {