ctxr-cli 0.4.0 → 0.5.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.
- package/dist/adapters/harness/claude-code.d.ts +0 -6
- package/dist/adapters/harness/claude-code.d.ts.map +1 -1
- package/dist/adapters/harness/claude-code.js +44 -25
- package/dist/adapters/harness/claude-code.js.map +1 -1
- package/dist/adapters/types.d.ts +28 -9
- package/dist/adapters/types.d.ts.map +1 -1
- package/dist/commands/adapters-generate.d.ts.map +1 -1
- package/dist/commands/adapters-generate.js +15 -3
- package/dist/commands/adapters-generate.js.map +1 -1
- package/dist/commands/adapters-write-gate.d.ts +20 -0
- package/dist/commands/adapters-write-gate.d.ts.map +1 -0
- package/dist/commands/adapters-write-gate.js +77 -0
- package/dist/commands/adapters-write-gate.js.map +1 -0
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +57 -9
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/rollup-write.d.ts.map +1 -1
- package/dist/commands/rollup-write.js +8 -0
- package/dist/commands/rollup-write.js.map +1 -1
- package/dist/commands/session-land.d.ts.map +1 -1
- package/dist/commands/session-land.js +55 -24
- package/dist/commands/session-land.js.map +1 -1
- package/dist/commands/verify.d.ts +9 -2
- package/dist/commands/verify.d.ts.map +1 -1
- package/dist/commands/verify.js +50 -27
- package/dist/commands/verify.js.map +1 -1
- package/dist/config/defaults.d.ts +20 -4
- package/dist/config/defaults.d.ts.map +1 -1
- package/dist/config/defaults.js +20 -4
- package/dist/config/defaults.js.map +1 -1
- package/dist/config/schema.d.ts +29 -5
- package/dist/config/schema.d.ts.map +1 -1
- package/dist/config/schema.js +73 -5
- package/dist/config/schema.js.map +1 -1
- package/dist/core/agents-doc.d.ts +71 -16
- package/dist/core/agents-doc.d.ts.map +1 -1
- package/dist/core/agents-doc.js +220 -139
- package/dist/core/agents-doc.js.map +1 -1
- package/dist/core/checks/harness-portability-checks.d.ts +12 -0
- package/dist/core/checks/harness-portability-checks.d.ts.map +1 -0
- package/dist/core/checks/harness-portability-checks.js +39 -0
- package/dist/core/checks/harness-portability-checks.js.map +1 -0
- package/dist/core/checks/integrity-checks.d.ts +25 -1
- package/dist/core/checks/integrity-checks.d.ts.map +1 -1
- package/dist/core/checks/integrity-checks.js +136 -3
- package/dist/core/checks/integrity-checks.js.map +1 -1
- package/dist/core/checks/manifest.d.ts.map +1 -1
- package/dist/core/checks/manifest.js +2 -0
- package/dist/core/checks/manifest.js.map +1 -1
- package/dist/core/checks/organize-checks.d.ts +12 -0
- package/dist/core/checks/organize-checks.d.ts.map +1 -1
- package/dist/core/checks/organize-checks.js +51 -1
- package/dist/core/checks/organize-checks.js.map +1 -1
- package/dist/core/convention-doc.d.ts +33 -0
- package/dist/core/convention-doc.d.ts.map +1 -0
- package/dist/core/convention-doc.js +110 -0
- package/dist/core/convention-doc.js.map +1 -0
- package/dist/core/conventions.d.ts +25 -5
- package/dist/core/conventions.d.ts.map +1 -1
- package/dist/core/conventions.js +65 -3
- package/dist/core/conventions.js.map +1 -1
- package/dist/core/errors.d.ts.map +1 -1
- package/dist/core/errors.js +2 -1
- package/dist/core/errors.js.map +1 -1
- package/dist/core/fs/fenced-region.d.ts +38 -0
- package/dist/core/fs/fenced-region.d.ts.map +1 -1
- package/dist/core/fs/fenced-region.js +88 -2
- package/dist/core/fs/fenced-region.js.map +1 -1
- package/dist/core/git/repo.d.ts +10 -0
- package/dist/core/git/repo.d.ts.map +1 -1
- package/dist/core/git/repo.js +28 -0
- package/dist/core/git/repo.js.map +1 -1
- package/dist/core/git/worktree.d.ts +8 -0
- package/dist/core/git/worktree.d.ts.map +1 -1
- package/dist/core/git/worktree.js +11 -0
- package/dist/core/git/worktree.js.map +1 -1
- package/dist/core/hooks.d.ts +10 -0
- package/dist/core/hooks.d.ts.map +1 -1
- package/dist/core/hooks.js +37 -10
- package/dist/core/hooks.js.map +1 -1
- package/dist/core/json-config-merge.d.ts +26 -2
- package/dist/core/json-config-merge.d.ts.map +1 -1
- package/dist/core/json-config-merge.js +61 -7
- package/dist/core/json-config-merge.js.map +1 -1
- package/dist/core/migrations/registry.d.ts.map +1 -1
- package/dist/core/migrations/registry.js +7 -1
- package/dist/core/migrations/registry.js.map +1 -1
- package/dist/core/migrations/rename-conventions-path.d.ts +26 -0
- package/dist/core/migrations/rename-conventions-path.d.ts.map +1 -0
- package/dist/core/migrations/rename-conventions-path.js +86 -0
- package/dist/core/migrations/rename-conventions-path.js.map +1 -0
- package/dist/core/migrations/rename-procedures-path.d.ts +17 -0
- package/dist/core/migrations/rename-procedures-path.d.ts.map +1 -0
- package/dist/core/migrations/rename-procedures-path.js +45 -0
- package/dist/core/migrations/rename-procedures-path.js.map +1 -0
- package/dist/core/notes/list.js +5 -5
- package/dist/core/notes/list.js.map +1 -1
- package/dist/core/reconcile.d.ts.map +1 -1
- package/dist/core/reconcile.js +32 -5
- package/dist/core/reconcile.js.map +1 -1
- package/dist/core/rollup.d.ts +2 -2
- package/dist/core/rollup.d.ts.map +1 -1
- package/dist/core/rollup.js +24 -3
- package/dist/core/rollup.js.map +1 -1
- package/dist/core/{procedures.d.ts → skills.d.ts} +12 -12
- package/dist/core/skills.d.ts.map +1 -0
- package/dist/core/{procedures.js → skills.js} +25 -41
- package/dist/core/skills.js.map +1 -0
- package/dist/core/templates.d.ts +20 -0
- package/dist/core/templates.d.ts.map +1 -0
- package/dist/core/templates.js +68 -0
- package/dist/core/templates.js.map +1 -0
- package/dist/core/write-lifecycle/path-gate.d.ts +28 -0
- package/dist/core/write-lifecycle/path-gate.d.ts.map +1 -1
- package/dist/core/write-lifecycle/path-gate.js +78 -22
- package/dist/core/write-lifecycle/path-gate.js.map +1 -1
- package/dist/run.d.ts.map +1 -1
- package/dist/run.js +12 -1
- package/dist/run.js.map +1 -1
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/package.json +1 -1
- package/templates/agents/canonical.md +20 -0
- package/templates/agents/capture-and-ingest.md +17 -0
- package/templates/agents/conventions.md +5 -0
- package/templates/agents/mission.md +5 -0
- package/templates/agents/placement-no-layers.md +5 -0
- package/templates/agents/placement.md +7 -0
- package/templates/agents/retrieval-leg-routing.md +14 -0
- package/templates/conventions/baseline-convention.md +60 -0
- package/templates/conventions/custom-convention-seed.md +21 -0
- package/templates/hooks/claude-code-write-gate.sh +15 -0
- package/templates/skills/ctxr-connection-finding.md +1 -1
- package/templates/skills/ctxr-ingest-orchestration.md +1 -1
- package/templates/skills/ctxr-land.md +11 -6
- package/dist/core/procedures.d.ts.map +0 -1
- package/dist/core/procedures.js.map +0 -1
|
@@ -5,7 +5,7 @@ import { isInteractive } from '../core/env.js';
|
|
|
5
5
|
import { MergeNotConfirmedError, NoForgeConfiguredError, PullRequestClosedError, PullRequestHeadMismatchError, PullRequestNotMergeableError, SessionLandConsentRequiredError, SessionLandOnDefaultBranchError, } from '../core/errors.js';
|
|
6
6
|
import { ExitCode } from '../core/exit-codes.js';
|
|
7
7
|
import { currentBranch } from '../core/git/repo.js';
|
|
8
|
-
import { fetchOrigin, listWorktrees, removeWorktree, deleteBranch, hasRemote } from '../core/git/worktree.js';
|
|
8
|
+
import { fetchOrigin, listWorktrees, mainWorktreePath, removeWorktree, deleteBranch, hasRemote } from '../core/git/worktree.js';
|
|
9
9
|
import { isWorkingTreeClean } from '../core/git/repo.js';
|
|
10
10
|
import { isSessionBranch, isSessionWorktreePath } from '../core/session.js';
|
|
11
11
|
export const requires = { store: 'required' };
|
|
@@ -23,19 +23,31 @@ export async function execute(env, store, flags, registry = BUILTIN_ADAPTERS) {
|
|
|
23
23
|
throw new SessionLandConsentRequiredError();
|
|
24
24
|
}
|
|
25
25
|
const defaultBranch = store.config.git.default_branch;
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
26
|
+
// The target comes from exactly one source: --branch names it outright,
|
|
27
|
+
// --pr defers to the pull request's head branch, and with neither it is the
|
|
28
|
+
// branch checked out where the command was invoked. Only the first two are
|
|
29
|
+
// knowable without the forge, so only they can be refused before contacting it.
|
|
30
|
+
const requested = flags.branch ?? (flags.pr === undefined ? await currentBranch(env.git, store.root) : undefined);
|
|
31
|
+
if (requested === defaultBranch) {
|
|
32
|
+
throw new SessionLandOnDefaultBranchError(requested);
|
|
29
33
|
}
|
|
30
34
|
const [forgeAdapter] = configuredAdapters(store.config, 'forge', registry);
|
|
31
35
|
if (!forgeAdapter || !(await forgeAdapter.isAvailable(store.root))) {
|
|
32
36
|
throw new NoForgeConfiguredError();
|
|
33
37
|
}
|
|
34
|
-
const ref = flags.pr !== undefined ? String(flags.pr) :
|
|
38
|
+
const ref = flags.pr !== undefined ? String(flags.pr) : requested;
|
|
35
39
|
let pr = await forgeAdapter.pullRequest(store.root, ref);
|
|
36
|
-
if (
|
|
37
|
-
|
|
40
|
+
if (requested === undefined) {
|
|
41
|
+
// The target IS the head branch, so there is nothing to mismatch — but the
|
|
42
|
+
// default branch is still refused, now on the branch the forge reported.
|
|
43
|
+
if (pr.headBranch === defaultBranch) {
|
|
44
|
+
throw new SessionLandOnDefaultBranchError(pr.headBranch);
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
else if (pr.headBranch !== requested) {
|
|
48
|
+
throw new PullRequestHeadMismatchError(requested, pr.headBranch);
|
|
38
49
|
}
|
|
50
|
+
const branch = requested ?? pr.headBranch;
|
|
39
51
|
let merged = pr.state === 'merged';
|
|
40
52
|
let gate = 'not_required';
|
|
41
53
|
if (pr.state === 'closed') {
|
|
@@ -62,38 +74,43 @@ export async function execute(env, store, flags, registry = BUILTIN_ADAPTERS) {
|
|
|
62
74
|
pr = after;
|
|
63
75
|
merged = true;
|
|
64
76
|
}
|
|
65
|
-
const
|
|
66
|
-
const
|
|
77
|
+
const clone = await mainWorktreePath(env.git, store.root);
|
|
78
|
+
const sync = await syncCanonicalClone(env, clone, defaultBranch);
|
|
79
|
+
const reap = await reapWorktree(env, store, clone, branch, flags.reap ?? false);
|
|
67
80
|
return outcome(store, branch, pr, gate, merged, sync, reap);
|
|
68
81
|
}
|
|
69
82
|
function gateMessage(pr) {
|
|
70
83
|
return `PR #${pr.number} "${pr.title}" (${pr.url}) — OPEN, MERGEABLE. Merge?`;
|
|
71
84
|
}
|
|
72
|
-
/**
|
|
73
|
-
|
|
74
|
-
|
|
85
|
+
/**
|
|
86
|
+
* D2: fast-forward only, in the store's canonical clone — the checkout the
|
|
87
|
+
* default branch lives in, whichever checkout the command was invoked from
|
|
88
|
+
* (a session worktree, most often). Never checked out, reset, or discarded.
|
|
89
|
+
*/
|
|
90
|
+
async function syncCanonicalClone(env, clone, defaultBranch) {
|
|
91
|
+
const branch = await currentBranch(env.git, clone);
|
|
75
92
|
if (branch !== defaultBranch) {
|
|
76
|
-
return { attempted: false, synced: false, reason:
|
|
93
|
+
return { attempted: false, synced: false, reason: `the canonical clone (${clone}) is not on the default branch` };
|
|
77
94
|
}
|
|
78
|
-
if (!(await hasRemote(env.git,
|
|
95
|
+
if (!(await hasRemote(env.git, clone))) {
|
|
79
96
|
return { attempted: false, synced: false, reason: 'no remote configured' };
|
|
80
97
|
}
|
|
81
|
-
const fetched = await fetchOrigin(env.git,
|
|
98
|
+
const fetched = await fetchOrigin(env.git, clone, defaultBranch);
|
|
82
99
|
if (!fetched) {
|
|
83
100
|
return { attempted: true, synced: false, reason: 'fetch failed' };
|
|
84
101
|
}
|
|
85
|
-
const merge = await env.git.run(['merge', '--ff-only', `origin/${defaultBranch}`], { cwd:
|
|
102
|
+
const merge = await env.git.run(['merge', '--ff-only', `origin/${defaultBranch}`], { cwd: clone, allowFailure: true });
|
|
86
103
|
if (merge.exitCode !== 0) {
|
|
87
104
|
return { attempted: true, synced: false, reason: 'cannot fast-forward (diverged from origin)' };
|
|
88
105
|
}
|
|
89
106
|
return { attempted: true, synced: true };
|
|
90
107
|
}
|
|
91
108
|
/** D3: opt-in, and scoped to a worktree `session start` made — never the one this command is currently running from. */
|
|
92
|
-
async function reapWorktree(env, store, branch, requested) {
|
|
109
|
+
async function reapWorktree(env, store, clone, branch, requested) {
|
|
93
110
|
if (!requested) {
|
|
94
111
|
return { attempted: false, reaped: false, reason: 'pass --reap, or run `ctxr session reap`' };
|
|
95
112
|
}
|
|
96
|
-
const worktrees = await listWorktrees(env.git,
|
|
113
|
+
const worktrees = await listWorktrees(env.git, clone);
|
|
97
114
|
const target = worktrees.find((w) => w.branch === branch);
|
|
98
115
|
if (!target) {
|
|
99
116
|
return { attempted: true, reaped: false, reason: 'no worktree found for this branch' };
|
|
@@ -101,26 +118,40 @@ async function reapWorktree(env, store, branch, requested) {
|
|
|
101
118
|
if (!isSessionBranch(store.config, branch) && !isSessionWorktreePath(store.config, target.path)) {
|
|
102
119
|
return { attempted: true, reaped: false, reason: 'not a session worktree' };
|
|
103
120
|
}
|
|
104
|
-
|
|
121
|
+
// The hazard is the INVOKING directory, not the resolved store root: removing
|
|
122
|
+
// the worktree this process stands in pulls the caller's cwd out from under it.
|
|
123
|
+
if (isInside(env.cwd, target.path)) {
|
|
105
124
|
return {
|
|
106
125
|
attempted: true,
|
|
107
126
|
reaped: false,
|
|
108
|
-
reason:
|
|
127
|
+
reason: `cannot remove the worktree this command is running from; re-run from the canonical clone (${clone}), or run \`ctxr session reap\` there`,
|
|
109
128
|
};
|
|
110
129
|
}
|
|
111
130
|
if (!(await isWorkingTreeClean(env.git, target.path))) {
|
|
112
131
|
return { attempted: true, reaped: false, reason: 'worktree has uncommitted changes' };
|
|
113
132
|
}
|
|
114
|
-
await removeWorktree(env.git,
|
|
115
|
-
await deleteBranch(env.git,
|
|
133
|
+
await removeWorktree(env.git, clone, target.path);
|
|
134
|
+
await deleteBranch(env.git, clone, branch);
|
|
116
135
|
return { attempted: true, reaped: true };
|
|
117
136
|
}
|
|
137
|
+
/** True when `dir` IS `parent` or lies anywhere beneath it. */
|
|
138
|
+
function isInside(dir, parent) {
|
|
139
|
+
const resolved = path.resolve(dir);
|
|
140
|
+
const root = path.resolve(parent);
|
|
141
|
+
return resolved === root || resolved.startsWith(root + path.sep);
|
|
142
|
+
}
|
|
143
|
+
/** A step that did not happen names why, whether or not it was attempted — `attempted` stays on the JSON outcome for callers that distinguish the two. */
|
|
144
|
+
function stepSummary(done, reason) {
|
|
145
|
+
if (done)
|
|
146
|
+
return 'ok';
|
|
147
|
+
return reason ? `skipped: ${reason}` : 'not attempted';
|
|
148
|
+
}
|
|
118
149
|
function outcome(store, branch, pr, gate, merged, sync, reap) {
|
|
119
150
|
const summary = gate === 'declined'
|
|
120
151
|
? `Merge declined for PR #${pr.number}; nothing landed.`
|
|
121
152
|
: `PR #${pr.number} ${merged ? 'merged' : 'not merged'}` +
|
|
122
|
-
`; sync ${sync.synced
|
|
123
|
-
`; reap ${reap.reaped
|
|
153
|
+
`; sync ${stepSummary(sync.synced, sync.reason)}` +
|
|
154
|
+
`; reap ${stepSummary(reap.reaped, reap.reason)}.`;
|
|
124
155
|
return {
|
|
125
156
|
exitCode: ExitCode.Ok,
|
|
126
157
|
data: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session-land.js","sourceRoot":"","sources":["../../src/commands/session-land.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAGhE,OAAO,EAAE,aAAa,EAAe,MAAM,gBAAgB,CAAC;AAC5D,OAAO,EACL,sBAAsB,EACtB,sBAAsB,EACtB,sBAAsB,EACtB,4BAA4B,EAC5B,4BAA4B,EAC5B,+BAA+B,EAC/B,+BAA+B,GAChC,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AACjD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,cAAc,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;
|
|
1
|
+
{"version":3,"file":"session-land.js","sourceRoot":"","sources":["../../src/commands/session-land.ts"],"names":[],"mappings":"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"}
|
|
@@ -16,8 +16,15 @@ export interface VerifyData {
|
|
|
16
16
|
* harness-portability spec: exercises core store operations "from an
|
|
17
17
|
* environment with no harness-specific state present" — nothing here reads
|
|
18
18
|
* any harness-specific file or env var, so the property under test holds
|
|
19
|
-
* by construction; this command
|
|
20
|
-
*
|
|
19
|
+
* by construction; this command runs each named operation in order and
|
|
20
|
+
* stops at the first failure, naming it (never running the rest).
|
|
21
|
+
*
|
|
22
|
+
* inline-conventions-and-mission: the old "every skill has an index entry"
|
|
23
|
+
* check is gone along with the index itself. Portability is now verified by
|
|
24
|
+
* confirming every managed AGENTS.md section is present, that its inlined
|
|
25
|
+
* conventions/mission content matches the source files on disk (the same
|
|
26
|
+
* drift `ctxr doctor` checks — see `integrity-checks.ts`), and that a skill
|
|
27
|
+
* is reachable by path at the configured skills path.
|
|
21
28
|
*/
|
|
22
29
|
export declare function execute(store: Store, _flags?: VerifyFlags): Promise<CommandOutcome<VerifyData>>;
|
|
23
30
|
//# sourceMappingURL=verify.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"verify.d.ts","sourceRoot":"","sources":["../../src/commands/verify.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"verify.d.ts","sourceRoot":"","sources":["../../src/commands/verify.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAoB1E,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAE9C,eAAO,MAAM,QAAQ,EAAE,eAAuC,CAAC;AAE/D,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,gBAAgB;IAC/B,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC;IACxB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,UAAU;IACzB,KAAK,EAAE,gBAAgB,EAAE,CAAC;CAC3B;AAWD;;;;;;;;;;;;;GAaG;AACH,wBAAsB,OAAO,CAAC,KAAK,EAAE,KAAK,EAAE,MAAM,GAAE,WAAgB,GAAG,OAAO,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC,CA8FzG"}
|
package/dist/commands/verify.js
CHANGED
|
@@ -1,23 +1,36 @@
|
|
|
1
1
|
import { readFile } from 'node:fs/promises';
|
|
2
2
|
import path from 'node:path';
|
|
3
|
-
import { agentsMdPath } from '../core/agents-doc.js';
|
|
3
|
+
import { AGENTS_MD_CANONICAL_FENCE, AGENTS_MD_CAPTURE_FENCE, AGENTS_MD_CONVENTIONS_FENCE, AGENTS_MD_LEG_ROUTING_FENCE, AGENTS_MD_PLACEMENT_FENCE, agentsMdPath, checkAgentsMdDrift, } from '../core/agents-doc.js';
|
|
4
4
|
import { readCatalogSection } from '../core/catalog/build.js';
|
|
5
5
|
import { catalogSectionsFor } from '../core/catalog/model.js';
|
|
6
6
|
import { ExitCode } from '../core/exit-codes.js';
|
|
7
|
+
import { readFencedRegionFromFile } from '../core/fs/fenced-region.js';
|
|
7
8
|
import { buildGraphFromNotes, graphBuildOptions } from '../core/graph/model.js';
|
|
8
9
|
import { writeGraph } from '../core/graph/persist.js';
|
|
9
10
|
import { listNotes } from '../core/notes/list.js';
|
|
10
|
-
import {
|
|
11
|
+
import { scanSkills } from '../core/skills.js';
|
|
11
12
|
export const requires = { store: 'required' };
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
}
|
|
13
|
+
/** Every section that renders unconditionally — Mission is checked separately since it's optional. */
|
|
14
|
+
const ALWAYS_PRESENT_SECTIONS = [
|
|
15
|
+
{ label: 'store fundamentals', fence: AGENTS_MD_CANONICAL_FENCE },
|
|
16
|
+
{ label: 'retrieval routing', fence: AGENTS_MD_LEG_ROUTING_FENCE },
|
|
17
|
+
{ label: 'capture', fence: AGENTS_MD_CAPTURE_FENCE },
|
|
18
|
+
{ label: 'placement', fence: AGENTS_MD_PLACEMENT_FENCE },
|
|
19
|
+
{ label: 'store conventions', fence: AGENTS_MD_CONVENTIONS_FENCE },
|
|
20
|
+
];
|
|
15
21
|
/**
|
|
16
22
|
* harness-portability spec: exercises core store operations "from an
|
|
17
23
|
* environment with no harness-specific state present" — nothing here reads
|
|
18
24
|
* any harness-specific file or env var, so the property under test holds
|
|
19
|
-
* by construction; this command
|
|
20
|
-
*
|
|
25
|
+
* by construction; this command runs each named operation in order and
|
|
26
|
+
* stops at the first failure, naming it (never running the rest).
|
|
27
|
+
*
|
|
28
|
+
* inline-conventions-and-mission: the old "every skill has an index entry"
|
|
29
|
+
* check is gone along with the index itself. Portability is now verified by
|
|
30
|
+
* confirming every managed AGENTS.md section is present, that its inlined
|
|
31
|
+
* conventions/mission content matches the source files on disk (the same
|
|
32
|
+
* drift `ctxr doctor` checks — see `integrity-checks.ts`), and that a skill
|
|
33
|
+
* is reachable by path at the configured skills path.
|
|
21
34
|
*/
|
|
22
35
|
export async function execute(store, _flags = {}) {
|
|
23
36
|
const steps = [];
|
|
@@ -51,49 +64,59 @@ export async function execute(store, _flags = {}) {
|
|
|
51
64
|
});
|
|
52
65
|
return finish(store, steps);
|
|
53
66
|
}
|
|
54
|
-
// 3.
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
67
|
+
// 3. Every managed AGENTS.md section is present.
|
|
68
|
+
for (const { label, fence } of ALWAYS_PRESENT_SECTIONS) {
|
|
69
|
+
const region = await readFencedRegionFromFile(agentsMdPath(store.root), fence);
|
|
70
|
+
if (region.length === 0) {
|
|
71
|
+
steps.push({
|
|
72
|
+
operation: `AGENTS.md section: ${label}`,
|
|
73
|
+
status: 'fail',
|
|
74
|
+
detail: `The "${label}" section is missing from AGENTS.md — run \`ctxr update\`.`,
|
|
75
|
+
});
|
|
76
|
+
return finish(store, steps);
|
|
77
|
+
}
|
|
59
78
|
}
|
|
60
|
-
|
|
79
|
+
steps.push({ operation: 'AGENTS.md sections present', status: 'pass' });
|
|
80
|
+
// 4. Inlined conventions/mission content matches its source files.
|
|
81
|
+
const drift = await checkAgentsMdDrift(store.root, store.config);
|
|
82
|
+
if (drift.driftedConventions.length > 0) {
|
|
61
83
|
steps.push({
|
|
62
|
-
operation: '
|
|
84
|
+
operation: 'inlined conventions match source',
|
|
63
85
|
status: 'fail',
|
|
64
|
-
detail:
|
|
86
|
+
detail: `AGENTS.md's "Store conventions" section no longer matches: ${drift.driftedConventions.join(', ')} — run \`ctxr update\`.`,
|
|
65
87
|
});
|
|
66
88
|
return finish(store, steps);
|
|
67
89
|
}
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
for (const procedure of procedures) {
|
|
72
|
-
if (!agentsMdContent.includes(procedureIndexEntry(procedure.title, procedure.path))) {
|
|
90
|
+
steps.push({ operation: 'inlined conventions match source', status: 'pass' });
|
|
91
|
+
if (store.config.organize.mission_path) {
|
|
92
|
+
if (drift.driftedMission) {
|
|
73
93
|
steps.push({
|
|
74
|
-
operation:
|
|
94
|
+
operation: 'inlined mission matches source',
|
|
75
95
|
status: 'fail',
|
|
76
|
-
detail: `AGENTS.md's
|
|
96
|
+
detail: `AGENTS.md's "Mission" section no longer matches "${drift.driftedMission}" — run \`ctxr update\`.`,
|
|
77
97
|
});
|
|
78
98
|
return finish(store, steps);
|
|
79
99
|
}
|
|
100
|
+
steps.push({ operation: 'inlined mission matches source', status: 'pass' });
|
|
80
101
|
}
|
|
81
|
-
|
|
102
|
+
// 6. Follow one skill by path at the configured skills path.
|
|
103
|
+
const skills = await scanSkills(store.root, store.config);
|
|
104
|
+
const first = skills[0];
|
|
82
105
|
if (!first) {
|
|
83
106
|
steps.push({
|
|
84
|
-
operation: 'follow a
|
|
107
|
+
operation: 'follow a skill',
|
|
85
108
|
status: 'fail',
|
|
86
|
-
detail: `No
|
|
109
|
+
detail: `No skill files exist at "${store.config.harness.skills_path}".`,
|
|
87
110
|
});
|
|
88
111
|
return finish(store, steps);
|
|
89
112
|
}
|
|
90
113
|
try {
|
|
91
114
|
await readFile(path.join(store.root, first.path), 'utf8');
|
|
92
|
-
steps.push({ operation: `follow
|
|
115
|
+
steps.push({ operation: `follow skill "${first.title}" by path`, status: 'pass' });
|
|
93
116
|
}
|
|
94
117
|
catch (err) {
|
|
95
118
|
steps.push({
|
|
96
|
-
operation: `follow
|
|
119
|
+
operation: `follow skill "${first.title}" by path`,
|
|
97
120
|
status: 'fail',
|
|
98
121
|
detail: err instanceof Error ? err.message : String(err),
|
|
99
122
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"verify.js","sourceRoot":"","sources":["../../src/commands/verify.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,OAAO,
|
|
1
|
+
{"version":3,"file":"verify.js","sourceRoot":"","sources":["../../src/commands/verify.ts"],"names":[],"mappings":"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"}
|
|
@@ -25,7 +25,7 @@ export declare const DEFAULT_VISIBILITY_CONTEXT = "private";
|
|
|
25
25
|
/**
|
|
26
26
|
* context-store spec (contexture-home-layout): `.contexture/` is the tool's
|
|
27
27
|
* home directory. Only its cache subpath is derived/gitignored — the
|
|
28
|
-
* catalog and
|
|
28
|
+
* catalog and skill subdirectories are authored-but-tool-owned and stay
|
|
29
29
|
* tracked.
|
|
30
30
|
*/
|
|
31
31
|
export declare const DEFAULT_DERIVED_PATHS: readonly ['.contexture/cache/'];
|
|
@@ -35,9 +35,25 @@ export declare const DEFAULT_DERIVED_PATHS: readonly ['.contexture/cache/'];
|
|
|
35
35
|
* harnesses with skill auto-discovery read — one file, one hop. A store
|
|
36
36
|
* driven by another harness points this at that harness's skills directory.
|
|
37
37
|
*/
|
|
38
|
-
export declare const
|
|
39
|
-
/**
|
|
40
|
-
|
|
38
|
+
export declare const DEFAULT_SKILLS_PATH = ".claude/skills/";
|
|
39
|
+
/**
|
|
40
|
+
* harness-portability spec: the guidance directory holding contexture's
|
|
41
|
+
* shipped baseline convention file, the operator's own convention files
|
|
42
|
+
* (inlined into AGENTS.md's "Store conventions" section — see
|
|
43
|
+
* agents-doc.ts, from inline-conventions-and-mission), and (per
|
|
44
|
+
* context-organize) the mission document.
|
|
45
|
+
*/
|
|
46
|
+
export declare const DEFAULT_GUIDANCE_PATH = ".contexture/guidance/";
|
|
47
|
+
/** The shipped, contexture-owned baseline convention — never hand-edited; refreshed by `ctxr update` like a skill copy. */
|
|
48
|
+
export declare const DEFAULT_BASELINE_CONVENTION_FILE_NAME = "baseline-convention.md";
|
|
49
|
+
/** The operator-authored convention file seeded at init. */
|
|
50
|
+
export declare const DEFAULT_CUSTOM_CONVENTION_FILE_NAME = "custom-convention.md";
|
|
51
|
+
/** context-organize spec: the store's standing current-state document's filename, under the guidance directory. */
|
|
52
|
+
export declare const DEFAULT_MISSION_FILE_NAME = "mission.md";
|
|
53
|
+
/** context-organize spec: `organize.mission_path`'s shipped default — every store gets a mission document from `init` onward, seeded there. */
|
|
54
|
+
export declare const DEFAULT_MISSION_PATH = ".contexture/guidance/mission.md";
|
|
55
|
+
/** store-integrity spec: AGENTS.md's inlined "Store conventions" section's size ceiling when `harness.convention_max_bytes` is unset. */
|
|
56
|
+
export declare const DEFAULT_CONVENTION_MAX_BYTES: number;
|
|
41
57
|
/** Paths excluded from every retrieval leg by default. */
|
|
42
58
|
export declare const DEFAULT_EXCLUDE_PATHS: readonly ['.contexture/'];
|
|
43
59
|
/** graph-context-document spec: no relation vocabulary by default — no typed edges until a store declares names. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"defaults.d.ts","sourceRoot":"","sources":["../../src/config/defaults.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAEtE;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,4BAA4B,SAAS,CAAC;AAEnD;;;;;;GAMG;AACH,eAAO,MAAM,8BAA8B,UAAU,CAAC;AAEtD,gFAAgF;AAChF,eAAO,MAAM,0BAA0B,YAAY,CAAC;AAEpD;;;;;GAKG;AACH,eAAO,MAAM,qBAAqB,YAAI,oBAAoB,CAAU,CAAC;AAErE;;;;;GAKG;AACH,eAAO,MAAM,
|
|
1
|
+
{"version":3,"file":"defaults.d.ts","sourceRoot":"","sources":["../../src/config/defaults.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAEtE;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,4BAA4B,SAAS,CAAC;AAEnD;;;;;;GAMG;AACH,eAAO,MAAM,8BAA8B,UAAU,CAAC;AAEtD,gFAAgF;AAChF,eAAO,MAAM,0BAA0B,YAAY,CAAC;AAEpD;;;;;GAKG;AACH,eAAO,MAAM,qBAAqB,YAAI,oBAAoB,CAAU,CAAC;AAErE;;;;;GAKG;AACH,eAAO,MAAM,mBAAmB,oBAAoB,CAAC;AAErD;;;;;;GAMG;AACH,eAAO,MAAM,qBAAqB,0BAA0B,CAAC;AAE7D,2HAA2H;AAC3H,eAAO,MAAM,qCAAqC,2BAA2B,CAAC;AAE9E,4DAA4D;AAC5D,eAAO,MAAM,mCAAmC,yBAAyB,CAAC;AAE1E,mHAAmH;AACnH,eAAO,MAAM,yBAAyB,eAAe,CAAC;AAEtD,+IAA+I;AAC/I,eAAO,MAAM,oBAAoB,oCAAyD,CAAC;AAE3F,yIAAyI;AACzI,eAAO,MAAM,4BAA4B,QAAY,CAAC;AAEtD,0DAA0D;AAC1D,eAAO,MAAM,qBAAqB,YAAI,cAAc,CAAU,CAAC;AAE/D,oHAAoH;AACpH,eAAO,MAAM,iBAAiB,EAAE,SAAS,MAAM,EAAO,CAAC;AAEvD,8HAA8H;AAC9H,eAAO,MAAM,sBAAsB;IACjC,aAAa;IACb,OAAO;IACP,UAAU;IACV,sBAAsB,EAAQ,MAAM,EAAE;CACvC,CAAC;AAEF,wFAAwF;AACxF,eAAO,MAAM,sBAAsB,gBAAgB,CAAC;AAEpD,8FAA8F;AAC9F,eAAO,MAAM,6BAA6B,aAAa,CAAC;AAExD,uGAAuG;AACvG,eAAO,MAAM,2BAA2B,QAAQ,CAAC;AAEjD,oFAAoF;AACpF,eAAO,MAAM,+BAA+B,OAAO,CAAC;AAEpD,2HAA2H;AAC3H,eAAO,MAAM,oBAAoB,yBAAyB,CAAC;AAE3D,6GAA6G;AAC7G,eAAO,MAAM,iCAAiC,QAAY,CAAC;AAE3D,8JAA8J;AAC9J,eAAO,MAAM,0BAA0B,EAAE,SAAS,MAAM,EAAO,CAAC;AAChE,eAAO,MAAM,kBAAkB,EAAE,SAAS,cAAc,EAAO,CAAC;AAEhE,uGAAuG;AACvG,eAAO,MAAM,kBAAkB,WAAW,CAAC;AAE3C,gJAAgJ;AAChJ,eAAO,MAAM,uBAAuB,UAA6F,CAAC;AAElI,4FAA4F;AAC5F,eAAO,MAAM,oBAAoB,aAAa,CAAC;AAE/C,iHAAiH;AACjH,eAAO,MAAM,yBAAyB,IAAI,CAAC;AAE3C;;;;;GAKG;AACH,eAAO,MAAM,gBAAgB,EAAE,SAAS,kBAAkB,EAGzD,CAAC"}
|
package/dist/config/defaults.js
CHANGED
|
@@ -24,7 +24,7 @@ export const DEFAULT_VISIBILITY_CONTEXT = 'private';
|
|
|
24
24
|
/**
|
|
25
25
|
* context-store spec (contexture-home-layout): `.contexture/` is the tool's
|
|
26
26
|
* home directory. Only its cache subpath is derived/gitignored — the
|
|
27
|
-
* catalog and
|
|
27
|
+
* catalog and skill subdirectories are authored-but-tool-owned and stay
|
|
28
28
|
* tracked.
|
|
29
29
|
*/
|
|
30
30
|
export const DEFAULT_DERIVED_PATHS = ['.contexture/cache/'];
|
|
@@ -34,9 +34,25 @@ export const DEFAULT_DERIVED_PATHS = ['.contexture/cache/'];
|
|
|
34
34
|
* harnesses with skill auto-discovery read — one file, one hop. A store
|
|
35
35
|
* driven by another harness points this at that harness's skills directory.
|
|
36
36
|
*/
|
|
37
|
-
export const
|
|
38
|
-
/**
|
|
39
|
-
|
|
37
|
+
export const DEFAULT_SKILLS_PATH = '.claude/skills/';
|
|
38
|
+
/**
|
|
39
|
+
* harness-portability spec: the guidance directory holding contexture's
|
|
40
|
+
* shipped baseline convention file, the operator's own convention files
|
|
41
|
+
* (inlined into AGENTS.md's "Store conventions" section — see
|
|
42
|
+
* agents-doc.ts, from inline-conventions-and-mission), and (per
|
|
43
|
+
* context-organize) the mission document.
|
|
44
|
+
*/
|
|
45
|
+
export const DEFAULT_GUIDANCE_PATH = '.contexture/guidance/';
|
|
46
|
+
/** The shipped, contexture-owned baseline convention — never hand-edited; refreshed by `ctxr update` like a skill copy. */
|
|
47
|
+
export const DEFAULT_BASELINE_CONVENTION_FILE_NAME = 'baseline-convention.md';
|
|
48
|
+
/** The operator-authored convention file seeded at init. */
|
|
49
|
+
export const DEFAULT_CUSTOM_CONVENTION_FILE_NAME = 'custom-convention.md';
|
|
50
|
+
/** context-organize spec: the store's standing current-state document's filename, under the guidance directory. */
|
|
51
|
+
export const DEFAULT_MISSION_FILE_NAME = 'mission.md';
|
|
52
|
+
/** context-organize spec: `organize.mission_path`'s shipped default — every store gets a mission document from `init` onward, seeded there. */
|
|
53
|
+
export const DEFAULT_MISSION_PATH = `${DEFAULT_GUIDANCE_PATH}${DEFAULT_MISSION_FILE_NAME}`;
|
|
54
|
+
/** store-integrity spec: AGENTS.md's inlined "Store conventions" section's size ceiling when `harness.convention_max_bytes` is unset. */
|
|
55
|
+
export const DEFAULT_CONVENTION_MAX_BYTES = 32 * 1024;
|
|
40
56
|
/** Paths excluded from every retrieval leg by default. */
|
|
41
57
|
export const DEFAULT_EXCLUDE_PATHS = ['.contexture/'];
|
|
42
58
|
/** graph-context-document spec: no relation vocabulary by default — no typed edges until a store declares names. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"defaults.js","sourceRoot":"","sources":["../../src/config/defaults.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;GAWG;AACH,MAAM,CAAC,MAAM,4BAA4B,GAAG,MAAM,CAAC;AAEnD;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,8BAA8B,GAAG,OAAO,CAAC;AAEtD,gFAAgF;AAChF,MAAM,CAAC,MAAM,0BAA0B,GAAG,SAAS,CAAC;AAEpD;;;;;GAKG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,oBAAoB,CAAU,CAAC;AAErE;;;;;GAKG;AACH,MAAM,CAAC,MAAM,
|
|
1
|
+
{"version":3,"file":"defaults.js","sourceRoot":"","sources":["../../src/config/defaults.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;GAWG;AACH,MAAM,CAAC,MAAM,4BAA4B,GAAG,MAAM,CAAC;AAEnD;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,8BAA8B,GAAG,OAAO,CAAC;AAEtD,gFAAgF;AAChF,MAAM,CAAC,MAAM,0BAA0B,GAAG,SAAS,CAAC;AAEpD;;;;;GAKG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,oBAAoB,CAAU,CAAC;AAErE;;;;;GAKG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG,iBAAiB,CAAC;AAErD;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAG,uBAAuB,CAAC;AAE7D,2HAA2H;AAC3H,MAAM,CAAC,MAAM,qCAAqC,GAAG,wBAAwB,CAAC;AAE9E,4DAA4D;AAC5D,MAAM,CAAC,MAAM,mCAAmC,GAAG,sBAAsB,CAAC;AAE1E,mHAAmH;AACnH,MAAM,CAAC,MAAM,yBAAyB,GAAG,YAAY,CAAC;AAEtD,+IAA+I;AAC/I,MAAM,CAAC,MAAM,oBAAoB,GAAG,GAAG,qBAAqB,GAAG,yBAAyB,EAAE,CAAC;AAE3F,yIAAyI;AACzI,MAAM,CAAC,MAAM,4BAA4B,GAAG,EAAE,GAAG,IAAI,CAAC;AAEtD,0DAA0D;AAC1D,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,cAAc,CAAU,CAAC;AAE/D,oHAAoH;AACpH,MAAM,CAAC,MAAM,iBAAiB,GAAsB,EAAE,CAAC;AAEvD,8HAA8H;AAC9H,MAAM,CAAC,MAAM,sBAAsB,GAAG;IACpC,aAAa,EAAE,CAAC;IAChB,OAAO,EAAE,CAAC;IACV,UAAU,EAAE,EAAE;IACd,sBAAsB,EAAE,EAAc;CACvC,CAAC;AAEF,wFAAwF;AACxF,MAAM,CAAC,MAAM,sBAAsB,GAAG,aAAa,CAAC;AAEpD,8FAA8F;AAC9F,MAAM,CAAC,MAAM,6BAA6B,GAAG,UAAU,CAAC;AAExD,uGAAuG;AACvG,MAAM,CAAC,MAAM,2BAA2B,GAAG,KAAK,CAAC;AAEjD,oFAAoF;AACpF,MAAM,CAAC,MAAM,+BAA+B,GAAG,IAAI,CAAC;AAEpD,2HAA2H;AAC3H,MAAM,CAAC,MAAM,oBAAoB,GAAG,sBAAsB,CAAC;AAE3D,6GAA6G;AAC7G,MAAM,CAAC,MAAM,iCAAiC,GAAG,EAAE,GAAG,IAAI,CAAC;AAE3D,8JAA8J;AAC9J,MAAM,CAAC,MAAM,0BAA0B,GAAsB,EAAE,CAAC;AAChE,MAAM,CAAC,MAAM,kBAAkB,GAA8B,EAAE,CAAC;AAEhE,uGAAuG;AACvG,MAAM,CAAC,MAAM,kBAAkB,GAAG,QAAQ,CAAC;AAE3C,gJAAgJ;AAChJ,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAC,YAAY,EAAE,YAAY,EAAE,cAAc,EAAE,UAAU,EAAE,aAAa,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;AAElI,4FAA4F;AAC5F,MAAM,CAAC,MAAM,oBAAoB,GAAG,UAAU,CAAC;AAE/C,iHAAiH;AACjH,MAAM,CAAC,MAAM,yBAAyB,GAAG,CAAC,CAAC;AAE3C;;;;;GAKG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAkC;IAC7D,EAAE,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE;IAC/B,EAAE,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,oBAAoB,EAAE;CAClD,CAAC"}
|
package/dist/config/schema.d.ts
CHANGED
|
@@ -10,8 +10,19 @@ import { z } from 'zod';
|
|
|
10
10
|
* is "a config-default change plus a migration, never a spec or code
|
|
11
11
|
* rewrite" (design.md D7): every consumer already reads
|
|
12
12
|
* config.fields.visibility, never a literal key, so nothing else changed.
|
|
13
|
+
*
|
|
14
|
+
* Bumped to 3 by the procedures-to-skills key rename migration
|
|
15
|
+
* (rename-procedures-to-skills, 0003-rename-procedures-path-to-skills):
|
|
16
|
+
* `harness.procedures_path` -> `harness.skills_path`. HarnessSchema's
|
|
17
|
+
* transform accepts the old key through this version so an unmigrated
|
|
18
|
+
* store still loads (see schema.ts's HarnessSchema comment).
|
|
19
|
+
*
|
|
20
|
+
* Bumped to 4 by the conventions-to-guidance key rename migration
|
|
21
|
+
* (rename-conventions-path-to-guidance-path, 0004-rename-conventions-path-to-guidance-path):
|
|
22
|
+
* `harness.conventions_path` -> `harness.guidance_path`. HarnessSchema's
|
|
23
|
+
* transform accepts the old key through this version too, the same way.
|
|
13
24
|
*/
|
|
14
|
-
export declare const SUPPORTED_SCHEMA_VERSION =
|
|
25
|
+
export declare const SUPPORTED_SCHEMA_VERSION = 4;
|
|
15
26
|
export declare const TaxonomyLayerSchema: z.ZodObject<{
|
|
16
27
|
name: z.ZodString;
|
|
17
28
|
path: z.ZodString;
|
|
@@ -124,10 +135,23 @@ export declare const StoreConfigSchema: z.ZodObject<{
|
|
|
124
135
|
rollup_stale_days: z.ZodDefault<z.ZodNumber>;
|
|
125
136
|
mission_path: z.ZodOptional<z.ZodString>;
|
|
126
137
|
}, z.core.$strip>;
|
|
127
|
-
harness: z.ZodObject<{
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
138
|
+
harness: z.ZodPipe<z.ZodObject<{
|
|
139
|
+
skills_path: z.ZodOptional<z.ZodString>;
|
|
140
|
+
procedures_path: z.ZodOptional<z.ZodString>;
|
|
141
|
+
guidance_path: z.ZodOptional<z.ZodString>;
|
|
142
|
+
conventions_path: z.ZodOptional<z.ZodString>;
|
|
143
|
+
convention_max_bytes: z.ZodOptional<z.ZodNumber>;
|
|
144
|
+
}, z.core.$strip>, z.ZodTransform<{
|
|
145
|
+
skills_path: string;
|
|
146
|
+
guidance_path: string;
|
|
147
|
+
convention_max_bytes?: number | undefined;
|
|
148
|
+
}, {
|
|
149
|
+
skills_path?: string | undefined;
|
|
150
|
+
procedures_path?: string | undefined;
|
|
151
|
+
guidance_path?: string | undefined;
|
|
152
|
+
conventions_path?: string | undefined;
|
|
153
|
+
convention_max_bytes?: number | undefined;
|
|
154
|
+
}>>;
|
|
131
155
|
adapters: z.ZodArray<z.ZodObject<{
|
|
132
156
|
id: z.ZodString;
|
|
133
157
|
kind: z.ZodEnum<{
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/config/schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB;;;;GAIG;AACH
|
|
1
|
+
{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/config/schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB;;;;GAIG;AACH;;;;;;;;;;;;;;;;;GAiBG;AACH,eAAO,MAAM,wBAAwB,IAAI,CAAC;AAE1C,eAAO,MAAM,mBAAmB;;;;iBAI9B,CAAC;AAqCH;;;;;;GAMG;AACH,QAAA,MAAM,mBAAmB;;;;;iBAKvB,CAAC;AA2CH;;;;;GAKG;AACH,QAAA,MAAM,cAAc;;;;;;;;;iBAQlB,CAAC;AAyGH,QAAA,MAAM,wBAAwB;;;;;;;iBAI5B,CAAC;AAEH,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAkBd,CAAC;AAEjB,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAC;AAC5D,MAAM,MAAM,mBAAmB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAC;AACtE,MAAM,MAAM,mBAAmB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAC;AACtE,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,cAAc,CAAC,CAAC;AAC5D,MAAM,MAAM,kBAAkB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,wBAAwB,CAAC,CAAC"}
|
package/dist/config/schema.js
CHANGED
|
@@ -10,8 +10,19 @@ import { z } from 'zod';
|
|
|
10
10
|
* is "a config-default change plus a migration, never a spec or code
|
|
11
11
|
* rewrite" (design.md D7): every consumer already reads
|
|
12
12
|
* config.fields.visibility, never a literal key, so nothing else changed.
|
|
13
|
+
*
|
|
14
|
+
* Bumped to 3 by the procedures-to-skills key rename migration
|
|
15
|
+
* (rename-procedures-to-skills, 0003-rename-procedures-path-to-skills):
|
|
16
|
+
* `harness.procedures_path` -> `harness.skills_path`. HarnessSchema's
|
|
17
|
+
* transform accepts the old key through this version so an unmigrated
|
|
18
|
+
* store still loads (see schema.ts's HarnessSchema comment).
|
|
19
|
+
*
|
|
20
|
+
* Bumped to 4 by the conventions-to-guidance key rename migration
|
|
21
|
+
* (rename-conventions-path-to-guidance-path, 0004-rename-conventions-path-to-guidance-path):
|
|
22
|
+
* `harness.conventions_path` -> `harness.guidance_path`. HarnessSchema's
|
|
23
|
+
* transform accepts the old key through this version too, the same way.
|
|
13
24
|
*/
|
|
14
|
-
export const SUPPORTED_SCHEMA_VERSION =
|
|
25
|
+
export const SUPPORTED_SCHEMA_VERSION = 4;
|
|
15
26
|
export const TaxonomyLayerSchema = z.object({
|
|
16
27
|
name: z.string().min(1),
|
|
17
28
|
path: z.string().min(1),
|
|
@@ -141,10 +152,67 @@ const OrganizeSchema = z.object({
|
|
|
141
152
|
*/
|
|
142
153
|
mission_path: z.string().min(1).optional(),
|
|
143
154
|
});
|
|
144
|
-
/**
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
155
|
+
/**
|
|
156
|
+
* harness-portability spec: the portable skill pack and the guidance
|
|
157
|
+
* documents (a shipped baseline convention file, the operator's own
|
|
158
|
+
* convention files, and the mission document) AGENTS.md's generated
|
|
159
|
+
* sections read from and inline.
|
|
160
|
+
*
|
|
161
|
+
* rename-procedures-to-skills migration (0003): `skills_path` is the
|
|
162
|
+
* current key; `procedures_path` is its pre-migration name, accepted here
|
|
163
|
+
* so a store on schema 2 still loads (with a message pointing at `ctxr
|
|
164
|
+
* migrate`, not a raw shape-validation error) rather than failing the
|
|
165
|
+
* moment this schema starts requiring the new key.
|
|
166
|
+
*
|
|
167
|
+
* rename-conventions-path-to-guidance-path migration (0004): `guidance_path`
|
|
168
|
+
* is the current key; `conventions_path` is its pre-migration name. Unlike
|
|
169
|
+
* `skills_path`, this key always had a workable default, so an unmigrated
|
|
170
|
+
* store loads silently onto that default rather than erroring — `ctxr
|
|
171
|
+
* migrate` moves the directory and rewrites the key, but nothing breaks if
|
|
172
|
+
* it hasn't run yet.
|
|
173
|
+
*
|
|
174
|
+
* The transform below is the ONLY place any of these spellings is read —
|
|
175
|
+
* every other consumer in the codebase sees `config.harness.skills_path` /
|
|
176
|
+
* `config.harness.guidance_path` and nothing else, so no old key ever leaks
|
|
177
|
+
* past config loading.
|
|
178
|
+
*/
|
|
179
|
+
const HarnessSchema = z
|
|
180
|
+
.object({
|
|
181
|
+
skills_path: z.string().min(1).optional(),
|
|
182
|
+
procedures_path: z.string().min(1).optional(),
|
|
183
|
+
guidance_path: z.string().min(1).optional(),
|
|
184
|
+
conventions_path: z.string().min(1).optional(),
|
|
185
|
+
/**
|
|
186
|
+
* compose-store-guidance-documents design.md D6: a size ceiling on
|
|
187
|
+
* AGENTS.md's inlined "Store conventions" section, guarding against
|
|
188
|
+
* unbounded growth now that its content is inlined rather than indexed
|
|
189
|
+
* (inline-conventions-and-mission). Optional with no schema-level
|
|
190
|
+
* default (falls back to `DEFAULT_CONVENTION_MAX_BYTES` at the one
|
|
191
|
+
* doctor check that reads it) so this stays purely additive — no
|
|
192
|
+
* existing `StoreConfig` object literal needs updating to compile.
|
|
193
|
+
*/
|
|
194
|
+
convention_max_bytes: z.number().int().positive().optional(),
|
|
195
|
+
})
|
|
196
|
+
.transform((value, ctx) => {
|
|
197
|
+
const skillsPath = value.skills_path ?? value.procedures_path;
|
|
198
|
+
if (skillsPath === undefined) {
|
|
199
|
+
ctx.addIssue({
|
|
200
|
+
code: z.ZodIssueCode.custom,
|
|
201
|
+
path: ['skills_path'],
|
|
202
|
+
message: 'harness.skills_path is missing. If this store predates the skills-path rename, run `ctxr migrate`.',
|
|
203
|
+
});
|
|
204
|
+
return z.NEVER;
|
|
205
|
+
}
|
|
206
|
+
const guidancePath = value.guidance_path ?? value.conventions_path ?? '.contexture/guidance/';
|
|
207
|
+
// Spread, not a plain key, so the output type keeps `convention_max_bytes`
|
|
208
|
+
// genuinely optional (`key?: number`) rather than always-present-but-possibly-undefined
|
|
209
|
+
// (`key: number | undefined`) — the latter would require every existing
|
|
210
|
+
// `StoreConfig` object literal in the codebase to add the key just to compile.
|
|
211
|
+
return {
|
|
212
|
+
skills_path: skillsPath,
|
|
213
|
+
guidance_path: guidancePath,
|
|
214
|
+
...(value.convention_max_bytes !== undefined ? { convention_max_bytes: value.convention_max_bytes } : {}),
|
|
215
|
+
};
|
|
148
216
|
});
|
|
149
217
|
/**
|
|
150
218
|
* adapters spec: the one declared-registration mechanism shared by every
|