neo-agent-skills 0.1.76 → 0.1.78

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.
@@ -166,6 +166,7 @@ Expand these audits only when their trigger fires; otherwise omit them rather th
166
166
  - **📜 Source-of-Authority Audit:** review cites operator or peer authority for a demand.
167
167
  - **🔌 Wire-Format Compatibility Audit:** PR alters JSON-RPC notification schemas, payload envelopes, native API wire formats, event payloads, tool signatures, or database schemas.
168
168
  - **🧠 Turn-Memory / Substrate-Load Audit:** PR modifies files in `/turn-memory-pre-flight` IN-SCOPE list. Verify the author documented the decision-tree application and load-effect audit in the PR body; if missing, load `audits/loading-runtime-effect.md` and use its Required Action template.
169
+ - **📸 Before/After Audit:** PR targets `neomjs/neo-stage`. The body embeds at least one before (base) and one after (head) screenshot of what it changes; a missing pair is Request Changes, since the operator merges no Stage PR without one.
169
170
 
170
171
  ---
171
172
 
package/README.md CHANGED
@@ -90,7 +90,7 @@ npx --no-install neo-agent-skills-substrate-size
90
90
  ```
91
91
 
92
92
  Measures what a seat actually **loads** per turn — `AGENTS.md`, `.agents/ANTIGRAVITY_RULES.md`,
93
- `.claude/CLAUDE.md` — against a **24,576-byte** per-file limit, and fails the check on a breach.
93
+ `.claude/CLAUDE.md` — against a **23,800-byte** per-file limit, and fails the check on a breach.
94
94
 
95
95
  Loaded bytes, not file bytes: symlinks resolve through `realpathSync` (an `lstat` on a symlinked
96
96
  `CLAUDE.md` reports **12** — the length of `../AGENTS.md`), and whole-line `@path` imports are summed
@@ -206,7 +206,7 @@ in the set declares it. A peer working in several repositories loads that one fi
206
206
  repository's own rules.
207
207
 
208
208
  Both callers get the same refusals: an undeclared repository or audience, two sections claiming one
209
- numbered rule, and output over the **24,576-byte** budget. The bin writes `--out`, or stdout. The
209
+ numbered rule, and output over the **23,800-byte** budget. The bin writes `--out`, or stdout. The
210
210
  import writes nothing: Fleet puts the text into each seat's harness home with its own safe write.
211
211
 
212
212
  ## What is in the package
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "neo-agent-skills",
3
- "version": "0.1.76",
3
+ "version": "0.1.78",
4
4
  "description": "Install the workflow substrate a cross-model AI team actually runs on: ticket intake, PR review gates, lane coordination and guards, versioned as a package. The skills Neo.mjs maintainers load every session — materialized into your repo, not copied.",
5
5
  "type": "module",
6
6
  "license": "MIT",
@@ -19,22 +19,22 @@ import {parseArgs} from 'node:util';
19
19
  import {fileURLToPath} from 'node:url';
20
20
 
21
21
  /**
22
- * Per-file budget, in bytes — Antigravity's documented per-file hard limit.
22
+ * Per-file budget, in bytes — Antigravity's empirical `<RULE[/abs/path]>` content limit.
23
23
  *
24
- * Deliberately not a CLI option. A graduated budget is an architectural decision, and a limit a
25
- * caller can pass is a limit a caller can raise in the same diff the guard is meant to judge. The
26
- * remedy for a breach is Progressive Disclosure: move granular instruction into `.agents/skills/`.
24
+ * Antigravity caps each `<RULE[/abs/path]>\n` block at 24,000 decimal bytes including the path
25
+ * wrapper (24,270 B file - 354 B truncated = 23,916 B content + 84 B wrapper); 23,800 B leaves a
26
+ * 200 B wrapper budget. Breach remedy: move granular instruction into `.agents/skills/`.
27
27
  *
28
28
  * @member {Number} PER_FILE_LIMIT_BYTES
29
29
  */
30
- export const PER_FILE_LIMIT_BYTES = 24576;
30
+ export const PER_FILE_LIMIT_BYTES = 23800;
31
31
 
32
32
  /**
33
33
  * The per-turn entry points, each naming the harness that loads it.
34
34
  *
35
35
  * The number's substrate is per-harness, and inheriting one harness's constant into another's
36
- * contract is how correct-looking arithmetic governs the wrong seat. `24576` is Antigravity's
37
- * documented limit. The Claude seat's own cap is an operator-stated constraint whose semantics —
36
+ * contract is how correct-looking arithmetic governs the wrong seat. `23800` is Antigravity's
37
+ * content ceiling (`24,000` B `<RULE[path]>` cap minus wrapper). The Claude seat's own cap is an operator-stated constraint whose semantics —
38
38
  * what it is measured over — remain unconfirmed, because the experiment that would settle them
39
39
  * needs a fresh authenticated seat and has not run. Until it does, that row is checked against the
40
40
  * inherited number and `limitConfirmed: false` says so out loud, so the next reader inherits a
@@ -35,14 +35,14 @@ const
35
35
  WRAPPER_CLOSE = '</neo_core_overrides>';
36
36
 
37
37
  /**
38
- * @summary The byte budget a harness enforces on one turn-loaded file.
38
+ * @summary The byte budget a harness enforces on one turn-loaded file (24,000 B Antigravity `<RULE[path]>` cap minus 200 B wrapper margin).
39
39
  *
40
40
  * Shared with `check-substrate-size.mjs` by value rather than by import: that script measures a
41
41
  * CALLER tree and ships its limit so a pull request cannot widen the budget it is judged by. A
42
42
  * generator that imported the number would let a source change move it.
43
43
  * @member {Number}
44
44
  */
45
- export const PER_FILE_LIMIT_BYTES = 24576;
45
+ export const PER_FILE_LIMIT_BYTES = 23800;
46
46
 
47
47
  /**
48
48
  * @summary Removes final LF runs without trimming any other whitespace or line separator.
@@ -155,7 +155,7 @@ export function assemble({audience, preamble, repos, sections}) {
155
155
  const previous = blocks[blocks.length - 1],
156
156
  // A numbered item renders with its DECLARED number, never its position. Dropping one
157
157
  // rule from a repository must not renumber the rest, because cross-references name
158
- // them by number ("§critical_gates #4") from other files this generator cannot see.
158
+ // them by number ("§critical_gates item 4") from other files this generator cannot see.
159
159
  rendered = section.listNumber === null ? section.body : `${section.listNumber}. ${section.body}`;
160
160
 
161
161
  if (section.listGroup && previous?.listGroup === section.listGroup) {