@aacombarro89/praxis 0.1.6 → 0.1.8
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/README.md +10 -3
- package/dist/anchors.js +9 -3
- package/dist/anchors.js.map +1 -1
- package/dist/emit.d.ts +25 -0
- package/dist/emit.js +47 -2
- package/dist/emit.js.map +1 -1
- package/dist/packages.d.ts +1 -1
- package/dist/program.d.ts +5 -0
- package/dist/program.js +20 -3
- package/dist/program.js.map +1 -1
- package/dist/sync.d.ts +8 -1
- package/dist/sync.js +114 -7
- package/dist/sync.js.map +1 -1
- package/package.json +1 -1
- package/packages/layer1/instruction-upkeep/rules.md +6 -22
- package/packages/layer1/onboarding/rules.md +6 -10
- package/packages/layer1/session-handoff/rules.md +10 -57
- package/packages/layer1/upkeep/rules.md +8 -15
- package/packages/layer1/wiki-memory/rules.md +11 -49
- package/packages/layer2/node-recipes/rules.md +4 -3
- package/packages/layer2/node-testing/rules.md +4 -0
- package/packages/layer2/python-backend-recipes/rules.md +4 -4
- package/packages/layer2/python-testing/rules.md +4 -0
- package/packages/layer2/react-components/rules.md +4 -0
- package/packages/layer2/react-testing/rules.md +4 -0
package/README.md
CHANGED
|
@@ -30,12 +30,19 @@ It always previews a single diff before writing. Git is your undo.
|
|
|
30
30
|
|
|
31
31
|
## Why it's different
|
|
32
32
|
|
|
33
|
-
|
|
33
|
+
Other tools _generate_ agent instructions once; Praxis **manages** them:
|
|
34
34
|
|
|
35
|
-
- **
|
|
36
|
-
|
|
35
|
+
- **Versioned, pinned, drift-checked.** Methodology ships as composable
|
|
36
|
+
packages pinned in `praxis.yaml`, and `praxis check` fails CI when the
|
|
37
|
+
installed files drift — think Renovate/Dependabot, for your agent
|
|
38
|
+
instruction layer.
|
|
37
39
|
- **A composition / merge step** that folds methodology into an _existing_
|
|
38
40
|
project without overwriting project-specific content.
|
|
41
|
+
- **One neutral source, per-tool outputs** — Claude Code and `AGENTS.md`
|
|
42
|
+
today, more emitters planned.
|
|
43
|
+
|
|
44
|
+
The curated methodology — Layer 1 behavioral rules plus Layer 2 stack recipes
|
|
45
|
+
— is the starting payload that rides this machinery.
|
|
39
46
|
|
|
40
47
|
## The two layers
|
|
41
48
|
|
package/dist/anchors.js
CHANGED
|
@@ -163,15 +163,21 @@ function safeRepoTarget(cwd, target) {
|
|
|
163
163
|
return { abs, rel: rel.split(sep).join("/") };
|
|
164
164
|
}
|
|
165
165
|
function readFrontmatter(text) {
|
|
166
|
-
|
|
166
|
+
// Windows checkouts: tolerate a UTF-8 BOM and CRLF line endings, or the
|
|
167
|
+
// frontmatter silently disappears and every anchor in the file goes unchecked.
|
|
168
|
+
if (text.charCodeAt(0) === 0xfeff)
|
|
169
|
+
text = text.slice(1);
|
|
170
|
+
const open = text.match(/^---\r?\n/);
|
|
171
|
+
if (open === null)
|
|
167
172
|
return undefined;
|
|
168
|
-
const end = text.indexOf("\n---",
|
|
173
|
+
const end = text.indexOf("\n---", open[0].length);
|
|
169
174
|
if (end === -1)
|
|
170
175
|
return undefined;
|
|
171
176
|
const after = text[end + 4];
|
|
172
177
|
if (after !== "\n" && after !== "\r" && after !== undefined)
|
|
173
178
|
return undefined;
|
|
174
|
-
|
|
179
|
+
// The final line's \r (CRLF) would otherwise leak into the last YAML scalar.
|
|
180
|
+
return text.slice(open[0].length, end).replace(/\r$/, "");
|
|
175
181
|
}
|
|
176
182
|
function listKnowledgeMarkdownFiles(cwd) {
|
|
177
183
|
return [
|
package/dist/anchors.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"anchors.js","sourceRoot":"","sources":["../src/anchors.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAChE,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,EAAE,MAAM,WAAW,CAAC;AAC5D,OAAO,EAAE,KAAK,IAAI,SAAS,EAAE,MAAM,MAAM,CAAC;AAC1C,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB;;;;;GAKG;AAEH,MAAM,YAAY,GAAG,CAAC,CAAC,YAAY,CAAC;IAClC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC;IAC5C,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;CAC1B,CAAC,CAAC;AAEH,MAAM,iBAAiB,GAAG,CAAC,CAAC,MAAM,CAAC;IACjC,aAAa,EAAE,CAAC,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,QAAQ,EAAE;CAChD,CAAC,CAAC;AAwBH,MAAM,UAAU,YAAY,CAAC,GAAW;IACtC,MAAM,KAAK,GAAG,0BAA0B,CAAC,GAAG,CAAC,CAAC;IAC9C,MAAM,WAAW,GAAuB,EAAE,CAAC;IAC3C,IAAI,cAAc,GAAG,CAAC,CAAC;IAEvB,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,MAAM,GAAG,eAAe,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;QAC1C,WAAW,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,WAAW,CAAC,CAAC;QAExC,KAAK,MAAM,MAAM,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;YACpC,cAAc,IAAI,CAAC,CAAC;YACpB,MAAM,UAAU,GAAG,aAAa,CAAC,GAAG,EAAE,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;YAC3D,IAAI,UAAU;gBAAE,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAC/C,CAAC;IACH,CAAC;IAED,OAAO;QACL,YAAY,EAAE,KAAK,CAAC,MAAM;QAC1B,cAAc;QACd,WAAW;QACX,EAAE,EAAE,WAAW,CAAC,MAAM,KAAK,CAAC;KAC7B,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,wBAAwB,CAAC,IAAY,EAAE,IAAY;IACjE,MAAM,WAAW,GAAG,eAAe,CAAC,IAAI,CAAC,CAAC;IAC1C,IAAI,WAAW,KAAK,SAAS;QAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE,WAAW,EAAE,EAAE,EAAE,CAAC;IAEnF,IAAI,GAAY,CAAC;IACjB,IAAI,CAAC;QACH,GAAG,GAAG,SAAS,CAAC,WAAW,CAAC,CAAC;IAC/B,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO;YACL,IAAI,EAAE,IAAI;YACV,OAAO,EAAE,EAAE;YACX,WAAW,EAAE,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,kCAAmC,GAAa,CAAC,OAAO,EAAE,EAAE,CAAC;SAC7F,CAAC;IACJ,CAAC;IAED,MAAM,MAAM,GAAG,iBAAiB,CAAC,SAAS,CAAC,GAAG,IAAI,EAAE,CAAC,CAAC;IACtD,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;QACpB,OAAO;YACL,IAAI,EAAE,IAAI;YACV,OAAO,EAAE,EAAE;YACX,WAAW,EAAE,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;gBAC/C,IAAI;gBACJ,OAAO,EAAE,qCAAqC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,OAAO,EAAE;aACnG,CAAC,CAAC;SACJ,CAAC;IACJ,CAAC;IAED,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,CAAC,IAAI,CAAC,aAAa,IAAI,EAAE,EAAE,WAAW,EAAE,EAAE,EAAE,CAAC;AACnF,CAAC;AAED,SAAS,eAAe,CAAC,GAAW,EAAE,IAAY;IAChD,OAAO,wBAAwB,CAAC,IAAI,EAAE,YAAY,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC;AAC/E,CAAC;AAED,SAAS,aAAa,CAAC,GAAW,EAAE,IAAY,EAAE,MAAc;IAC9D,IAAI,MAAM,CAAC,IAAI,KAAK,MAAM;QAAE,OAAO,iBAAiB,CAAC,GAAG,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;IACxE,IAAI,MAAM,CAAC,IAAI,KAAK,SAAS;QAAE,OAAO,oBAAoB,CAAC,GAAG,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;IAC9E,OAAO,oBAAoB,CAAC,GAAG,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;AACjD,CAAC;AAED,SAAS,iBAAiB,CAAC,GAAW,EAAE,IAAY,EAAE,MAAc;IAClE,MAAM,MAAM,GAAG,cAAc,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;IAClD,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;QACzB,OAAO,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,uDAAuD,CAAC,CAAC;IAC3F,CAAC;IACD,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC;QAC5B,OAAO,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,wBAAwB,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;IAC3E,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,SAAS,oBAAoB,CAAC,GAAW,EAAE,IAAY,EAAE,MAAc;IACrE,MAAM,MAAM,GAAG,aAAa,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAC5C,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;QACzB,OAAO,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,+BAA+B,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;IAClF,CAAC;IAED,IAAI,GAAY,CAAC;IACjB,IAAI,CAAC;QACH,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,GAAG,EAAE,cAAc,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC;IACpE,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,oCAAoC,CAAC,CAAC;IACxE,CAAC;IAED,MAAM,OAAO,GAAG,CAAC,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;IAClG,IAAI,CAAC,OAAO,CAAC,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,MAAM,CAAC,KAAK,SAAS,EAAE,CAAC;QACrE,OAAO,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,wBAAwB,MAAM,UAAU,CAAC,CAAC;IAC5E,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,SAAS,oBAAoB,CAAC,GAAW,EAAE,IAAY,EAAE,MAAc;IACrE,MAAM,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACrD,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;QAC1C,OAAO,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,yDAAyD,CAAC,CAAC;IAC7F,CAAC;IAED,MAAM,MAAM,GAAG,cAAc,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;IACzC,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;QACzB,OAAO,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,4DAA4D,CAAC,CAAC;IAChG,CAAC;IACD,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC;QAC5B,OAAO,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,gCAAgC,IAAI,EAAE,CAAC,CAAC;IAC1E,CAAC;IAED,MAAM,QAAQ,GAAG,oBAAoB,CAAC,YAAY,CAAC,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC,CAAC;IACxE,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;QACxB,OAAO,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,2BAA2B,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;IAC9E,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,SAAS,UAAU,CAAC,IAAY,EAAE,MAAc,EAAE,OAAe;IAC/D,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,EAAE,CAAC;AACrE,CAAC;AAED,SAAS,aAAa,CAAC,OAAe;IACpC,MAAM,GAAG,GAAG,OAAO,CAAC,KAAK,CAAC,6BAA6B,CAAC,CAAC;IACzD,IAAI,GAAG,EAAE,CAAC,CAAC,CAAC;QAAE,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC;IAE5B,MAAM,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC,yBAAyB,CAAC,CAAC;IACxD,IAAI,MAAM,EAAE,CAAC,CAAC,CAAC;QAAE,OAAO,MAAM,CAAC,CAAC,CAAC,CAAC;IAElC,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,SAAS,oBAAoB,CAAC,IAAY;IACxC,MAAM,KAAK,GAAG,IAAI,GAAG,EAAU,CAAC;IAChC,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC;QACvC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,4BAA4B,CAAC,CAAC;QACvD,IAAI,KAAK,EAAE,CAAC,CAAC,CAAC;YAAE,KAAK,CAAC,GAAG,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACtD,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,cAAc,CAAC,OAAe;IACrC,OAAO,OAAO;SACX,OAAO,CAAC,YAAY,EAAE,IAAI,CAAC;SAC3B,IAAI,EAAE;SACN,WAAW,EAAE;SACb,OAAO,CAAC,8BAA8B,EAAE,EAAE,CAAC;SAC3C,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC;SACpB,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;AACzB,CAAC;AAED,SAAS,cAAc,CAAC,GAAW,EAAE,MAAc;IACjD,IAAI,UAAU,CAAC,MAAM,CAAC;QAAE,OAAO,SAAS,CAAC;IACzC,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;IACrC,IAAI,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC;QAAE,OAAO,SAAS,CAAC;IAE3C,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC,CAAC;IAChC,MAAM,GAAG,GAAG,QAAQ,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;IAC/B,IAAI,GAAG,KAAK,EAAE,IAAI,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,UAAU,CAAC,GAAG,CAAC;QAAE,OAAO,SAAS,CAAC;IAC5E,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;AAChD,CAAC;AAED,SAAS,eAAe,CAAC,IAAY;IACnC,IAAI,CAAC,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"anchors.js","sourceRoot":"","sources":["../src/anchors.ts"],"names":[],"mappings":"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"}
|
package/dist/emit.d.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import type { Manifest, Target } from "./manifest.js";
|
|
2
2
|
import { type PluginsDesired, type RuleSet } from "./merge-json.js";
|
|
3
|
+
export declare const BLOCK_FILE: Partial<Record<Target, string>>;
|
|
3
4
|
/** The neutral methodology source for a content package, or undefined if the
|
|
4
5
|
* package has no rules.md (e.g. skills, Layer 2 recipes handled by other phases). */
|
|
5
6
|
export declare function loadPackageSource(pkg: string): string | undefined;
|
|
@@ -37,6 +38,30 @@ export type EmitOp = {
|
|
|
37
38
|
/** Build the emit plan from a manifest: the file operations needed to install
|
|
38
39
|
* the selected methodology for each target. */
|
|
39
40
|
export declare function planEmit(manifest: Manifest): EmitOp[];
|
|
41
|
+
export interface MethodologySize {
|
|
42
|
+
/** Total content lines across the counted rule artifacts. */
|
|
43
|
+
totalLines: number;
|
|
44
|
+
/** Number of always-loaded rule artifacts counted. */
|
|
45
|
+
fileCount: number;
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* The always-loaded methodology surface size: total lines and file count for
|
|
49
|
+
* the rule artifacts (`provides: rules`) a session loads at start. Computed
|
|
50
|
+
* from the **planned emit** (manifest → resolve → planEmit), not from files on
|
|
51
|
+
* disk, so it reports what the manifest implies — the same discipline `check`
|
|
52
|
+
* already uses for drift.
|
|
53
|
+
*
|
|
54
|
+
* Counts the claude-code target's owned `.claude/rules/*` files (one per rules
|
|
55
|
+
* package). If claude-code isn't a manifest target, falls back to the
|
|
56
|
+
* agents-md managed block content, one artifact per block, so the two targets'
|
|
57
|
+
* shared source is never double-counted. Commands, permissions/plugins JSON,
|
|
58
|
+
* and the wiki are never counted — none are loaded at session start.
|
|
59
|
+
*
|
|
60
|
+
* Throws if the manifest can't resolve (propagates planEmit's error, e.g. an
|
|
61
|
+
* unknown package) — callers in check mode should catch and omit the line
|
|
62
|
+
* rather than let it mask the sync error (D40's degrade-by-omission model).
|
|
63
|
+
*/
|
|
64
|
+
export declare function computeMethodologySize(manifest: Manifest): MethodologySize;
|
|
40
65
|
export interface ApplyResult {
|
|
41
66
|
text: string;
|
|
42
67
|
changed: boolean;
|
package/dist/emit.js
CHANGED
|
@@ -30,8 +30,11 @@ const TARGET_DELIVERY = {
|
|
|
30
30
|
"claude-code": "owned",
|
|
31
31
|
"agents-md": "block",
|
|
32
32
|
};
|
|
33
|
-
// Block-delivered targets each own a managed block in one flat file.
|
|
34
|
-
|
|
33
|
+
// Block-delivered targets each own a managed block in one flat file. Exported
|
|
34
|
+
// so sync.ts can enumerate the universe of block-owned files for orphan
|
|
35
|
+
// pruning even when the current manifest emits zero blocks for one (D46) —
|
|
36
|
+
// planEmit's ops alone wouldn't carry that path in that case.
|
|
37
|
+
export const BLOCK_FILE = {
|
|
35
38
|
"agents-md": "AGENTS.md",
|
|
36
39
|
};
|
|
37
40
|
/** The neutral methodology source for a content package, or undefined if the
|
|
@@ -248,6 +251,48 @@ export function planEmit(manifest) {
|
|
|
248
251
|
}
|
|
249
252
|
return ops;
|
|
250
253
|
}
|
|
254
|
+
/** Lines in `text`, ignoring any trailing newline(s) — so an owned file's
|
|
255
|
+
* synthesized trailing "\n" (see planEmit above) doesn't inflate the count. */
|
|
256
|
+
function countLines(text) {
|
|
257
|
+
const trimmed = text.replace(/\n+$/, "");
|
|
258
|
+
return trimmed.length === 0 ? 0 : trimmed.split("\n").length;
|
|
259
|
+
}
|
|
260
|
+
/**
|
|
261
|
+
* The always-loaded methodology surface size: total lines and file count for
|
|
262
|
+
* the rule artifacts (`provides: rules`) a session loads at start. Computed
|
|
263
|
+
* from the **planned emit** (manifest → resolve → planEmit), not from files on
|
|
264
|
+
* disk, so it reports what the manifest implies — the same discipline `check`
|
|
265
|
+
* already uses for drift.
|
|
266
|
+
*
|
|
267
|
+
* Counts the claude-code target's owned `.claude/rules/*` files (one per rules
|
|
268
|
+
* package). If claude-code isn't a manifest target, falls back to the
|
|
269
|
+
* agents-md managed block content, one artifact per block, so the two targets'
|
|
270
|
+
* shared source is never double-counted. Commands, permissions/plugins JSON,
|
|
271
|
+
* and the wiki are never counted — none are loaded at session start.
|
|
272
|
+
*
|
|
273
|
+
* Throws if the manifest can't resolve (propagates planEmit's error, e.g. an
|
|
274
|
+
* unknown package) — callers in check mode should catch and omit the line
|
|
275
|
+
* rather than let it mask the sync error (D40's degrade-by-omission model).
|
|
276
|
+
*/
|
|
277
|
+
export function computeMethodologySize(manifest) {
|
|
278
|
+
const ops = planEmit(manifest);
|
|
279
|
+
const claudeRuleFiles = ops.filter((op) => op.kind === "owned" && op.target === "claude-code" && op.path.startsWith(".claude/rules/"));
|
|
280
|
+
if (claudeRuleFiles.length > 0) {
|
|
281
|
+
return {
|
|
282
|
+
totalLines: claudeRuleFiles.reduce((sum, op) => sum + countLines(op.content), 0),
|
|
283
|
+
fileCount: claudeRuleFiles.length,
|
|
284
|
+
};
|
|
285
|
+
}
|
|
286
|
+
const agentsBlock = ops.find((op) => op.kind === "block" && op.target === "agents-md");
|
|
287
|
+
if (agentsBlock) {
|
|
288
|
+
const blocks = Object.values(agentsBlock.blocks);
|
|
289
|
+
return {
|
|
290
|
+
totalLines: blocks.reduce((sum, content) => sum + countLines(content), 0),
|
|
291
|
+
fileCount: blocks.length,
|
|
292
|
+
};
|
|
293
|
+
}
|
|
294
|
+
return { totalLines: 0, fileCount: 0 };
|
|
295
|
+
}
|
|
251
296
|
/** Apply one emit op against the destination file's existing text (pure; no I/O).
|
|
252
297
|
* Owned files are replaced wholesale; block files are reconciled; settings ops
|
|
253
298
|
* reconcile permissions and/or plugins in one pass over the same JSON file. */
|
package/dist/emit.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"emit.js","sourceRoot":"","sources":["../src/emit.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAChE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AACvC,OAAO,EACL,OAAO,EAIP,iBAAiB,GAElB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EAAmB,UAAU,EAAe,MAAM,kBAAkB,CAAC;AAC5E,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAEhD;;;;;;;;;;;;;;;;GAgBG;AAEH,gFAAgF;AAChF,MAAM,YAAY,GAAG,IAAI,GAAG,CAAC,cAAc,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAI9D,kEAAkE;AAClE,MAAM,eAAe,GAA6B;IAChD,aAAa,EAAE,OAAO;IACtB,WAAW,EAAE,OAAO;CACrB,CAAC;AAEF,
|
|
1
|
+
{"version":3,"file":"emit.js","sourceRoot":"","sources":["../src/emit.ts"],"names":[],"mappings":"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"}
|
package/dist/packages.d.ts
CHANGED
package/dist/program.d.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { Command } from "commander";
|
|
2
2
|
import { type AnchorCheckReport } from "./anchors.js";
|
|
3
|
+
import { type MethodologySize } from "./emit.js";
|
|
3
4
|
import { type SyncReport } from "./sync.js";
|
|
4
5
|
/** This CLI's own version, read from its shipped package.json (falls back to "unknown"). */
|
|
5
6
|
export declare function praxisVersion(): string;
|
|
@@ -10,6 +11,10 @@ export interface ReconcileResult {
|
|
|
10
11
|
syncError?: string;
|
|
11
12
|
/** Present only in check mode. */
|
|
12
13
|
anchorReport?: AnchorCheckReport;
|
|
14
|
+
/** Present only in check mode, and only when the manifest resolves (D40's
|
|
15
|
+
* degrade-by-omission model — this line is manifest-dependent, unlike the
|
|
16
|
+
* anchor tripwire). */
|
|
17
|
+
methodologySize?: MethodologySize;
|
|
13
18
|
exitCode: number;
|
|
14
19
|
}
|
|
15
20
|
/**
|
package/dist/program.js
CHANGED
|
@@ -4,8 +4,9 @@ import { fileURLToPath } from "node:url";
|
|
|
4
4
|
import { cancel, confirm, intro, isCancel, multiselect, note, outro, select } from "@clack/prompts";
|
|
5
5
|
import { Command } from "commander";
|
|
6
6
|
import { checkAnchors } from "./anchors.js";
|
|
7
|
+
import { computeMethodologySize } from "./emit.js";
|
|
7
8
|
import { applyInit, defaultManifest, detectContext, manifestFromSelections, renderManifestYaml, } from "./init.js";
|
|
8
|
-
import { STACKS } from "./manifest.js";
|
|
9
|
+
import { loadManifest, STACKS } from "./manifest.js";
|
|
9
10
|
import { availablePackages } from "./packages.js";
|
|
10
11
|
import { applyManifest, runSync } from "./sync.js";
|
|
11
12
|
/**
|
|
@@ -17,6 +18,7 @@ const STATUS_SYMBOL = {
|
|
|
17
18
|
created: "+",
|
|
18
19
|
updated: "~",
|
|
19
20
|
unchanged: " ",
|
|
21
|
+
deleted: "-",
|
|
20
22
|
};
|
|
21
23
|
function formatPlan(report, mode) {
|
|
22
24
|
return report.files
|
|
@@ -29,7 +31,7 @@ function formatPlan(report, mode) {
|
|
|
29
31
|
}
|
|
30
32
|
function formatAnchorReport(report) {
|
|
31
33
|
if (report.diagnostics.length === 0) {
|
|
32
|
-
return `\nKnowledge anchors: ${report.anchorsChecked} checked, 0 broken.`;
|
|
34
|
+
return `\nKnowledge anchors: ${report.anchorsChecked} checked (${report.filesScanned} files scanned), 0 broken.`;
|
|
33
35
|
}
|
|
34
36
|
const diagnostics = report.diagnostics
|
|
35
37
|
.map((d) => {
|
|
@@ -78,12 +80,23 @@ export function reconcile(cwd, write, mode) {
|
|
|
78
80
|
exitCode = 1;
|
|
79
81
|
}
|
|
80
82
|
let anchorReport;
|
|
83
|
+
let methodologySize;
|
|
81
84
|
if (mode === "check") {
|
|
82
85
|
anchorReport = checkAnchors(cwd);
|
|
83
86
|
if (!anchorReport.ok)
|
|
84
87
|
exitCode = 1;
|
|
88
|
+
// Advisory only (2026-07 product review §3 gap 5): report the always-loaded
|
|
89
|
+
// methodology surface size. Manifest-dependent, unlike the anchor tripwire
|
|
90
|
+
// above — if it can't resolve (the D40 scenario), omit the line rather than
|
|
91
|
+
// let this computation throw or mask the sync error already reported.
|
|
92
|
+
try {
|
|
93
|
+
methodologySize = computeMethodologySize(loadManifest(join(cwd, "praxis.yaml")));
|
|
94
|
+
}
|
|
95
|
+
catch {
|
|
96
|
+
// omitted — syncError (if any) already reports the unresolvable manifest.
|
|
97
|
+
}
|
|
85
98
|
}
|
|
86
|
-
return { version, syncReport, syncError, anchorReport, exitCode };
|
|
99
|
+
return { version, syncReport, syncError, anchorReport, methodologySize, exitCode };
|
|
87
100
|
}
|
|
88
101
|
function runReconcile(write, mode) {
|
|
89
102
|
const result = reconcile(process.cwd(), write, mode);
|
|
@@ -108,6 +121,10 @@ function runReconcile(write, mode) {
|
|
|
108
121
|
else
|
|
109
122
|
console.error(output);
|
|
110
123
|
}
|
|
124
|
+
if (result.methodologySize) {
|
|
125
|
+
const { totalLines, fileCount } = result.methodologySize;
|
|
126
|
+
console.log(`Methodology size: ${totalLines} lines across ${fileCount} always-loaded rule files.`);
|
|
127
|
+
}
|
|
111
128
|
if (result.exitCode !== 0)
|
|
112
129
|
process.exitCode = result.exitCode;
|
|
113
130
|
}
|
package/dist/program.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"program.js","sourceRoot":"","sources":["../src/program.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,WAAW,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AACpG,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,YAAY,EAA0B,MAAM,cAAc,CAAC;AACpE,OAAO,EACL,SAAS,EACT,eAAe,EACf,aAAa,EACb,sBAAsB,EACtB,kBAAkB,GACnB,MAAM,WAAW,CAAC;AACnB,OAAO,EAAE,MAAM,EAA0C,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"program.js","sourceRoot":"","sources":["../src/program.ts"],"names":[],"mappings":"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"}
|
package/dist/sync.d.ts
CHANGED
|
@@ -5,8 +5,15 @@ import { type Manifest } from "./manifest.js";
|
|
|
5
5
|
* apply each op against the destination file, and (in write mode) persist safe
|
|
6
6
|
* changes. Never clobbers a user-edited managed block (D10) — conflicts are
|
|
7
7
|
* surfaced, not overwritten.
|
|
8
|
+
*
|
|
9
|
+
* **Prune (D46):** the manifest expresses absence too — a package removed from
|
|
10
|
+
* `praxis.yaml` orphans the files/blocks it used to emit. No separate ownership
|
|
11
|
+
* ledger is needed: ownership is already legible on disk (the `praxis-` file
|
|
12
|
+
* prefix; the `<!-- praxis:begin <id> -->` block markers), so prune is simply
|
|
13
|
+
* (on-disk Praxis-owned set) − (manifest-implied set), previewed the same way as
|
|
14
|
+
* any other change and applied only in write mode.
|
|
8
15
|
*/
|
|
9
|
-
export type FileStatus = "created" | "updated" | "unchanged";
|
|
16
|
+
export type FileStatus = "created" | "updated" | "unchanged" | "deleted";
|
|
10
17
|
export interface FileReport {
|
|
11
18
|
path: string;
|
|
12
19
|
status: FileStatus;
|
package/dist/sync.js
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
|
-
import { mkdirSync, readFileSync, writeFileSync } from "node:fs";
|
|
1
|
+
import { existsSync, mkdirSync, readdirSync, readFileSync, unlinkSync, writeFileSync } from "node:fs";
|
|
2
2
|
import { dirname, join } from "node:path";
|
|
3
|
-
import { applyOp, planEmit } from "./emit.js";
|
|
3
|
+
import { applyOp, BLOCK_FILE, planEmit } from "./emit.js";
|
|
4
4
|
import { loadManifest } from "./manifest.js";
|
|
5
|
+
import { blockStatus, findBlocks } from "./merge.js";
|
|
5
6
|
export function runSync(opts) {
|
|
6
7
|
const manifestPath = opts.manifestPath ?? join(opts.cwd, "praxis.yaml");
|
|
7
8
|
return applyManifest(loadManifest(manifestPath), opts.cwd, opts.write);
|
|
@@ -14,19 +15,68 @@ export function runSync(opts) {
|
|
|
14
15
|
export function applyManifest(manifest, cwd, write) {
|
|
15
16
|
const ops = planEmit(manifest);
|
|
16
17
|
const files = [];
|
|
18
|
+
const handledPaths = new Set();
|
|
17
19
|
for (const op of ops) {
|
|
20
|
+
handledPaths.add(op.path);
|
|
18
21
|
const abs = join(cwd, op.path);
|
|
19
22
|
const existing = readFileIfExists(abs);
|
|
20
23
|
const result = applyOp(op, existing ?? "");
|
|
21
|
-
|
|
22
|
-
|
|
24
|
+
let text = result.text;
|
|
25
|
+
let changed = result.changed;
|
|
26
|
+
let conflicts = result.conflicts;
|
|
27
|
+
// Prune orphan blocks in the same pass: a block-target file (e.g. AGENTS.md)
|
|
28
|
+
// may still carry a managed block for a package the manifest no longer
|
|
29
|
+
// selects. Splice those out of the already-reconciled text so the file
|
|
30
|
+
// report and the single write below cover both concerns together.
|
|
31
|
+
if (op.kind === "block") {
|
|
32
|
+
const pruned = pruneOrphanBlocks(text, new Set(Object.keys(op.blocks)));
|
|
33
|
+
text = pruned.text;
|
|
34
|
+
changed = changed || pruned.changed;
|
|
35
|
+
conflicts = [...conflicts, ...pruned.conflicts];
|
|
36
|
+
}
|
|
37
|
+
const status = existing === undefined ? "created" : changed ? "updated" : "unchanged";
|
|
38
|
+
// Write safe changes only: never in check mode, never a pure no-op. `text`
|
|
23
39
|
// already preserves any conflicted block, so writing it honors D10.
|
|
24
|
-
const written = write && (status === "created" ||
|
|
40
|
+
const written = write && (status === "created" || status === "updated");
|
|
25
41
|
if (written) {
|
|
26
42
|
mkdirSync(dirname(abs), { recursive: true });
|
|
27
|
-
writeFileSync(abs,
|
|
43
|
+
writeFileSync(abs, text, "utf8");
|
|
28
44
|
}
|
|
29
|
-
files.push({ path: op.path, status, conflicts
|
|
45
|
+
files.push({ path: op.path, status, conflicts, written });
|
|
46
|
+
}
|
|
47
|
+
// Block orphans in a file the manifest no longer emits ANY block for (e.g. the
|
|
48
|
+
// last rules package for a target was removed): no "block" op exists this run
|
|
49
|
+
// to carry the pruning above, so sweep the known block-owned files directly.
|
|
50
|
+
for (const path of new Set(Object.values(BLOCK_FILE))) {
|
|
51
|
+
if (handledPaths.has(path))
|
|
52
|
+
continue;
|
|
53
|
+
const abs = join(cwd, path);
|
|
54
|
+
const existing = readFileIfExists(abs);
|
|
55
|
+
if (existing === undefined)
|
|
56
|
+
continue;
|
|
57
|
+
const pruned = pruneOrphanBlocks(existing, new Set());
|
|
58
|
+
if (!pruned.changed && pruned.conflicts.length === 0)
|
|
59
|
+
continue;
|
|
60
|
+
const written = write && pruned.changed;
|
|
61
|
+
if (written)
|
|
62
|
+
writeFileSync(abs, pruned.text, "utf8");
|
|
63
|
+
files.push({
|
|
64
|
+
path,
|
|
65
|
+
status: pruned.changed ? "updated" : "unchanged",
|
|
66
|
+
conflicts: pruned.conflicts,
|
|
67
|
+
written,
|
|
68
|
+
});
|
|
69
|
+
}
|
|
70
|
+
// Owned-file orphans: `.claude/rules/praxis-*.md` / `.claude/commands/praxis-*.md`
|
|
71
|
+
// on disk that the current manifest no longer implies (the package that used to
|
|
72
|
+
// own them was removed, or its target was). The `praxis-` prefix is the
|
|
73
|
+
// ownership convention; a user's own file with that prefix would be flagged too
|
|
74
|
+
// — acceptable because deletion is always previewed here, never silent.
|
|
75
|
+
const impliedOwnedPaths = new Set(ops.filter((op) => op.kind === "owned").map((op) => op.path));
|
|
76
|
+
for (const path of findOwnedOrphans(cwd, impliedOwnedPaths)) {
|
|
77
|
+
if (write)
|
|
78
|
+
unlinkSync(join(cwd, path));
|
|
79
|
+
files.push({ path, status: "deleted", conflicts: [], written: write });
|
|
30
80
|
}
|
|
31
81
|
return {
|
|
32
82
|
files,
|
|
@@ -42,4 +92,61 @@ function readFileIfExists(path) {
|
|
|
42
92
|
return undefined;
|
|
43
93
|
}
|
|
44
94
|
}
|
|
95
|
+
// Directories whose contents are Praxis-owned by naming convention alone — see
|
|
96
|
+
// `planEmit` in src/emit.ts, which only ever writes `praxis-*.md` under these two.
|
|
97
|
+
const OWNED_ORPHAN_DIRS = [".claude/rules", ".claude/commands"];
|
|
98
|
+
/** Praxis-owned files on disk (by the `praxis-` prefix convention) whose path is
|
|
99
|
+
* not in `impliedPaths` — the current manifest no longer emits them. */
|
|
100
|
+
function findOwnedOrphans(cwd, impliedPaths) {
|
|
101
|
+
const orphans = [];
|
|
102
|
+
for (const dir of OWNED_ORPHAN_DIRS) {
|
|
103
|
+
const abs = join(cwd, dir);
|
|
104
|
+
if (!existsSync(abs))
|
|
105
|
+
continue;
|
|
106
|
+
for (const entry of readdirSync(abs, { withFileTypes: true })) {
|
|
107
|
+
if (!entry.isFile() || !entry.name.startsWith("praxis-") || !entry.name.endsWith(".md"))
|
|
108
|
+
continue;
|
|
109
|
+
const path = `${dir}/${entry.name}`;
|
|
110
|
+
if (!impliedPaths.has(path))
|
|
111
|
+
orphans.push(path);
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
return orphans;
|
|
115
|
+
}
|
|
116
|
+
/** Remove one managed block (both markers + content) from `text`, absorbing the
|
|
117
|
+
* blank-line separator and trailing newline that `appendBlock` (src/merge.ts)
|
|
118
|
+
* introduces when a block is first added — so removing an orphan restores the
|
|
119
|
+
* surrounding prose to exactly what it was before the block ever existed. */
|
|
120
|
+
function spliceOutBlock(text, block) {
|
|
121
|
+
let start = block.start;
|
|
122
|
+
let end = block.end;
|
|
123
|
+
if (text.slice(end, end + 1) === "\n")
|
|
124
|
+
end += 1;
|
|
125
|
+
if (text.slice(Math.max(0, start - 2), start) === "\n\n")
|
|
126
|
+
start -= 1;
|
|
127
|
+
return text.slice(0, start) + text.slice(end);
|
|
128
|
+
}
|
|
129
|
+
/** Splice every managed block out of `text` whose id is not in `keepIds` — the
|
|
130
|
+
* block-file analogue of `findOwnedOrphans`. Mirrors `reconcile`'s conflict rule
|
|
131
|
+
* (D10): a block whose content hash no longer matches its recorded marker was
|
|
132
|
+
* user-edited, so it is reported as a conflict and left untouched, never deleted. */
|
|
133
|
+
function pruneOrphanBlocks(text, keepIds) {
|
|
134
|
+
let out = text;
|
|
135
|
+
let changed = false;
|
|
136
|
+
const conflicts = [];
|
|
137
|
+
const skip = new Set();
|
|
138
|
+
for (;;) {
|
|
139
|
+
const orphan = findBlocks(out).find((b) => !keepIds.has(b.id) && !skip.has(b.id));
|
|
140
|
+
if (!orphan)
|
|
141
|
+
break;
|
|
142
|
+
if (blockStatus(orphan) === "user-edited") {
|
|
143
|
+
conflicts.push(orphan.id);
|
|
144
|
+
skip.add(orphan.id);
|
|
145
|
+
continue;
|
|
146
|
+
}
|
|
147
|
+
out = spliceOutBlock(out, orphan);
|
|
148
|
+
changed = true;
|
|
149
|
+
}
|
|
150
|
+
return { text: out, changed, conflicts };
|
|
151
|
+
}
|
|
45
152
|
//# sourceMappingURL=sync.js.map
|
package/dist/sync.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sync.js","sourceRoot":"","sources":["../src/sync.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"sync.js","sourceRoot":"","sources":["../src/sync.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,26 +1,10 @@
|
|
|
1
1
|
## Instruction upkeep
|
|
2
2
|
|
|
3
3
|
The authored instruction layer (`CLAUDE.md`, `.claude/rules`) drifts as a
|
|
4
|
-
project changes
|
|
5
|
-
|
|
4
|
+
project changes. When it goes stale, incomplete, or a misunderstanding
|
|
5
|
+
surfaces, fix it — checking coverage against: build/test/run commands ·
|
|
6
|
+
layout · conventions · always-do rules.
|
|
6
7
|
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
- An instruction file should document, for any project: build/test/run
|
|
11
|
-
commands, project layout, key conventions, and always-do rules. If one of
|
|
12
|
-
these is missing, fill it by discovery and asking the user — never invent
|
|
13
|
-
a fact that isn't backed by the code, config, or the user's answer.
|
|
14
|
-
- Prefer linking a canonical source (e.g. an architecture doc) over restating
|
|
15
|
-
its facts — restated facts drift independently of their source.
|
|
16
|
-
- If a *derived overview* like `README.md` exists, check it hasn't drifted from
|
|
17
|
-
its canonical sources — being a restatement of them, it drifts by
|
|
18
|
-
construction; reconcile it to the source rather than the reverse.
|
|
19
|
-
- When instruction files include `praxisAnchors` frontmatter, keep those anchors
|
|
20
|
-
resolving. `praxis check` hard-fails broken `path`, `command`, and `section`
|
|
21
|
-
anchors; staleness signals are future advisory work.
|
|
22
|
-
- Make instruction-layer changes through `/praxis-instructions`, not ad-hoc edits — run
|
|
23
|
-
it when unsure whether the instruction files still match the project, or whether
|
|
24
|
-
they cover the sections above. When this is part of reconciling the methodology
|
|
25
|
-
layer after a change, enter through the `/praxis-upkeep` front gate (which
|
|
26
|
-
delegates here) instead of running this pass alone.
|
|
8
|
+
Make changes through `/praxis-instructions`, not ad-hoc edits. When
|
|
9
|
+
reconciling the methodology layer after a change, enter through
|
|
10
|
+
`/praxis-upkeep` (which delegates here) instead of running this pass alone.
|
|
@@ -1,14 +1,10 @@
|
|
|
1
1
|
## First-run onboarding
|
|
2
2
|
|
|
3
3
|
At the start of work, check for the `.praxis-setup-pending` sentinel file in
|
|
4
|
-
the repo root
|
|
5
|
-
|
|
4
|
+
the repo root: present means a fresh Praxis install whose project-owned
|
|
5
|
+
`CLAUDE.md` sections aren't authored yet.
|
|
6
6
|
|
|
7
|
-
- **
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
(`/praxis-upkeep`) handles currency after initial setup.
|
|
12
|
-
|
|
13
|
-
Cross-references: `/praxis-onboard` (first-run front gate),
|
|
14
|
-
`/praxis-upkeep` (ongoing front gate — D29/D31, [onboarding](../../../docs/wiki/onboarding.md)).
|
|
7
|
+
- **Present:** offer to run `/praxis-onboard`; it deletes the sentinel on
|
|
8
|
+
completion, making this check one-shot. Never nag when absent.
|
|
9
|
+
- **Absent:** do nothing here — `/praxis-upkeep` (ongoing front gate, D29/D31)
|
|
10
|
+
handles currency after initial setup.
|
|
@@ -1,62 +1,15 @@
|
|
|
1
1
|
## Session handoff
|
|
2
2
|
|
|
3
|
-
Work outlives a single session:
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
- Hand off at a natural boundary in a verified state — not mid-edit. Stop where
|
|
8
|
-
the build and tests are green, or where any breakage is understood and noted.
|
|
9
|
-
- Write handoffs by running `/praxis-handoff`, not by hand — it produces a
|
|
10
|
-
self-contained, chronologically-named document. Treat it as the next session's
|
|
11
|
-
only briefing.
|
|
12
|
-
- Make it actionable: what's done, what's pending, the single most important
|
|
13
|
-
next step, verification status, and any open decisions.
|
|
14
|
-
- Carry the context forward, don't just summarize it. Reference the load-bearing
|
|
15
|
-
files (`path:line`), the relevant design-doc sections, the prior-art to mirror,
|
|
16
|
-
and the exact commands — so the next session skips re-running discovery.
|
|
17
|
-
- Note instruction-layer follow-up: if the session changed the project in a way
|
|
18
|
-
that makes the authored instruction files stale or incomplete, say so.
|
|
19
|
-
- Keep handoffs together in one directory so they sort in chronological order;
|
|
20
|
-
don't scatter them into the codebase.
|
|
3
|
+
Work outlives a single session: at a natural boundary in a verified state —
|
|
4
|
+
never mid-edit — capture context before it's lost. Write handoffs by running
|
|
5
|
+
`/praxis-handoff`, not by hand; it's the next session's only briefing.
|
|
21
6
|
|
|
22
7
|
## Delegated execution
|
|
23
8
|
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
combined — **neither requires parallelism**:
|
|
32
|
-
- *Independent workstreams* — parts specifiable up front and runnable without
|
|
33
|
-
coordination mid-flight (concurrently, where the tool allows). If two parts
|
|
34
|
-
must talk constantly, they are one workstream.
|
|
35
|
-
- *Context or budget isolation* — a context-heavy or mechanical run (a wide
|
|
36
|
-
refactor, a multi-step migration, a long grind) worth executing in an
|
|
37
|
-
execution agent's *own* context window, on a lighter/faster tier, so the
|
|
38
|
-
orchestrator's context stays clean. This holds for a *single sequential*
|
|
39
|
-
stream: size and cost justify delegating on their own.
|
|
40
|
-
- Name the split at plan time. When a plan's steps form independent or
|
|
41
|
-
context-heavy workstreams, surface the delegation split *as part of the plan* —
|
|
42
|
-
what each execution agent runs and how its result returns — rather than only
|
|
43
|
-
deciding to delegate mid-execution.
|
|
44
|
-
- Brief each workstream as a self-contained context cache — the same discipline
|
|
45
|
-
as a handoff. An execution agent starts cold: give it the load-bearing files
|
|
46
|
-
(`path:line`), the prior art to mirror, the exact build/test commands, and a
|
|
47
|
-
crisp success/verify criterion. A vague brief gets vague work back.
|
|
48
|
-
- Keep the tiers to their jobs. The orchestrator plans, decomposes, verifies, and
|
|
49
|
-
integrates; execution agents do bounded, fully-specified work and return the
|
|
50
|
-
result, not the intermediate detail. Match the tier to the work — execution
|
|
51
|
-
agents can be lighter/faster than the orchestrator. (Stated by role, not by
|
|
52
|
-
model name, so it survives model releases.)
|
|
53
|
-
- Verify on return; trust nothing unread. Each returned workstream is checked
|
|
54
|
-
against its stated success criterion (build, tests, a read of the diff) before
|
|
55
|
-
it is integrated — the orchestrator owns correctness of the whole.
|
|
56
|
-
- Produce the briefs with `/praxis-handoff` (run it per workstream), not by hand,
|
|
57
|
-
so each is self-contained. Dispatch a subagent per brief where the tool
|
|
58
|
-
supports subagents; where it does not, run the briefs inline in sequence or
|
|
59
|
-
hand them to a fresh session — same brief, different venue.
|
|
60
|
-
- Use judgment on whether to delegate at all. It pays off for multi-workstream or
|
|
61
|
-
context-heavy work; for a small single-thread change the briefing cost exceeds
|
|
62
|
-
the savings — just do it inline.
|
|
9
|
+
Delegate when you need the result, not the execution detail. Two triggers,
|
|
10
|
+
neither requiring parallelism: **independent workstreams** (specifiable up
|
|
11
|
+
front, no mid-flight coordination) and **context/budget isolation** (a
|
|
12
|
+
context-heavy or mechanical run worth its own context and a lighter tier —
|
|
13
|
+
holds even for one sequential stream). Name the split at plan time. Produce
|
|
14
|
+
each brief with `/praxis-handoff`, not by hand, and verify a returned
|
|
15
|
+
workstream against its success criterion before integrating it.
|
|
@@ -1,18 +1,11 @@
|
|
|
1
1
|
## Upkeep
|
|
2
2
|
|
|
3
|
-
The methodology layer (
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
letting the gap persist, fixing it ad hoc, or invoking the sub-skills piecemeal.
|
|
9
|
-
It is the single front gate: it sequences `praxis check` and fully delegates to
|
|
10
|
-
`/praxis-instructions` (instruction layer) and `/praxis-wiki` (knowledge wiki). The
|
|
11
|
-
command itself only sequences and reports; the sub-skills make any edits, each
|
|
12
|
-
behind its own confirmation gate.
|
|
3
|
+
The methodology layer (instructions, wiki, emitted `.claude/` files) drifts
|
|
4
|
+
from project reality like code drifts from docs. When work reveals drift, or
|
|
5
|
+
produces new durable knowledge to file, run `/praxis-upkeep` — the single
|
|
6
|
+
front gate sequencing `praxis check`, `/praxis-instructions`, and
|
|
7
|
+
`/praxis-wiki` — rather than fixing it ad hoc or piecemeal.
|
|
13
8
|
|
|
14
|
-
Run all three passes through the gate even when only one looks like it has
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
like no-ops" is exactly the piecemeal use this rule prevents (it is how a pass
|
|
18
|
-
that did have work gets silently skipped).
|
|
9
|
+
Run all three passes through the gate even when only one looks like it has
|
|
10
|
+
work — skipping straight to a sub-skill is the piecemeal use this rule
|
|
11
|
+
prevents.
|
|
@@ -1,52 +1,14 @@
|
|
|
1
1
|
## Wiki memory
|
|
2
2
|
|
|
3
|
-
Knowledge outlives a single conversation.
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
unlike a tool's machine-local native memory.
|
|
3
|
+
Knowledge outlives a single conversation. Keep a durable, in-repo knowledge
|
|
4
|
+
wiki — linked markdown pages a future session reads instead of re-deriving —
|
|
5
|
+
distinct from a handoff (transient) and from `CLAUDE.md`/`.claude/rules`
|
|
6
|
+
(authored instructions). At the start of a task, read the wiki's `index.md`
|
|
7
|
+
and follow the links that bear on the work.
|
|
9
8
|
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
it. The signal you already needed the page is one ambiguous term re-explained
|
|
17
|
-
in scattered prose. Define what a term *is* and, where the word misleads, what
|
|
18
|
-
it is *not*.
|
|
19
|
-
- **Know which kind of entry you are editing.** Derived summaries compress code,
|
|
20
|
-
config, and canonical docs; the underlying source wins on conflict. Canonical
|
|
21
|
-
intent entries record decisions, rationale, scope, and design intent; when code
|
|
22
|
-
and intent diverge, surface the drift for human judgment instead of silently
|
|
23
|
-
overwriting one with the other.
|
|
24
|
-
- **Keep decisions in one ledger when they are numbered or cited.** Use a single
|
|
25
|
-
canonical `decisions.md`, append new `D<N>` rows, never renumber, and never
|
|
26
|
-
scatter numbered decisions across topic pages.
|
|
27
|
-
- An entry captures *durable* knowledge: architecture and how the parts fit, a
|
|
28
|
-
hard-won gotcha and its cause, a workflow, a decision and its why. Not transient
|
|
29
|
-
session state (that is a handoff) and not the authored instruction rules (those
|
|
30
|
-
are `CLAUDE.md`/`.claude/rules`).
|
|
31
|
-
- At the start of a task, read the index and follow the links that bear on the
|
|
32
|
-
work — act on what is already known rather than re-deriving it.
|
|
33
|
-
- When you learn something durable — including a useful answer or analysis you
|
|
34
|
-
derived mid-session — add or update an entry, link it from the index, and note
|
|
35
|
-
the change in the log. Prefer one topic per page, cross-linked, over a sprawling
|
|
36
|
-
document; update the canonical page rather than create a near-duplicate.
|
|
37
|
-
- Add machine-checkable `praxisAnchors` frontmatter for canonical sources when a
|
|
38
|
-
page depends on them: `path`, `command`, and `section` anchors are hard-checked
|
|
39
|
-
by `praxis check`; staleness/hash tripwires remain advisory future work.
|
|
40
|
-
- Keep it true. Periodically **lint** the wiki (via `/praxis-wiki`): flag and fix
|
|
41
|
-
contradictions, stale claims, orphan pages, and missing cross-references. A
|
|
42
|
-
stale wiki misleads worse than none. Link the canonical source rather than
|
|
43
|
-
restating it; restated facts drift independently of their source.
|
|
44
|
-
- Never record a fact that isn't backed by the code, config, a canonical doc, or
|
|
45
|
-
the user — the wiki is curated knowledge, not speculation.
|
|
46
|
-
- Do wiki work by running `/praxis-wiki`, not by hand — bootstrapping, filing new
|
|
47
|
-
knowledge, and linting all run the skill rather than hand-authoring pages and
|
|
48
|
-
hand-editing `index.md`/`log.md` around it. It keeps the index, log, and anchors
|
|
49
|
-
consistent. When the wiki pass is part of reconciling the methodology layer
|
|
50
|
-
after a change, enter through the `/praxis-upkeep` front gate (which delegates
|
|
51
|
-
here) instead of running it alone; call `/praxis-wiki` directly only for a
|
|
52
|
-
deliberate single pass, e.g. first-run bootstrap.
|
|
9
|
+
When you learn something durable — an architecture fact, a gotcha, a decision,
|
|
10
|
+
a workflow — file or update it, and periodically lint the wiki for
|
|
11
|
+
contradictions and staleness. Do this by running `/praxis-wiki`, not by hand.
|
|
12
|
+
When reconciling the methodology layer after a change, enter through
|
|
13
|
+
`/praxis-upkeep`; call `/praxis-wiki` directly only for a deliberate single
|
|
14
|
+
pass (e.g. first-run bootstrap).
|
|
@@ -8,6 +8,10 @@ Stack-specific craft for TypeScript/Node code. These say *how to add something
|
|
|
8
8
|
well in this stack*; the concrete shape lives in this repo's own prior art, not
|
|
9
9
|
here. Find the nearest existing example and mirror it.
|
|
10
10
|
|
|
11
|
+
Layer 1 rules (think before coding, simplicity first, surgical changes,
|
|
12
|
+
goal-driven execution) apply unchanged — this file adds only what is
|
|
13
|
+
Node-specific.
|
|
14
|
+
|
|
11
15
|
- **Mirror the nearest module.** Before adding a feature, open the closest
|
|
12
16
|
existing file that already does the same kind of thing (a sibling in the same
|
|
13
17
|
directory, an adjacent route/command/service). Copy its structure — imports,
|
|
@@ -25,9 +29,6 @@ here. Find the nearest existing example and mirror it.
|
|
|
25
29
|
validate external/untrusted input where it enters (a schema validator if the
|
|
26
30
|
repo already uses one, e.g. zod). Don't re-validate data already typed and
|
|
27
31
|
checked upstream.
|
|
28
|
-
- **Surgical change.** Touch only what the task needs; match the surrounding
|
|
29
|
-
style and the repo's lint/format config. Don't reformat or "improve" adjacent
|
|
30
|
-
code. Every changed line should trace to the task.
|
|
31
32
|
- **ESM vs CJS, follow the repo.** Match the module system, import extensions
|
|
32
33
|
(`.js` specifiers under `"type": "module"`), and `tsconfig` target already in
|
|
33
34
|
use — don't introduce a second convention.
|
|
@@ -8,6 +8,10 @@ Choosing *where* a test belongs matters as much as writing it. Pick the layer
|
|
|
8
8
|
that fails for the right reason, and mirror the repo's existing tests of that
|
|
9
9
|
kind for structure and fixtures.
|
|
10
10
|
|
|
11
|
+
Layer 1 rules (think before coding, simplicity first, surgical changes,
|
|
12
|
+
goal-driven execution) apply unchanged — this file adds only what is
|
|
13
|
+
Node-testing-specific.
|
|
14
|
+
|
|
11
15
|
- **Harness before features.** A rule that matters has a test. Write (or extend)
|
|
12
16
|
the test that pins the new behaviour *before or with* the code that satisfies
|
|
13
17
|
it — never land logic whose only check is "it looked right". Make the failing
|
|
@@ -8,6 +8,10 @@ Stack-specific craft for Python backend code. These say *how to add something
|
|
|
8
8
|
well in this stack*; the concrete shape lives in this repo's own prior art, not
|
|
9
9
|
here. Find the nearest existing module and mirror it.
|
|
10
10
|
|
|
11
|
+
Layer 1 rules (think before coding, simplicity first, surgical changes,
|
|
12
|
+
goal-driven execution) apply unchanged — this file adds only what is
|
|
13
|
+
Python-specific.
|
|
14
|
+
|
|
11
15
|
- **Mirror the nearest module.** Before adding a feature, open the closest
|
|
12
16
|
existing file that already does the same kind of thing (a sibling in the same
|
|
13
17
|
directory, an adjacent route/handler/service). Copy its structure — imports,
|
|
@@ -27,10 +31,6 @@ here. Find the nearest existing module and mirror it.
|
|
|
27
31
|
boundaries; validate external/untrusted input where it enters (a schema
|
|
28
32
|
validator if the repo already uses one, e.g. pydantic). Don't re-validate data
|
|
29
33
|
already typed and checked upstream.
|
|
30
|
-
- **Surgical change.** Touch only what the task needs; match the surrounding
|
|
31
|
-
style and the repo's lint/format config (`black`/`ruff` if present). Don't
|
|
32
|
-
reformat or "improve" adjacent code. Every changed line should trace to the
|
|
33
|
-
task.
|
|
34
34
|
- **Follow the repo's packaging conventions.** Match the module layout, import
|
|
35
35
|
style (absolute vs relative), and packaging already in use — don't introduce a
|
|
36
36
|
second convention. If the project uses `src/` layout, honour it; if it uses
|
|
@@ -8,6 +8,10 @@ Choosing *where* a test belongs matters as much as writing it. Pick the layer
|
|
|
8
8
|
that fails for the right reason, and mirror the repo's existing tests of that
|
|
9
9
|
kind for structure and fixtures.
|
|
10
10
|
|
|
11
|
+
Layer 1 rules (think before coding, simplicity first, surgical changes,
|
|
12
|
+
goal-driven execution) apply unchanged — this file adds only what is
|
|
13
|
+
Python-testing-specific.
|
|
14
|
+
|
|
11
15
|
- **Harness before features.** A rule that matters has a test. Write (or extend)
|
|
12
16
|
the test that pins the new behaviour *before or with* the code that satisfies
|
|
13
17
|
it — never land logic whose only check is "it looked right". Make the failing
|
|
@@ -9,6 +9,10 @@ module shape, surgical change) lives in `node-recipes` — this file covers only
|
|
|
9
9
|
what is React-specific. The concrete shape lives in this repo's own prior art,
|
|
10
10
|
not here. Find the nearest existing component and mirror it.
|
|
11
11
|
|
|
12
|
+
Layer 1 rules (think before coding, simplicity first, surgical changes,
|
|
13
|
+
goal-driven execution) apply unchanged — this file adds only what is
|
|
14
|
+
React-specific.
|
|
15
|
+
|
|
12
16
|
- **Mirror the nearest component.** Before adding a component, open the closest
|
|
13
17
|
existing one that does the same kind of thing (a sibling in the same directory
|
|
14
18
|
or feature folder). Copy its structure — file layout, how it exports, how it
|
|
@@ -8,6 +8,10 @@ Choosing *where* a test belongs matters as much as writing it. Pick the layer
|
|
|
8
8
|
that fails for the right reason, and mirror the repo's existing tests of that
|
|
9
9
|
kind for structure and setup.
|
|
10
10
|
|
|
11
|
+
Layer 1 rules (think before coding, simplicity first, surgical changes,
|
|
12
|
+
goal-driven execution) apply unchanged — this file adds only what is
|
|
13
|
+
React-testing-specific.
|
|
14
|
+
|
|
11
15
|
- **Test behaviour, not implementation.** Query by roles and user-visible text
|
|
12
16
|
(`getByRole`, `getByLabelText`, `getByText`) — not by CSS class, component
|
|
13
17
|
display name, or internal state. A test that breaks on a classname rename
|