ctxr-cli 0.20.1 → 0.21.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.
Files changed (95) hide show
  1. package/README.md +51 -5
  2. package/dist/adapters/builtin/index.d.ts.map +1 -1
  3. package/dist/adapters/builtin/index.js +8 -1
  4. package/dist/adapters/builtin/index.js.map +1 -1
  5. package/dist/adapters/harness/antigravity.d.ts +18 -0
  6. package/dist/adapters/harness/antigravity.d.ts.map +1 -0
  7. package/dist/adapters/harness/antigravity.js +24 -0
  8. package/dist/adapters/harness/antigravity.js.map +1 -0
  9. package/dist/adapters/harness/codex.d.ts +22 -0
  10. package/dist/adapters/harness/codex.d.ts.map +1 -0
  11. package/dist/adapters/harness/codex.js +28 -0
  12. package/dist/adapters/harness/codex.js.map +1 -0
  13. package/dist/adapters/types.d.ts +9 -0
  14. package/dist/adapters/types.d.ts.map +1 -1
  15. package/dist/commands/ingest.d.ts.map +1 -1
  16. package/dist/commands/ingest.js +13 -1
  17. package/dist/commands/ingest.js.map +1 -1
  18. package/dist/commands/init.d.ts +2 -0
  19. package/dist/commands/init.d.ts.map +1 -1
  20. package/dist/commands/init.js +20 -3
  21. package/dist/commands/init.js.map +1 -1
  22. package/dist/commands/publish-urls.d.ts +32 -0
  23. package/dist/commands/publish-urls.d.ts.map +1 -0
  24. package/dist/commands/publish-urls.js +125 -0
  25. package/dist/commands/publish-urls.js.map +1 -0
  26. package/dist/config/defaults.d.ts +26 -0
  27. package/dist/config/defaults.d.ts.map +1 -1
  28. package/dist/config/defaults.js +25 -1
  29. package/dist/config/defaults.js.map +1 -1
  30. package/dist/config/schema.d.ts +19 -0
  31. package/dist/config/schema.d.ts.map +1 -1
  32. package/dist/config/schema.js +31 -0
  33. package/dist/config/schema.js.map +1 -1
  34. package/dist/core/agents-doc.d.ts +26 -0
  35. package/dist/core/agents-doc.d.ts.map +1 -1
  36. package/dist/core/agents-doc.js +94 -40
  37. package/dist/core/agents-doc.js.map +1 -1
  38. package/dist/core/checks/harness-portability-checks.d.ts +32 -0
  39. package/dist/core/checks/harness-portability-checks.d.ts.map +1 -1
  40. package/dist/core/checks/harness-portability-checks.js +177 -2
  41. package/dist/core/checks/harness-portability-checks.js.map +1 -1
  42. package/dist/core/checks/integrity-checks.d.ts.map +1 -1
  43. package/dist/core/checks/integrity-checks.js +34 -14
  44. package/dist/core/checks/integrity-checks.js.map +1 -1
  45. package/dist/core/checks/organize-checks.d.ts +5 -0
  46. package/dist/core/checks/organize-checks.d.ts.map +1 -1
  47. package/dist/core/checks/organize-checks.js +57 -4
  48. package/dist/core/checks/organize-checks.js.map +1 -1
  49. package/dist/core/convention-doc.d.ts.map +1 -1
  50. package/dist/core/convention-doc.js +5 -2
  51. package/dist/core/convention-doc.js.map +1 -1
  52. package/dist/core/conventions.d.ts +7 -0
  53. package/dist/core/conventions.d.ts.map +1 -1
  54. package/dist/core/conventions.js +3 -0
  55. package/dist/core/conventions.js.map +1 -1
  56. package/dist/core/errors.d.ts +16 -0
  57. package/dist/core/errors.d.ts.map +1 -1
  58. package/dist/core/errors.js +32 -0
  59. package/dist/core/errors.js.map +1 -1
  60. package/dist/core/ingest/required-sections.d.ts +3 -3
  61. package/dist/core/ingest/required-sections.d.ts.map +1 -1
  62. package/dist/core/ingest/required-sections.js +79 -16
  63. package/dist/core/ingest/required-sections.js.map +1 -1
  64. package/dist/core/notes/list.d.ts.map +1 -1
  65. package/dist/core/notes/list.js +3 -0
  66. package/dist/core/notes/list.js.map +1 -1
  67. package/dist/core/reconcile.d.ts.map +1 -1
  68. package/dist/core/reconcile.js +2 -1
  69. package/dist/core/reconcile.js.map +1 -1
  70. package/dist/core/skills.d.ts.map +1 -1
  71. package/dist/core/skills.js +12 -4
  72. package/dist/core/skills.js.map +1 -1
  73. package/dist/run.d.ts.map +1 -1
  74. package/dist/run.js +14 -1
  75. package/dist/run.js.map +1 -1
  76. package/dist/version.d.ts +1 -1
  77. package/dist/version.js +1 -1
  78. package/package.json +3 -3
  79. package/templates/agents/canonical.md +3 -8
  80. package/templates/agents/capture-and-ingest.md +1 -36
  81. package/templates/agents/conventions.md +3 -1
  82. package/templates/agents/guidance-index.md +5 -0
  83. package/templates/agents/mission.md +2 -0
  84. package/templates/agents/retrieval-leg-routing.md +7 -42
  85. package/templates/conventions/baseline-conventions.md +20 -9
  86. package/templates/conventions/house-conventions-seed.md +10 -0
  87. package/templates/skills/ctxr-capture.md +27 -3
  88. package/templates/skills/ctxr-derived-artifacts.md +6 -0
  89. package/templates/skills/ctxr-ingest-orchestration.md +5 -1
  90. package/templates/skills/ctxr-mission.md +40 -31
  91. package/templates/skills/ctxr-organize-audit.md +6 -0
  92. package/templates/skills/ctxr-placement.md +5 -0
  93. package/templates/skills/ctxr-publish.md +2 -1
  94. package/templates/skills/ctxr-second-opinion.md +5 -0
  95. package/templates/skills/ctxr-submit.md +28 -4
@@ -2,6 +2,8 @@ import { readFile } from 'node:fs/promises';
2
2
  import path from 'node:path';
3
3
  import { GRAPH_DOCUMENT_RELATIVE_PATH } from './graph/persist.js';
4
4
  import { CONFIG_FILE_NAME } from './root.js';
5
+ import { parseNoteText } from './notes/parse.js';
6
+ import { ROLLED_UP_FIELD } from './rollup.js';
5
7
  import { excludedPrefixesFor } from './notes/list.js';
6
8
  import { extractDocMetadata, inlineDocBody, scanConventions } from './conventions.js';
7
9
  import { renderBaselineConventions } from './convention-doc.js';
@@ -62,9 +64,11 @@ function collapseNestedPrefixes(prefixes) {
62
64
  }
63
65
  export function renderLegRoutingSection(config) {
64
66
  const exclusions = collapseNestedPrefixes(excludedPrefixesFor(config));
65
- return substituteBlock(agentsTemplate('retrieval-leg-routing')
67
+ return agentsTemplate('retrieval-leg-routing')
66
68
  .replaceAll('__GRAPH_DOCUMENT_PATH__', GRAPH_DOCUMENT_RELATIVE_PATH)
67
- .replaceAll('__CAPTURE_ROOT__', config.ingest.capture_root), '__EXCLUSION_PATHS__', [exclusions.map((prefix) => `\`${prefix}\``).join(', ')]).split('\n');
69
+ .replaceAll('__CAPTURE_ROOT__', config.ingest.capture_root)
70
+ .replaceAll('__EXCLUSION_PATHS__', exclusions.map((prefix) => `\`${prefix}\``).join(', '))
71
+ .split('\n');
68
72
  }
69
73
  /** Idempotently reconciles AGENTS.md's leg-routing section from current config — called at init and on re-init. */
70
74
  export async function buildAgentsLegRoutingSection(root, config) {
@@ -122,32 +126,15 @@ export async function buildAgentsPlacementSection(root, config) {
122
126
  * path at the configured skills path.
123
127
  */
124
128
  export const AGENTS_MD_CANONICAL_FENCE = htmlCommentFence('canonical');
125
- /**
126
- * context-organize spec, kept through inline-conventions-and-mission's
127
- * design decision "the identity/mission pointer coexists with the inlined
128
- * Mission section": when `organize.mission_path` is configured, the
129
- * canonical section still names it as a document to load at session start,
130
- * immediately followed (as its own fenced section — see
131
- * `renderMissionSection` below) by that document's full inlined body.
132
- * Nothing is rendered when unset: the `__MISSION_POINTER__` template line
133
- * disappears entirely (via `substituteBlock`'s empty-list case), not a
134
- * placeholder.
135
- */
136
- function renderMissionPointer(config) {
137
- const { mission_path: missionPath } = config.organize;
138
- if (!missionPath)
139
- return [];
140
- return [
141
- '',
142
- `Load \`${missionPath}\` at the start of every session — this store's standing current-state document, ` +
143
- 'kept current by the mission skill and written through `ctxr rollup write`; its full content follows in the "Mission" section below.',
144
- ];
145
- }
146
129
  export function renderCanonicalSection(config) {
147
- return substituteBlock(agentsTemplate('canonical')
130
+ // a-dated-mission-core: no mission pointer here — the Mission section
131
+ // already carries the content and names its source, and the pointer
132
+ // caused ritual re-reads of a document every agent already had.
133
+ return agentsTemplate('canonical')
148
134
  .replaceAll('__CONFIG_FILE_NAME__', CONFIG_FILE_NAME)
149
135
  .replaceAll('__SKILLS_PATH__', config.harness.skills_path)
150
- .replaceAll('__TEMPLATES_PATH__', config.templates.path), '__MISSION_POINTER__', renderMissionPointer(config)).split('\n');
136
+ .replaceAll('__TEMPLATES_PATH__', config.templates.path)
137
+ .split('\n');
151
138
  }
152
139
  export async function buildAgentsCanonicalSection(root, config) {
153
140
  return upsertFencedRegionInFile(agentsMdPath(root), AGENTS_MD_CANONICAL_FENCE, renderCanonicalSection(config));
@@ -161,12 +148,33 @@ export async function buildAgentsCanonicalSection(root, config) {
161
148
  * or the note doesn't exist, either of which renders nothing at all.
162
149
  */
163
150
  export const AGENTS_MD_MISSION_FENCE = htmlCommentFence('mission');
151
+ /**
152
+ * a-dated-mission-core D2: the date the operator last confirmed the mission,
153
+ * from its recorded rollup timestamp — rendered rather than judged, so the
154
+ * generated text stays deterministic and the agent compares it to today.
155
+ */
156
+ export function missionConfirmedLine(missionRaw, missionPath) {
157
+ let rolledUp;
158
+ try {
159
+ rolledUp = parseNoteText(missionRaw, missionPath).frontmatter?.[ROLLED_UP_FIELD];
160
+ }
161
+ catch {
162
+ rolledUp = undefined;
163
+ }
164
+ const raw = rolledUp instanceof Date ? rolledUp.toISOString() : typeof rolledUp === 'string' ? rolledUp : '';
165
+ const date = /^\d{4}-\d{2}-\d{2}/.exec(raw)?.[0];
166
+ return date
167
+ ? `_Last confirmed ${date}. Check what has moved since before relying on a priority below._`
168
+ : '_Never confirmed: these priorities have not been reviewed since the document was seeded._';
169
+ }
164
170
  export function renderMissionSection(config, missionRaw) {
165
171
  const { mission_path: missionPath } = config.organize;
166
172
  if (!missionPath || missionRaw === null)
167
173
  return [];
168
174
  const doc = extractDocMetadata(missionRaw, missionPath);
169
- return substituteBlock(agentsTemplate('mission').replaceAll('__MISSION_PATH__', missionPath), '__MISSION_BODY__', inlineDocBody(doc, 1)).split('\n');
175
+ return substituteBlock(agentsTemplate('mission')
176
+ .replaceAll('__MISSION_PATH__', missionPath)
177
+ .replaceAll('__MISSION_CONFIRMED__', missionConfirmedLine(missionRaw, missionPath)), '__MISSION_BODY__', inlineDocBody(doc, 1)).split('\n');
170
178
  }
171
179
  export async function buildAgentsMissionSection(root, config) {
172
180
  const { mission_path: missionPath } = config.organize;
@@ -223,25 +231,51 @@ export function renderBaselineBlock(config) {
223
231
  const doc = extractDocMetadata(renderBaselineConventions(config), BASELINE_SOURCE_LABEL);
224
232
  return [`### ${doc.title}`, '', ...inlineDocBody(doc, 2), '', `_Source: ${BASELINE_SOURCE_LABEL}_`];
225
233
  }
234
+ /**
235
+ * lean-composed-entry-document: a guidance document that declares `read_when`
236
+ * loads on demand — it is listed in the guidance index, never inlined here.
237
+ */
238
+ export function inlinedConventions(conventions) {
239
+ return conventions.filter((doc) => doc.readWhen === null);
240
+ }
241
+ export function onDemandGuidance(conventions) {
242
+ return conventions.filter((doc) => doc.readWhen !== null);
243
+ }
226
244
  function conventionsBody(config, conventions) {
227
- const intro = conventions.length === 0
228
- ? [
229
- "contexture's shipped baseline, inlined in full. This store has added none of its own yet —",
230
- 'operator-authored conventions (content style, field semantics, house rules) belong as markdown',
231
- `files under \`${config.harness.guidance_path}\`, each inlined here alongside the baseline.`,
232
- ]
233
- : ["contexture's shipped baseline and this store's own conventions, inlined in full:"];
234
- const blocks = [renderBaselineBlock(config), ...conventions.map(renderConventionBlock)];
235
- const bodies = blocks.flatMap((block, i) => (i === blocks.length - 1 ? block : [...block, '']));
236
- return [...intro, '', ...bodies];
245
+ const blocks = [renderBaselineBlock(config), ...inlinedConventions(conventions).map(renderConventionBlock)];
246
+ return blocks.flatMap((block, i) => (i === blocks.length - 1 ? block : [...block, '']));
237
247
  }
248
+ /** `conventions` is every scanned guidance document; the on-demand ones are filtered out here, not by the caller. */
238
249
  export function renderConventionsSection(config, conventions) {
239
- return substituteBlock(agentsTemplate('conventions'), '__CONVENTION_BODY__', conventionsBody(config, conventions)).split('\n');
250
+ return substituteBlock(agentsTemplate('conventions').replaceAll('__GUIDANCE_PATH__', config.harness.guidance_path), '__CONVENTION_BODY__', conventionsBody(config, conventions)).split('\n');
240
251
  }
241
252
  export async function buildAgentsConventionsSection(root, config) {
242
253
  const conventions = await scanConventions(root, config);
243
254
  return upsertFencedRegionInFile(agentsMdPath(root), AGENTS_MD_CONVENTIONS_FENCE, renderConventionsSection(config, conventions));
244
255
  }
256
+ /**
257
+ * lean-composed-entry-document: the router. One row per on-demand guidance
258
+ * document — its trigger, its title, its path — so an agent learns that the
259
+ * document exists and when it matters without paying for its body on every
260
+ * turn. Absent entirely when no document is on demand (the mission
261
+ * section's pattern), never an empty fence pair.
262
+ */
263
+ export const AGENTS_MD_GUIDANCE_INDEX_FENCE = htmlCommentFence('guidance-index');
264
+ export function renderGuidanceIndexRow(doc) {
265
+ return `- ${doc.readWhen} → [${doc.title}](${doc.path})`;
266
+ }
267
+ export function renderGuidanceIndexSection(conventions) {
268
+ const rows = onDemandGuidance(conventions).map(renderGuidanceIndexRow);
269
+ if (rows.length === 0)
270
+ return [];
271
+ return substituteBlock(agentsTemplate('guidance-index'), '__GUIDANCE_ROWS__', rows).split('\n');
272
+ }
273
+ export async function buildAgentsGuidanceIndexSection(root, config) {
274
+ const body = renderGuidanceIndexSection(await scanConventions(root, config));
275
+ if (body.length === 0)
276
+ return removeFencedRegionFromFile(agentsMdPath(root), AGENTS_MD_GUIDANCE_INDEX_FENCE);
277
+ return upsertFencedRegionInFile(agentsMdPath(root), AGENTS_MD_GUIDANCE_INDEX_FENCE, body);
278
+ }
245
279
  /**
246
280
  * harness-portability spec: "Generated sections render in a fixed order" —
247
281
  * hard rules and current state first, operating mechanics next, the long
@@ -257,6 +291,7 @@ export const AGENTS_MD_SECTION_ORDER = [
257
291
  AGENTS_MD_CAPTURE_FENCE,
258
292
  AGENTS_MD_PLACEMENT_FENCE,
259
293
  AGENTS_MD_CONVENTIONS_FENCE,
294
+ AGENTS_MD_GUIDANCE_INDEX_FENCE,
260
295
  ];
261
296
  /**
262
297
  * harness-portability spec: "The entry document's inlined content matches
@@ -279,21 +314,40 @@ export async function checkAgentsMdDrift(root, config) {
279
314
  if (!conventionsRegion.includes(renderBaselineBlock(config).join('\n'))) {
280
315
  driftedConventions.push(BASELINE_SOURCE_LABEL);
281
316
  }
282
- if (conventions.length === 0) {
317
+ if (inlinedConventions(conventions).length === 0) {
283
318
  if (driftedConventions.length === 0)
284
319
  driftedConventions.push(config.harness.guidance_path);
285
320
  }
286
321
  else {
287
- for (const doc of conventions) {
322
+ for (const doc of inlinedConventions(conventions)) {
288
323
  if (!conventionsRegion.includes(renderConventionBlock(doc).join('\n')))
289
324
  driftedConventions.push(doc.path);
290
325
  }
326
+ // A document switched to on demand whose body is still inlined.
327
+ for (const doc of onDemandGuidance(conventions)) {
328
+ if (conventionsRegion.includes(renderConventionBlock(doc).join('\n')))
329
+ driftedConventions.push(doc.path);
330
+ }
291
331
  // Every individual block present, yet the whole section still differs
292
332
  // (a reordering, an added/removed file, a template change): still real
293
333
  // drift, just not attributable to one file — report the whole set.
294
334
  if (driftedConventions.length === 0)
295
- driftedConventions.push(...conventions.map((doc) => doc.path));
335
+ driftedConventions.push(...inlinedConventions(conventions).map((doc) => doc.path));
336
+ }
337
+ }
338
+ // lean-composed-entry-document: an on-demand document drifts when its row
339
+ // (trigger, title, path) no longer matches — or it moved in or out of the
340
+ // index — even though none of its body was ever in AGENTS.md.
341
+ const indexRegion = (await readFencedRegionFromFile(filePath, AGENTS_MD_GUIDANCE_INDEX_FENCE)).join('\n');
342
+ const freshIndex = renderGuidanceIndexSection(conventions).join('\n');
343
+ if (freshIndex !== indexRegion) {
344
+ const before = driftedConventions.length;
345
+ for (const doc of onDemandGuidance(conventions)) {
346
+ if (!indexRegion.includes(renderGuidanceIndexRow(doc)) && !driftedConventions.includes(doc.path))
347
+ driftedConventions.push(doc.path);
296
348
  }
349
+ if (driftedConventions.length === before)
350
+ driftedConventions.push(config.harness.guidance_path);
297
351
  }
298
352
  let driftedMission = null;
299
353
  const missionPath = config.organize.mission_path;
@@ -1 +1 @@
1
- {"version":3,"file":"agents-doc.js","sourceRoot":"","sources":["../../src/core/agents-doc.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"agents-doc.js","sourceRoot":"","sources":["../../src/core/agents-doc.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,4 @@
1
+ import type { HarnessGenerationAdapter } from '../../adapters/types.js';
1
2
  /**
2
3
  * compose-store-guidance-documents design.md D6: inlining every convention
3
4
  * file's full body into AGENTS.md's "Store conventions" section
@@ -29,5 +30,36 @@ export declare const conventionsSectionSizeCheck: import("./types.js").CheckDefi
29
30
  * relocation and no migration. The store is told, not blocked.
30
31
  */
31
32
  export declare const skillsPathIsHarnessBrandedCheck: import("./types.js").CheckDefinition;
33
+ /**
34
+ * lean-composed-entry-document:
35
+ * the generated section a byte offset falls inside — the last
36
+ * `contexture:<region>` fence opened at or before it — so a finding says
37
+ * what a harness stops reading, not just how much. `null` when the offset
38
+ * precedes every fence (hand-written preamble).
39
+ */
40
+ export declare function sectionAtByte(content: string, offset: number): string | null;
41
+ /** Every built-in harness adapter that declares a read limit — declared by the store or not. */
42
+ export declare function limitedBuiltinHarnesses(): HarnessGenerationAdapter[];
43
+ /**
44
+ * lean-composed-entry-document: "The entry document fits every supported
45
+ * harness." One store-wide limit, defaulting to the smallest built-in read
46
+ * limit, applied whichever harnesses the store declares (design.md D3). An
47
+ * invariant, because past a harness's limit content is silently never seen.
48
+ * Each finding names a built-in harness whose own limit is exceeded. Store
49
+ * scope only, so an over-limit store can still commit the edits that bring
50
+ * it back under.
51
+ */
52
+ export declare const entryDocumentReadLimitCheck: import("./types.js").CheckDefinition;
53
+ /**
54
+ * lean-composed-entry-document D3: the target is a judgment about per-turn
55
+ * cost and adherence, not a fact about any harness — an observation, never a
56
+ * failure.
57
+ */
58
+ export declare const entryDocumentTargetSizeCheck: import("./types.js").CheckDefinition;
59
+ /**
60
+ * a-dated-mission-core D3: the mission core loads on every turn, so its size
61
+ * is budgeted like the conventions section — measured on the inlined body.
62
+ */
63
+ export declare const missionSizeCheck: import("./types.js").CheckDefinition;
32
64
  export declare const HARNESS_PORTABILITY_CHECKS: import("./types.js").CheckDefinition[];
33
65
  //# sourceMappingURL=harness-portability-checks.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"harness-portability-checks.d.ts","sourceRoot":"","sources":["../../../src/core/checks/harness-portability-checks.ts"],"names":[],"mappings":"AAOA;;;;;;;;GAQG;AACH,eAAO,MAAM,2BAA2B,sCAuBtC,CAAC;AAEH;;;;;;;;;;;;;;;;;;;GAmBG;AACH,eAAO,MAAM,+BAA+B,sCAqB1C,CAAC;AAEH,eAAO,MAAM,0BAA0B,wCAAiE,CAAC"}
1
+ {"version":3,"file":"harness-portability-checks.d.ts","sourceRoot":"","sources":["../../../src/core/checks/harness-portability-checks.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,yBAAyB,CAAC;AAcxE;;;;;;;;GAQG;AACH,eAAO,MAAM,2BAA2B,sCAuBtC,CAAC;AAEH;;;;;;;;;;;;;;;;;;;GAmBG;AACH,eAAO,MAAM,+BAA+B,sCAyB1C,CAAC;AAWH;;;;;;GAMG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAU5E;AAED,gGAAgG;AAChG,wBAAgB,uBAAuB,IAAI,wBAAwB,EAAE,CAIpE;AAED;;;;;;;;GAQG;AACH,eAAO,MAAM,2BAA2B,sCAyCtC,CAAC;AAEH;;;;GAIG;AACH,eAAO,MAAM,4BAA4B,sCA4BvC,CAAC;AAEH;;;GAGG;AACH,eAAO,MAAM,gBAAgB,sCAiC3B,CAAC;AAEH,eAAO,MAAM,0BAA0B,wCAMtC,CAAC"}
@@ -1,5 +1,10 @@
1
+ import { readFile } from 'node:fs/promises';
2
+ import path from 'node:path';
1
3
  import { configuredAdapters } from '../../adapters/registry.js';
2
- import { DEFAULT_SKILLS_PATH } from '../../config/defaults.js';
4
+ import { BUILTIN_ADAPTERS } from '../../adapters/builtin/index.js';
5
+ import { DEFAULT_ENTRY_DOCUMENT_MAX_BYTES, DEFAULT_ENTRY_DOCUMENT_TARGET_BYTES, DEFAULT_MISSION_MAX_BYTES, DEFAULT_SKILLS_PATH, } from '../../config/defaults.js';
6
+ import { extractDocMetadata, inlineDocBody } from '../conventions.js';
7
+ import { GENERIC_START_RE } from '../fs/fenced-region.js';
3
8
  import { AGENTS_MD_CONVENTIONS_FENCE, agentsMdPath } from '../agents-doc.js';
4
9
  import { readFencedRegionFromFile } from '../fs/fenced-region.js';
5
10
  import { defineCheck } from './types.js';
@@ -68,6 +73,11 @@ export const skillsPathIsHarnessBrandedCheck = defineCheck({
68
73
  for (const adapter of configuredAdapters(ctx.config, 'harness-generation')) {
69
74
  if (adapter.skillsDir !== canonical)
70
75
  continue;
76
+ // support-codex-and-antigravity-harnesses: an adapter that declares the
77
+ // cross-harness location itself (codex, antigravity) reads the directory
78
+ // every other harness is bridged to — that is not a branded path.
79
+ if (adapter.skillsDir === DEFAULT_SKILLS_PATH)
80
+ continue;
71
81
  findings.push({
72
82
  code: 'harness_portability.skills_path_is_harness_branded',
73
83
  severity: 'info',
@@ -79,5 +89,170 @@ export const skillsPathIsHarnessBrandedCheck = defineCheck({
79
89
  return { status: findings.length > 0 ? 'fail' : 'pass', findings };
80
90
  },
81
91
  });
82
- export const HARNESS_PORTABILITY_CHECKS = [conventionsSectionSizeCheck, skillsPathIsHarnessBrandedCheck];
92
+ async function readAgentsMd(storeRoot) {
93
+ try {
94
+ return await readFile(agentsMdPath(storeRoot), 'utf8');
95
+ }
96
+ catch (err) {
97
+ if (err.code === 'ENOENT')
98
+ return null;
99
+ throw err;
100
+ }
101
+ }
102
+ /**
103
+ * lean-composed-entry-document:
104
+ * the generated section a byte offset falls inside — the last
105
+ * `contexture:<region>` fence opened at or before it — so a finding says
106
+ * what a harness stops reading, not just how much. `null` when the offset
107
+ * precedes every fence (hand-written preamble).
108
+ */
109
+ export function sectionAtByte(content, offset) {
110
+ let consumed = 0;
111
+ let current = null;
112
+ for (const line of content.split('\n')) {
113
+ if (consumed > offset)
114
+ break;
115
+ const start = GENERIC_START_RE.exec(line);
116
+ if (start)
117
+ current = start[1];
118
+ consumed += Buffer.byteLength(line, 'utf8') + 1;
119
+ }
120
+ return current;
121
+ }
122
+ /** Every built-in harness adapter that declares a read limit — declared by the store or not. */
123
+ export function limitedBuiltinHarnesses() {
124
+ return BUILTIN_ADAPTERS.filter((a) => a.kind === 'harness-generation' && a.entryDocumentMaxBytes !== undefined);
125
+ }
126
+ /**
127
+ * lean-composed-entry-document: "The entry document fits every supported
128
+ * harness." One store-wide limit, defaulting to the smallest built-in read
129
+ * limit, applied whichever harnesses the store declares (design.md D3). An
130
+ * invariant, because past a harness's limit content is silently never seen.
131
+ * Each finding names a built-in harness whose own limit is exceeded. Store
132
+ * scope only, so an over-limit store can still commit the edits that bring
133
+ * it back under.
134
+ */
135
+ export const entryDocumentReadLimitCheck = defineCheck({
136
+ id: 'harness_portability.entry_document_read_limit',
137
+ title: 'AGENTS.md fits within its size limit, which by default every supported harness reads in full',
138
+ severity: 'invariant',
139
+ capability: 'harness-portability',
140
+ scopes: ['store'],
141
+ async run(ctx) {
142
+ const content = await readAgentsMd(ctx.storeRoot);
143
+ if (content === null) {
144
+ return { status: 'skip', skipReason: 'AGENTS.md has not been generated yet — run `ctxr update`', findings: [] };
145
+ }
146
+ const size = Buffer.byteLength(content, 'utf8');
147
+ const limit = ctx.config.harness.entry_document_max_bytes ?? DEFAULT_ENTRY_DOCUMENT_MAX_BYTES;
148
+ if (size <= limit)
149
+ return { status: 'pass', findings: [] };
150
+ const findings = limitedBuiltinHarnesses()
151
+ .filter((adapter) => size > adapter.entryDocumentMaxBytes)
152
+ .map((adapter) => {
153
+ const harnessLimit = adapter.entryDocumentMaxBytes;
154
+ const section = sectionAtByte(content, harnessLimit);
155
+ return {
156
+ code: 'harness_portability.entry_document_read_limit_exceeded',
157
+ severity: 'error',
158
+ message: `AGENTS.md is ${size} bytes, over this store's ${limit}-byte limit; ${adapter.id} stops reading at ${harnessLimit}, ` +
159
+ `${section ? `inside the "${section}" section` : 'before the first generated section'}. ` +
160
+ 'Move guidance that is not needed on every turn into a file declaring `read_when`, or trim the mission.',
161
+ subject: adapter.id,
162
+ details: { size, limit, harness_limit: harnessLimit, section },
163
+ };
164
+ });
165
+ // A store that set its own limit below every harness's still fails, with no harness to name.
166
+ if (findings.length === 0) {
167
+ findings.push({
168
+ code: 'harness_portability.entry_document_read_limit_exceeded',
169
+ severity: 'error',
170
+ message: `AGENTS.md is ${size} bytes, over this store's ${limit}-byte limit (\`harness.entry_document_max_bytes\`).`,
171
+ details: { size, limit },
172
+ });
173
+ }
174
+ return { status: 'fail', findings };
175
+ },
176
+ });
177
+ /**
178
+ * lean-composed-entry-document D3: the target is a judgment about per-turn
179
+ * cost and adherence, not a fact about any harness — an observation, never a
180
+ * failure.
181
+ */
182
+ export const entryDocumentTargetSizeCheck = defineCheck({
183
+ id: 'harness_portability.entry_document_target_size',
184
+ title: 'AGENTS.md stays within its target size',
185
+ severity: 'observation',
186
+ capability: 'harness-portability',
187
+ scopes: ['store'],
188
+ async run(ctx) {
189
+ const content = await readAgentsMd(ctx.storeRoot);
190
+ if (content === null) {
191
+ return { status: 'skip', skipReason: 'AGENTS.md has not been generated yet — run `ctxr update`', findings: [] };
192
+ }
193
+ const size = Buffer.byteLength(content, 'utf8');
194
+ const target = ctx.config.harness.entry_document_target_bytes ?? DEFAULT_ENTRY_DOCUMENT_TARGET_BYTES;
195
+ if (size <= target)
196
+ return { status: 'pass', findings: [] };
197
+ return {
198
+ status: 'fail',
199
+ findings: [
200
+ {
201
+ code: 'harness_portability.entry_document_over_target',
202
+ severity: 'info',
203
+ message: `AGENTS.md is ${size} bytes, over its ${target}-byte target. Every byte loads on every turn: ` +
204
+ 'move guidance that matters only for one task into a file declaring `read_when`.',
205
+ details: { size, target },
206
+ },
207
+ ],
208
+ };
209
+ },
210
+ });
211
+ /**
212
+ * a-dated-mission-core D3: the mission core loads on every turn, so its size
213
+ * is budgeted like the conventions section — measured on the inlined body.
214
+ */
215
+ export const missionSizeCheck = defineCheck({
216
+ id: 'harness_portability.mission_size',
217
+ title: 'The inlined mission core stays within its size budget',
218
+ severity: 'invariant',
219
+ capability: 'harness-portability',
220
+ scopes: ['store'],
221
+ async run(ctx) {
222
+ const missionPath = ctx.config.organize.mission_path;
223
+ if (!missionPath)
224
+ return { status: 'skip', skipReason: 'no organize.mission_path configured', findings: [] };
225
+ let raw;
226
+ try {
227
+ raw = await readFile(path.join(ctx.storeRoot, missionPath), 'utf8');
228
+ }
229
+ catch {
230
+ return { status: 'skip', skipReason: `no mission document at ${missionPath}`, findings: [] };
231
+ }
232
+ const size = Buffer.byteLength(inlineDocBody(extractDocMetadata(raw, missionPath), 1).join('\n'), 'utf8');
233
+ const budget = ctx.config.organize.mission_max_bytes ?? DEFAULT_MISSION_MAX_BYTES;
234
+ if (size <= budget)
235
+ return { status: 'pass', findings: [] };
236
+ return {
237
+ status: 'fail',
238
+ findings: [
239
+ {
240
+ code: 'harness_portability.mission_size_exceeded',
241
+ severity: 'error',
242
+ message: `The mission's inlined core is ${size} bytes, over its ${budget}-byte budget. Keep the primary mission, the ranked ` +
243
+ 'priorities, and what is not now; move the back burner, sunset candidates, and open debt to the register note (`ctxr-mission`).',
244
+ subject: missionPath,
245
+ details: { size, budget },
246
+ },
247
+ ],
248
+ };
249
+ },
250
+ });
251
+ export const HARNESS_PORTABILITY_CHECKS = [
252
+ conventionsSectionSizeCheck,
253
+ skillsPathIsHarnessBrandedCheck,
254
+ entryDocumentReadLimitCheck,
255
+ entryDocumentTargetSizeCheck,
256
+ missionSizeCheck,
257
+ ];
83
258
  //# sourceMappingURL=harness-portability-checks.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"harness-portability-checks.js","sourceRoot":"","sources":["../../../src/core/checks/harness-portability-checks.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"harness-portability-checks.js","sourceRoot":"","sources":["../../../src/core/checks/harness-portability-checks.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"integrity-checks.d.ts","sourceRoot":"","sources":["../../../src/core/checks/integrity-checks.ts"],"names":[],"mappings":"AAqDA;;;;;;;GAOG;AACH,eAAO,MAAM,6BAA6B,sCAkCxC,CAAC;AAEH;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,wBAAwB,sCAsBnC,CAAC;AAEH,oEAAoE;AACpE,eAAO,MAAM,yBAAyB,sCAuBpC,CAAC;AAEH;;;;;;GAMG;AACH,eAAO,MAAM,wBAAwB,sCAwBnC,CAAC;AAYH;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,0CAA0C,sCAiDrD,CAAC;AAEH,qEAAqE;AACrE,eAAO,MAAM,6BAA6B,sCAoCxC,CAAC;AAEH;;;;;;;;;GASG;AACH,eAAO,MAAM,kCAAkC,sCA4B7C,CAAC;AAqBH;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,wCAAwC,sCAiEnD,CAAC;AAEH,eAAO,MAAM,gBAAgB,wCAS5B,CAAC"}
1
+ {"version":3,"file":"integrity-checks.d.ts","sourceRoot":"","sources":["../../../src/core/checks/integrity-checks.ts"],"names":[],"mappings":"AAuDA;;;;;;;GAOG;AACH,eAAO,MAAM,6BAA6B,sCAkCxC,CAAC;AAEH;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,wBAAwB,sCAsBnC,CAAC;AAEH,oEAAoE;AACpE,eAAO,MAAM,yBAAyB,sCAuBpC,CAAC;AAEH;;;;;;GAMG;AACH,eAAO,MAAM,wBAAwB,sCAwBnC,CAAC;AAYH;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,0CAA0C,sCAiDrD,CAAC;AAEH,qEAAqE;AACrE,eAAO,MAAM,6BAA6B,sCAoCxC,CAAC;AAEH;;;;;;;;;GASG;AACH,eAAO,MAAM,kCAAkC,sCA4B7C,CAAC;AAqBH;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,wCAAwC,sCAkFnD,CAAC;AAEH,eAAO,MAAM,gBAAgB,wCAS5B,CAAC"}
@@ -4,7 +4,7 @@ import { configuredAdapters, resolveAdapter } from '../../adapters/registry.js';
4
4
  import { parse as parseYaml } from 'yaml';
5
5
  import { CONFIG_FILE_NAME } from '../root.js';
6
6
  import { StoreConfigSchema } from '../../config/schema.js';
7
- import { AGENTS_MD_CONVENTIONS_FENCE, AGENTS_MD_MISSION_FENCE, agentsMdPath, checkAgentsMdDrift, renderConventionsSection, renderMissionSection, } from '../agents-doc.js';
7
+ import { AGENTS_MD_CONVENTIONS_FENCE, AGENTS_MD_GUIDANCE_INDEX_FENCE, AGENTS_MD_MISSION_FENCE, agentsMdPath, checkAgentsMdDrift, renderConventionsSection, renderGuidanceIndexSection, renderMissionSection, } from '../agents-doc.js';
8
8
  import { checkCatalogStale } from '../catalog/build.js';
9
9
  import { extractDocMetadata, scanConventions } from '../conventions.js';
10
10
  import { readFencedRegion, removeFencedRegion } from '../fs/fenced-region.js';
@@ -371,27 +371,44 @@ export const stagedAgentsMdInlinedContentCurrentCheck = defineCheck({
371
371
  const relevantSourceStaged = staged.some((f) => f.path.startsWith(conventionsPrefix) || f.path === missionPath);
372
372
  if (!relevantSourceStaged)
373
373
  return { status: 'pass', findings: [] };
374
+ // lean-composed-entry-document: AGENTS.md need not be staged at all when
375
+ // the change leaves it untouched — an edit to an on-demand document's
376
+ // body is never in AGENTS.md. Compare against the version this commit
377
+ // would carry: the staged one if staged, else the index's (= HEAD's).
374
378
  const agentsMdStaged = staged.find((f) => f.path === 'AGENTS.md');
375
- if (!agentsMdStaged || agentsMdStaged.content === undefined) {
376
- return {
377
- status: 'fail',
378
- findings: [
379
- {
380
- code: 'staged.agents_md_inlined_content_current.not_staged',
381
- severity: 'error',
382
- message: 'This commit stages a change to an operator convention file or the mission document, but not AGENTS.md — run `ctxr update` and stage the result.',
383
- },
384
- ],
385
- };
379
+ const notStaged = {
380
+ code: 'staged.agents_md_inlined_content_current.not_staged',
381
+ severity: 'error',
382
+ message: 'This commit stages a change to an operator convention file or the mission document, but not AGENTS.md — run `ctxr update` and stage the result.',
383
+ };
384
+ let committedAgentsMd = agentsMdStaged?.content;
385
+ if (!agentsMdStaged) {
386
+ const shown = await ctx.git.run(['show', ':AGENTS.md'], { cwd: ctx.storeRoot, allowFailure: true });
387
+ if (shown.exitCode === 0)
388
+ committedAgentsMd = shown.stdout;
386
389
  }
390
+ if (committedAgentsMd === undefined)
391
+ return { status: 'fail', findings: [notStaged] };
387
392
  const conventions = await scanConventions(ctx.storeRoot, ctx.config);
388
393
  const effectiveConventions = await Promise.all(conventions.map(async (doc) => {
389
394
  const raw = await stagedOrDiskContent(ctx.storeRoot, staged, doc.path);
390
395
  return raw === null ? doc : extractDocMetadata(raw, doc.path);
391
396
  }));
392
397
  const freshConventions = renderConventionsSection(ctx.config, effectiveConventions).join('\n');
393
- const stagedConventionsRegion = readFencedRegion(agentsMdStaged.content, AGENTS_MD_CONVENTIONS_FENCE).join('\n');
398
+ const stagedConventionsRegion = readFencedRegion(committedAgentsMd, AGENTS_MD_CONVENTIONS_FENCE).join('\n');
394
399
  const findings = [];
400
+ // lean-composed-entry-document: an on-demand document's row is derived
401
+ // content too — staging a changed trigger or title without the matching
402
+ // AGENTS.md regeneration leaves the router stale.
403
+ const freshIndex = renderGuidanceIndexSection(effectiveConventions).join('\n');
404
+ const stagedIndexRegion = readFencedRegion(committedAgentsMd, AGENTS_MD_GUIDANCE_INDEX_FENCE).join('\n');
405
+ if (freshIndex !== stagedIndexRegion) {
406
+ findings.push({
407
+ code: 'staged.agents_md_inlined_content_current.guidance_index_mismatch',
408
+ severity: 'error',
409
+ message: "The staged AGENTS.md's guidance index does not reflect the staged guidance documents — run `ctxr update` and re-stage AGENTS.md.",
410
+ });
411
+ }
395
412
  if (freshConventions !== stagedConventionsRegion) {
396
413
  findings.push({
397
414
  code: 'staged.agents_md_inlined_content_current.conventions_mismatch',
@@ -402,7 +419,7 @@ export const stagedAgentsMdInlinedContentCurrentCheck = defineCheck({
402
419
  if (missionPath) {
403
420
  const missionRaw = await stagedOrDiskContent(ctx.storeRoot, staged, missionPath);
404
421
  const freshMission = renderMissionSection(ctx.config, missionRaw).join('\n');
405
- const stagedMissionRegion = readFencedRegion(agentsMdStaged.content, AGENTS_MD_MISSION_FENCE).join('\n');
422
+ const stagedMissionRegion = readFencedRegion(committedAgentsMd, AGENTS_MD_MISSION_FENCE).join('\n');
406
423
  if (freshMission !== stagedMissionRegion) {
407
424
  findings.push({
408
425
  code: 'staged.agents_md_inlined_content_current.mission_mismatch',
@@ -411,6 +428,9 @@ export const stagedAgentsMdInlinedContentCurrentCheck = defineCheck({
411
428
  });
412
429
  }
413
430
  }
431
+ // Unstaged and stale: the actionable fix is to regenerate and stage it.
432
+ if (!agentsMdStaged && findings.length > 0)
433
+ return { status: 'fail', findings: [notStaged] };
414
434
  return { status: findings.length > 0 ? 'fail' : 'pass', findings };
415
435
  },
416
436
  });