@aacombarro89/praxis 0.1.0 → 0.1.1

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 ADDED
@@ -0,0 +1,126 @@
1
+ # Praxis
2
+
3
+ **A CLI that installs an AI _methodology layer_ into a codebase** — the
4
+ meta-development rules and authoring recipes that make AI coding agents produce
5
+ correct, conformant work.
6
+
7
+ Praxis is **not** implementation scaffolding and **not** a config-file
8
+ generator. It writes _only_ the methodology layer — agent-instruction files,
9
+ skills, slash commands, and its own manifest. It never touches your application
10
+ code, dependencies, or runtime infrastructure.
11
+
12
+ ```bash
13
+ npx @aacombarro89/praxis
14
+ ```
15
+
16
+ ## What it does
17
+
18
+ Running `praxis` in a project:
19
+
20
+ 1. **Detects your stack** from project files — `pyproject.toml` /
21
+ `requirements.txt` / `setup.py` → `python-backend`; `package.json` → `node`;
22
+ a `react` dependency → both `node` and `react`.
23
+ 2. **Offers a first-run fork** — _Quick start_ (recommended defaults, preview
24
+ the diff, confirm) or _Customize_ (choose stacks, packages, and targets).
25
+ 3. **Composes the methodology into your repo** — it merges managed blocks into
26
+ files like `CLAUDE.md` without clobbering your own content, and records what
27
+ it did in a visible, committed, hand-editable manifest: `praxis.yaml`.
28
+
29
+ It always previews a single diff before writing. Git is your undo.
30
+
31
+ ## Why it's different
32
+
33
+ Compared to `/init`-style tools, Praxis adds two things they lack:
34
+
35
+ - **A curated, opinionated methodology** — Layer 1 behavioral rules plus Layer 2
36
+ stack recipes, shipped as composable **packages**.
37
+ - **A composition / merge step** that folds methodology into an _existing_
38
+ project without overwriting project-specific content.
39
+
40
+ ## The two layers
41
+
42
+ - **Layer 1 (general, stack-agnostic).** Tool-neutral behavioral rules that
43
+ reduce common LLM coding mistakes, plus methodology-upkeep commands:
44
+ `karpathy-claude`, `wiki-memory`, `session-handoff`, `upkeep`,
45
+ `instruction-upkeep`, `safe-permissions`.
46
+ - **Layer 2 (stack-specific recipes).** Authoring recipes for the stack you're
47
+ on — `node` (`node-recipes`, `node-testing`), `python-backend`
48
+ (`python-backend-recipes`, `python-testing`), and `react`
49
+ (`react-components`, `react-testing`).
50
+
51
+ ## The mental model — imperative entry, declarative truth
52
+
53
+ This is the `npm install` pattern. One command (`praxis`) does the smart thing
54
+ immediately and records the result in `praxis.yaml`. Thereafter the manifest is
55
+ the source of truth: to customize, **edit `praxis.yaml`, then run `praxis
56
+ sync`**. There is no `add`/`remove` — one obvious way to change things.
57
+
58
+ ```yaml
59
+ # Edit this, then run `praxis sync`.
60
+ version: 1
61
+ methodology: "0.1.0" # pinned; `sync` offers to bump
62
+ stacks: [node, react] # detection-seeded, user-editable
63
+ targets: [claude-code, agents-md] # which agent files to emit
64
+ packages:
65
+ - karpathy-claude # behavioral rules (Layer 1)
66
+ - wiki-memory # the knowledge-wiki command (Layer 1)
67
+ - node-recipes # Layer 2 craft (stack: node)
68
+ - react-components # Layer 2 craft (stack: react)
69
+ ```
70
+
71
+ New methodology only reaches your repo on an explicit `sync` that bumps the
72
+ pinned version — never behind your back.
73
+
74
+ ## Commands
75
+
76
+ | Command | What it does |
77
+ |----------------|------------------------------------------------------------------------------|
78
+ | `praxis` | First-run wizard; apply. |
79
+ | `praxis sync` | Reconcile the repo to `praxis.yaml`; offer newer methodology; diff + confirm. |
80
+ | `praxis check` | Dry-run; report drift; non-zero exit for CI. |
81
+
82
+ `--yes` skips prompts (takes the Quick-start path) for non-interactive/CI use.
83
+
84
+ ## Tool-neutral by construction
85
+
86
+ The methodology source is singular; Praxis _emits_ per-tool variants from it.
87
+ **Claude Code** (`.claude/rules/`, skills, commands, `settings.json`) and the
88
+ **`agents-md`** flat-file convention (`AGENTS.md`) are built today. Cursor is a
89
+ planned target; Copilot/Windsurf/Roo are deferred until they land.
90
+
91
+ ## "Memory" means the agent's memory, not the app's
92
+
93
+ In Praxis, _memory_ always refers to the **AI coding tool's** curated,
94
+ file-based instruction layer (`CLAUDE.md`, the knowledge wiki, skills, decision
95
+ notes) — not a runtime memory backend for your application (Mem0, Zep, Letta,
96
+ etc.). Wiring a persistence backend into your app is implementation, and out of
97
+ scope. The most Praxis ships on that topic is a Layer 2 _decision recipe_:
98
+ guidance on whether you need runtime memory and how to choose — never the
99
+ backend itself.
100
+
101
+ ## Developing Praxis
102
+
103
+ Praxis is a TypeScript/Node CLI, and it self-hosts: it installs its own
104
+ methodology and gates drift in its own CI.
105
+
106
+ ```bash
107
+ npm run typecheck # tsc --noEmit
108
+ npm run build # tsc → dist/
109
+ npm test # vitest over test/
110
+ npm run conformance # vitest over conformance/
111
+ npm run selfcheck # praxis check against this repo's emitted files
112
+ ```
113
+
114
+ CI runs all five, in that order, on every push to `main` and every PR. Work
115
+ lands on a feature branch and merges via PR — no direct pushes to `main`.
116
+
117
+ - `src/` — CLI implementation (emit, sync, merge, manifest, packages,
118
+ permissions, plugins, anchors, init).
119
+ - `packages/<layer>/<pkg>/` — methodology source (`layer1/`, `layer2/`, plus
120
+ thin `external/` plugin-marketplace packages).
121
+ - `test/` — unit tests mirroring `src/`. `conformance/` — the CI-gated
122
+ conformance suite.
123
+ - `docs/wiki/` — the durable, in-repo knowledge wiki and canonical design doc;
124
+ start at [`docs/wiki/index.md`](docs/wiki/index.md).
125
+
126
+ See [`CLAUDE.md`](CLAUDE.md) for the project's non-negotiable rails.
package/dist/init.d.ts CHANGED
@@ -38,8 +38,25 @@ export interface InitPreview {
38
38
  manifestYaml: string;
39
39
  /** Dry-run emit report: what files init would create/update. */
40
40
  report: SyncReport;
41
+ /**
42
+ * True when init would write the `.praxis-setup-pending` sentinel (fresh repo
43
+ * with no `CLAUDE.md` + `claude-code` in targets). WS1 uses this to surface
44
+ * the pending sentinel in the outro.
45
+ */
46
+ willWriteSentinel: boolean;
41
47
  }
42
48
  /** Compute everything init would do, writing nothing. */
43
49
  export declare function previewInit(cwd: string): InitPreview;
44
- /** Write `praxis.yaml` and apply the methodology files. */
45
- export declare function applyInit(cwd: string, manifest: Manifest): SyncReport;
50
+ /** The transient sentinel written on fresh installs (D14). The onboarding bootstrap
51
+ * rule triggers `/praxis-onboard`, which deletes it when done — one-shot, never
52
+ * a managed/synced file. */
53
+ export declare const SETUP_SENTINEL = ".praxis-setup-pending";
54
+ /**
55
+ * Write the transient `.praxis-setup-pending` sentinel directly (outside the
56
+ * sync/emit pipeline) so `praxis check` never treats it as drift. Called only
57
+ * when `!ctx.hasClaudeMd && manifest.targets.includes("claude-code")`.
58
+ */
59
+ export declare function writeSetupSentinel(cwd: string): void;
60
+ /** Write `praxis.yaml`, apply the methodology files, and — for a fresh
61
+ * Claude Code repo with no CLAUDE.md — write the onboarding sentinel (D14). */
62
+ export declare function applyInit(cwd: string, manifest: Manifest, ctx: Pick<InitContext, "hasClaudeMd">): SyncReport;
package/dist/init.js CHANGED
@@ -111,13 +111,43 @@ export function previewInit(cwd) {
111
111
  manifest,
112
112
  manifestYaml: renderManifestYaml(manifest),
113
113
  report: applyManifest(manifest, cwd, false),
114
+ willWriteSentinel: !ctx.hasClaudeMd && manifest.targets.includes("claude-code"),
114
115
  };
115
116
  }
116
- /** Write `praxis.yaml` and apply the methodology files. */
117
- export function applyInit(cwd, manifest) {
117
+ /** The transient sentinel written on fresh installs (D14). The onboarding bootstrap
118
+ * rule triggers `/praxis-onboard`, which deletes it when done — one-shot, never
119
+ * a managed/synced file. */
120
+ export const SETUP_SENTINEL = ".praxis-setup-pending";
121
+ const SENTINEL_CONTENT = `# .praxis-setup-pending
122
+ #
123
+ # This file was written by \`praxis init\` to signal that project-owned sections
124
+ # of CLAUDE.md haven't been authored yet for this fresh install.
125
+ #
126
+ # At the start of the next session your AI coding agent will offer to run
127
+ # /praxis-onboard, which guides you through writing the build/run/test commands,
128
+ # project layout, conventions, and always-do rules for this repo.
129
+ #
130
+ # /praxis-onboard deletes this file when it finishes — making onboarding
131
+ # one-shot. You can also delete this file yourself to skip onboarding.
132
+ `;
133
+ /**
134
+ * Write the transient `.praxis-setup-pending` sentinel directly (outside the
135
+ * sync/emit pipeline) so `praxis check` never treats it as drift. Called only
136
+ * when `!ctx.hasClaudeMd && manifest.targets.includes("claude-code")`.
137
+ */
138
+ export function writeSetupSentinel(cwd) {
139
+ writeFileSync(join(cwd, SETUP_SENTINEL), SENTINEL_CONTENT, "utf8");
140
+ }
141
+ /** Write `praxis.yaml`, apply the methodology files, and — for a fresh
142
+ * Claude Code repo with no CLAUDE.md — write the onboarding sentinel (D14). */
143
+ export function applyInit(cwd, manifest, ctx) {
118
144
  const path = join(cwd, MANIFEST_FILE);
119
145
  mkdirSync(dirname(path), { recursive: true });
120
146
  writeFileSync(path, renderManifestYaml(manifest), "utf8");
121
- return applyManifest(manifest, cwd, true);
147
+ const report = applyManifest(manifest, cwd, true);
148
+ if (!ctx.hasClaudeMd && manifest.targets.includes("claude-code")) {
149
+ writeSetupSentinel(cwd);
150
+ }
151
+ return report;
122
152
  }
123
153
  //# sourceMappingURL=init.js.map
package/dist/init.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"init.js","sourceRoot":"","sources":["../src/init.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"init.js","sourceRoot":"","sources":["../src/init.ts"],"names":[],"mappings":"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"}
package/dist/program.js CHANGED
@@ -161,7 +161,10 @@ async function runInit(opts) {
161
161
  const manifestYaml = renderManifestYaml(manifest);
162
162
  const report = applyManifest(manifest, cwd, false);
163
163
  note(manifestYaml.trimEnd(), "praxis.yaml (proposed)");
164
- note(formatPlan(report, "init"), "Will write");
164
+ const freshHarness = !ctx.hasClaudeMd && manifest.targets.includes("claude-code");
165
+ const willWritePlan = formatPlan(report, "init");
166
+ const sentinelLine = freshHarness ? "\n + .praxis-setup-pending (onboarding sentinel)" : "";
167
+ note(willWritePlan + sentinelLine, "Will write");
165
168
  if (!opts.yes) {
166
169
  const ok = await confirm({ message: "Apply these changes?" });
167
170
  if (isCancel(ok) || !ok) {
@@ -169,8 +172,34 @@ async function runInit(opts) {
169
172
  return;
170
173
  }
171
174
  }
172
- applyInit(cwd, manifest);
173
- outro("Done. Run `praxis check` anytime to verify the repo is in sync.");
175
+ applyInit(cwd, manifest, ctx);
176
+ const SKILLS = "/praxis-instructions /praxis-wiki /praxis-handoff\n /praxis-upkeep /praxis-onboard";
177
+ if (freshHarness) {
178
+ note([
179
+ "Open Claude Code in this repo.",
180
+ "It will offer to run /praxis-onboard automatically (one-shot bootstrap).",
181
+ "Or run /init then /praxis-onboard yourself to author project facts.",
182
+ "",
183
+ "Installed skills:",
184
+ ` ${SKILLS}`,
185
+ "",
186
+ "Run `praxis check` anytime to verify the repo is in sync (good for CI).",
187
+ ].join("\n"), "Next steps");
188
+ outro("Methodology layer installed. Open Claude Code to complete onboarding.");
189
+ }
190
+ else {
191
+ note([
192
+ "Your CLAUDE.md was left untouched (existing harness preserved).",
193
+ ".claude/rules load automatically — no edits needed.",
194
+ "",
195
+ "Installed skills:",
196
+ ` ${SKILLS}`,
197
+ "",
198
+ "To tune: edit `praxis.yaml`, then run `praxis sync`.",
199
+ "Run `praxis check` anytime to verify the repo is in sync (good for CI).",
200
+ ].join("\n"), "Next steps");
201
+ outro("Methodology layer installed.");
202
+ }
174
203
  }
175
204
  catch (err) {
176
205
  cancel(`praxis: ${err.message}`);
@@ -1 +1 @@
1
- {"version":3,"file":"program.js","sourceRoot":"","sources":["../src/program.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"program.js","sourceRoot":"","sources":["../src/program.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@aacombarro89/praxis",
3
- "version": "0.1.0",
3
+ "version": "0.1.1",
4
4
  "description": "A CLI that installs an AI methodology layer into a codebase.",
5
5
  "type": "module",
6
6
  "bin": {
@@ -1,10 +1,10 @@
1
1
  ---
2
- description: Audit the authored instruction files (CLAUDE.md, .claude/rules) against the project's current state and bring them back in line.
2
+ description: Keep the authored instruction files (CLAUDE.md, .claude/rules) current with the project's state and complete against the standard rubric.
3
3
  ---
4
4
 
5
- Audit scope: $ARGUMENTS
5
+ Scope: $ARGUMENTS
6
6
 
7
- This audits the **authored instruction layer** — `CLAUDE.md` and
7
+ This updates the **authored instruction layer** — `CLAUDE.md` and
8
8
  `.claude/rules` — not the tool's native auto-memory and not any 3rd-party
9
9
  agent-memory system. Those are out of scope.
10
10
 
@@ -1,5 +1,5 @@
1
1
  # Package manifest (docs/wiki/packages-and-emit.md, D20). This package provides a standing
2
- # reminder (rules.md) plus the /praxis-audit command (commands/audit.md) that
2
+ # reminder (rules.md) plus the /praxis-instructions command (commands/instructions.md) that
3
3
  # keeps the authored instruction layer (CLAUDE.md, .claude/rules) current —
4
4
  # never the tool's native auto-memory, never a 3rd-party memory system
5
5
  # (docs/wiki/onboarding.md).
@@ -13,9 +13,12 @@ and complete:
13
13
  a fact that isn't backed by the code, config, or the user's answer.
14
14
  - Prefer linking a canonical source (e.g. an architecture doc) over restating
15
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.
16
19
  - When instruction files include `praxisAnchors` frontmatter, keep those anchors
17
20
  resolving. `praxis check` hard-fails broken `path`, `command`, and `section`
18
21
  anchors; staleness signals are future advisory work.
19
- - Make instruction-layer changes through `/praxis-audit`, not ad-hoc edits — run
22
+ - Make instruction-layer changes through `/praxis-instructions`, not ad-hoc edits — run
20
23
  it when unsure whether the instruction files still match the project, or whether
21
24
  they cover the sections above.
@@ -0,0 +1,59 @@
1
+ ---
2
+ description: Author the project-owned sections of CLAUDE.md for a fresh Praxis install — build/run/test commands, layout, conventions, and always-do rules. One-shot: deletes .praxis-setup-pending when done.
3
+ ---
4
+
5
+ Scope: $ARGUMENTS
6
+
7
+ This authors the **project-owned** sections of `CLAUDE.md` — not the
8
+ methodology layer (that is managed by Praxis's owned `.claude/rules/` files).
9
+ Praxis never calls an LLM (D12); never edits `CLAUDE.md` directly (D13). The
10
+ **agent** writes the facts, guided by the steps below, asking the user for
11
+ anything it cannot infer.
12
+
13
+ 1. **Bulk discovery — lean on the tool's native `/init` first.** If `CLAUDE.md`
14
+ does not yet exist (or is empty), suggest running the tool's built-in `/init`
15
+ command so the model can auto-discover repository facts (files, build config,
16
+ README). Incorporate any useful output into the project-owned sections below,
17
+ rather than restating it from scratch.
18
+
19
+ 2. **Check detected stacks (if known).** Read `praxis.yaml` for the `stacks:`
20
+ field. If stacks are declared, tailor the sections below to those stacks (e.g.
21
+ for `node`, prefer `npm run …` commands; for `python-backend`, prefer `pytest`
22
+ / `poetry` patterns; for `react`, note the dev server and component test
23
+ runner). Never invent stack facts — confirm them from config files
24
+ (`package.json`, `pyproject.toml`, etc.).
25
+
26
+ 3. **Author the four rubric sections.** For each section, read the project's
27
+ config files and recent git history, then write only what is verifiably true.
28
+ Ask the user before adding anything that isn't clear from the code:
29
+
30
+ - **Build / test / run commands** — the exact commands to typecheck, build,
31
+ run the test suite, and start the app. Include any CI commands that differ
32
+ from local. Never guess; confirm from `package.json` scripts, `Makefile`,
33
+ `pyproject.toml`, etc.
34
+ - **Project layout** — key directories and their purpose. One sentence per
35
+ entry is enough; link canonical docs rather than restating their content.
36
+ - **Key conventions** — branch/PR flow, what a change must ship with (tests,
37
+ docs update, etc.), naming conventions, anything a newcomer would violate.
38
+ - **Always-do rules** — the small set of non-negotiable habits (e.g. "run
39
+ `praxis check` before pushing", "never commit secrets"). Keep this list
40
+ short; a long always-do list is never read.
41
+
42
+ 4. **Ask the user for anything not inferable.** If a section can't be filled from
43
+ config files, git history, or the `/init` output, ask a targeted question
44
+ rather than inventing a plausible answer. Content inclusion bar: a fact only
45
+ enters if it's backed by the code, config, a canonical doc, or the user.
46
+
47
+ 5. **Write only project-owned content.** Never put content inside a Praxis
48
+ managed block (a `<!-- praxis-start … -->` / `<!-- praxis-end … -->` region).
49
+ Project facts belong in the free-prose sections the author controls; Praxis
50
+ owns only its own managed blocks.
51
+
52
+ 6. **Delete `.praxis-setup-pending`** to make this one-shot. Once the rubric
53
+ sections are authored and the user is satisfied, remove the sentinel file
54
+ from the repo root. This prevents the bootstrap rule (`.claude/rules/
55
+ praxis-onboarding.md`) from re-offering onboarding on the next session.
56
+
57
+ 7. **Report what was written / left.** Summarise which rubric sections were
58
+ filled, which were left empty (and why — e.g. "no build step detected"), and
59
+ any follow-up items for the user.
@@ -0,0 +1,8 @@
1
+ # Package manifest (docs/wiki/packages-and-emit.md, D20). This package provides a bootstrap
2
+ # rule (rules.md) that self-terminates after first-run onboarding, and the /praxis-onboard
3
+ # command (commands/onboard.md) that guides the agent through authoring project facts
4
+ # (build/run/test, layout, conventions) — never authoring them directly (D12/D13).
5
+ # Part of the D14 onboarding mechanism (docs/wiki/onboarding.md).
6
+ name: onboarding
7
+ layer: layer1
8
+ provides: [rules, commands]
@@ -0,0 +1,14 @@
1
+ ## First-run onboarding
2
+
3
+ At the start of work, check for the `.praxis-setup-pending` sentinel file in
4
+ the repo root. Its presence means this is a fresh Praxis install and the
5
+ project-owned sections of `CLAUDE.md` haven't been authored yet.
6
+
7
+ - **If the sentinel is present:** offer to run `/praxis-onboard`. Once the
8
+ skill completes it deletes the sentinel — making this check one-shot and
9
+ self-terminating. Never nag when the sentinel is absent.
10
+ - **If the sentinel is absent:** do nothing here. The ongoing instruction
11
+ upkeep path (`/praxis-instructions`) handles currency after initial setup.
12
+
13
+ Cross-references: `/praxis-onboard` (first-run authoring),
14
+ `/praxis-instructions` (ongoing upkeep — D22/D23, [onboarding](../../../docs/wiki/onboarding.md)).
@@ -17,7 +17,7 @@ independently of its canonical home.
17
17
  conflicts or broken anchors, surface them as-is. This step needs no LLM
18
18
  judgment — do it first so the semantic passes below build on a known-good
19
19
  baseline.
20
- 2. **Instruction layer.** Perform the audit defined by `/praxis-audit`,
20
+ 2. **Instruction layer.** Perform the update defined by `/praxis-instructions`,
21
21
  scoped to the focus above. Follow that command's own steps; do not
22
22
  re-derive them here.
23
23
  3. **Wiki.** Perform the wiki maintenance defined by `/praxis-wiki`, scoped to
@@ -1,7 +1,7 @@
1
1
  # Package manifest (docs/wiki/packages-and-emit.md, D29). Ships a standing reminder
2
2
  # (rules.md) plus the /praxis-upkeep command (commands/upkeep.md): one entry point
3
3
  # that runs the deterministic `praxis check` drift gate and then both semantic-drift
4
- # passes — the instruction-layer audit (/praxis-audit) and the wiki lint
4
+ # passes — the instruction-layer update (/praxis-instructions) and the wiki lint
5
5
  # (/praxis-wiki Phase 4) — and reports one consolidated result. Layer 1 /
6
6
  # stack- & tool-agnostic; defers to those two commands rather than restating
7
7
  # their steps, so the detail can't drift independently of its canonical home.
@@ -7,6 +7,6 @@ longer matches the code, an unsynced emit — or when work produces new durable
7
7
  knowledge to file (a decision, a new package), run `/praxis-upkeep` rather than
8
8
  letting the gap persist, fixing it ad hoc, or invoking the sub-skills piecemeal.
9
9
  It is the single front gate: it sequences `praxis check` and fully delegates to
10
- `/praxis-audit` (instruction layer) and `/praxis-wiki` (knowledge wiki). The
10
+ `/praxis-instructions` (instruction layer) and `/praxis-wiki` (knowledge wiki). The
11
11
  command itself only sequences and reports; the sub-skills make any edits, each
12
12
  behind its own confirmation gate.
@@ -11,7 +11,7 @@ of long-lived knowledge that a future session reads instead of re-deriving. This
11
11
  is the agent's cross-session memory **of the project** — version-controlled and
12
12
  shared with the team. It is NOT a per-session handoff (transient — that is
13
13
  `/praxis-handoff`) and NOT the authored instruction layer (`CLAUDE.md`,
14
- `.claude/rules` — that is `/praxis-audit`).
14
+ `.claude/rules` — that is `/praxis-instructions`).
15
15
 
16
16
  The wiki has two kinds of durable knowledge:
17
17
  - **Derived summaries** compress code, config, and canonical docs. The underlying
@@ -81,7 +81,7 @@ Health-check the wiki and fix what you can (ask before large deletions):
81
81
  - **Contradictions** — derived summaries that disagree with current code/config
82
82
  lose to the source; fix the wiki. Canonical-intent entries are different: if
83
83
  code and intent diverge, report the drift and route it to a decision/update
84
- step (or `/praxis-audit` for instruction-layer changes) instead of deciding
84
+ step (or `/praxis-instructions` for instruction-layer changes) instead of deciding
85
85
  automatically. Two wiki entries that disagree resolve to the more recent /
86
86
  authoritative / better-supported claim, with the resolution noted.
87
87
  - **Stale claims** — derived facts the current code has invalidated: fix or
@@ -1,61 +0,0 @@
1
- import { z } from "zod";
2
- import type { Manifest, Target } from "./manifest.js";
3
- declare const lockEntrySchema: z.ZodObject<{
4
- name: z.ZodString;
5
- spec: z.ZodArray<z.ZodString>;
6
- targets: z.ZodArray<z.ZodString>;
7
- }, z.core.$strict>;
8
- declare const lockSchema: z.ZodObject<{
9
- version: z.ZodLiteral<1>;
10
- installed: z.ZodDefault<z.ZodArray<z.ZodObject<{
11
- name: z.ZodString;
12
- spec: z.ZodArray<z.ZodString>;
13
- targets: z.ZodArray<z.ZodString>;
14
- }, z.core.$strict>>>;
15
- }, z.core.$strict>;
16
- export type LockEntry = z.infer<typeof lockEntrySchema>;
17
- export type Lock = z.infer<typeof lockSchema>;
18
- export declare const EMPTY_LOCK: Lock;
19
- export type ExternalActionKind = "install" | "reinstall" | "skip" | "orphan";
20
- export interface ExternalAction {
21
- kind: ExternalActionKind;
22
- name: string;
23
- /** Targets the action applies to (the intersection of manifest.targets and
24
- * the package's declared external.targets — empty if fully quarantined out). */
25
- targets: Target[];
26
- /** argv to run for install/reinstall; the declared uninstall argv for
27
- * orphan (undefined if the package declared none — warn-only removal). */
28
- command?: string[];
29
- }
30
- /**
31
- * Decide what `sync` would do with every selected external package, against
32
- * the current lock. Pure: the lock is injected so this is testable without
33
- * disk, and it performs no execution itself.
34
- *
35
- * - `install`: no lock entry for this package yet.
36
- * - `reinstall`: lock entry exists but its spec/targets no longer match the
37
- * package's current declaration (the manifest changed under it).
38
- * - `skip`: lock entry matches exactly — idempotent no-op.
39
- * - `orphan`: a lock entry exists for a package no longer selected (or with
40
- * no targets left after quarantine) — offer to remove, never silently.
41
- */
42
- export declare function planExternal(manifest: Manifest, lock: Lock): ExternalAction[];
43
- /** Runs one argv in `cwd`. The real implementation for `executeAction`'s
44
- * injected runner — uses `execFileSync` (argv form, no shell string) so
45
- * there is no pipe/shell-injection surface from a pinned command. */
46
- export declare function runCommand(command: string[], cwd: string): void;
47
- export type CommandRunner = (command: string[], cwd: string) => void;
48
- /** Execute one planned action via the injected runner. Tests pass a stub
49
- * runner so they never actually shell out. No-op for `skip`, and for
50
- * `orphan` when the package declared no `uninstall` (Praxis doesn't own
51
- * those files and never deletes them on the user's behalf). */
52
- export declare function executeAction(action: ExternalAction, cwd: string, runner?: CommandRunner): void;
53
- /** Read `praxis-external.lock` from `cwd`, or the empty lock if absent. */
54
- export declare function readLock(cwd: string): Lock;
55
- /** Apply a list of executed actions to a lock, returning the next lock.
56
- * Pure — the caller decides whether/when to persist it. */
57
- export declare function applyActionsToLock(lock: Lock, actions: ExternalAction[]): Lock;
58
- /** Persist the lock to `praxis-external.lock` at `cwd`, sorted for a stable
59
- * diff (deterministic, reviewable — no timestamps anywhere in the file). */
60
- export declare function writeLock(cwd: string, lock: Lock): void;
61
- export {};
package/dist/external.js DELETED
@@ -1,155 +0,0 @@
1
- import { execFileSync } from "node:child_process";
2
- import { existsSync, readFileSync, writeFileSync } from "node:fs";
3
- import { join } from "node:path";
4
- import { z } from "zod";
5
- import { resolvePackages } from "./packages.js";
6
- /**
7
- * External installer packages (docs/wiki/external-packages.md, the bounded
8
- * execution relaxation — see docs/wiki/decisions.md). A "rules"/"permissions"/
9
- * "commands" package ships tool-neutral source that the *pure* emit pipeline
10
- * (src/emit.ts) translates and writes. An "external" package ships no source
11
- * at all — only a pinned install command that some other tool (npx/git) runs
12
- * to drop its own already-tool-shaped files into the methodology layer (e.g.
13
- * `.claude/skills/…`).
14
- *
15
- * That's side-effecting and untranslatable, so it never becomes an `EmitOp`.
16
- * This module is the separate, explicit seam: `planExternal` decides *what*
17
- * would happen (pure, no I/O — same plan/apply split as src/emit.ts +
18
- * src/sync.ts), and `executeAction` is the one place that actually shells out,
19
- * with the runner injected so tests never really execute a command.
20
- */
21
- const LOCK_FILE = "praxis-external.lock";
22
- // One row per (package, target) pair Praxis has installed. No timestamps —
23
- // the pinned spec is the whole identity, so the lock is stable in git and
24
- // re-syncing is deterministic: same spec ⇒ same action.
25
- const lockEntrySchema = z.strictObject({
26
- name: z.string().min(1),
27
- spec: z.array(z.string().min(1)).min(1),
28
- targets: z.array(z.string().min(1)).min(1),
29
- });
30
- const lockSchema = z.strictObject({
31
- version: z.literal(1),
32
- installed: z.array(lockEntrySchema).default([]),
33
- });
34
- export const EMPTY_LOCK = { version: 1, installed: [] };
35
- /**
36
- * Decide what `sync` would do with every selected external package, against
37
- * the current lock. Pure: the lock is injected so this is testable without
38
- * disk, and it performs no execution itself.
39
- *
40
- * - `install`: no lock entry for this package yet.
41
- * - `reinstall`: lock entry exists but its spec/targets no longer match the
42
- * package's current declaration (the manifest changed under it).
43
- * - `skip`: lock entry matches exactly — idempotent no-op.
44
- * - `orphan`: a lock entry exists for a package no longer selected (or with
45
- * no targets left after quarantine) — offer to remove, never silently.
46
- */
47
- export function planExternal(manifest, lock) {
48
- const packages = resolvePackages(manifest.packages).filter((p) => p.provides.includes("external"));
49
- const manifestTargets = new Set(manifest.targets);
50
- const actions = [];
51
- const seen = new Set();
52
- for (const pkg of packages) {
53
- const block = pkg.external;
54
- if (!block)
55
- continue; // schema guarantees this is unreachable; guard for type-narrowing only
56
- const targets = block.targets.filter((t) => manifestTargets.has(t));
57
- seen.add(pkg.name);
58
- const existing = lock.installed.find((e) => e.name === pkg.name);
59
- if (targets.length === 0) {
60
- // Fully quarantined out for this manifest's targets: nothing to run. If a
61
- // prior sync installed it for targets no longer selected, that's an orphan.
62
- if (existing) {
63
- actions.push({ kind: "orphan", name: pkg.name, targets: existing.targets, command: block.uninstall });
64
- }
65
- continue;
66
- }
67
- if (!existing) {
68
- actions.push({ kind: "install", name: pkg.name, targets, command: block.command });
69
- continue;
70
- }
71
- const specMatches = arraysEqual(existing.spec, block.command) && arraysEqual([...existing.targets].sort(), [...targets].sort());
72
- actions.push(specMatches
73
- ? { kind: "skip", name: pkg.name, targets }
74
- : { kind: "reinstall", name: pkg.name, targets, command: block.command });
75
- }
76
- // Lock entries for packages no longer selected at all are orphans too.
77
- for (const entry of lock.installed) {
78
- if (seen.has(entry.name))
79
- continue;
80
- const uninstall = lookupUninstall(entry.name);
81
- actions.push({ kind: "orphan", name: entry.name, targets: entry.targets, command: uninstall });
82
- }
83
- return actions;
84
- }
85
- /** Look up a previously-installed package's declared uninstall argv, if the
86
- * package is still discoverable (it may have been removed entirely from
87
- * `packages/external/`, in which case removal stays warn-only). */
88
- function lookupUninstall(name) {
89
- try {
90
- return resolvePackages([name])[0]?.external?.uninstall;
91
- }
92
- catch {
93
- return undefined;
94
- }
95
- }
96
- function arraysEqual(a, b) {
97
- return a.length === b.length && a.every((v, i) => v === b[i]);
98
- }
99
- /** Runs one argv in `cwd`. The real implementation for `executeAction`'s
100
- * injected runner — uses `execFileSync` (argv form, no shell string) so
101
- * there is no pipe/shell-injection surface from a pinned command. */
102
- export function runCommand(command, cwd) {
103
- if (command.length === 0)
104
- throw new Error("runCommand: empty argv");
105
- const [bin, ...args] = command;
106
- execFileSync(bin, args, { cwd, stdio: "inherit" });
107
- }
108
- /** Execute one planned action via the injected runner. Tests pass a stub
109
- * runner so they never actually shell out. No-op for `skip`, and for
110
- * `orphan` when the package declared no `uninstall` (Praxis doesn't own
111
- * those files and never deletes them on the user's behalf). */
112
- export function executeAction(action, cwd, runner = runCommand) {
113
- if (action.kind === "skip")
114
- return;
115
- if (action.kind === "orphan" && !action.command)
116
- return; // warn-only; caller reports it
117
- if (!action.command)
118
- return;
119
- runner(action.command, cwd);
120
- }
121
- /** Read `praxis-external.lock` from `cwd`, or the empty lock if absent. */
122
- export function readLock(cwd) {
123
- const path = join(cwd, LOCK_FILE);
124
- if (!existsSync(path))
125
- return EMPTY_LOCK;
126
- const raw = JSON.parse(readFileSync(path, "utf8"));
127
- return lockSchema.parse(raw);
128
- }
129
- /** Apply a list of executed actions to a lock, returning the next lock.
130
- * Pure — the caller decides whether/when to persist it. */
131
- export function applyActionsToLock(lock, actions) {
132
- let installed = lock.installed;
133
- for (const action of actions) {
134
- if (action.kind === "install" || action.kind === "reinstall") {
135
- installed = [
136
- ...installed.filter((e) => e.name !== action.name),
137
- { name: action.name, spec: action.command ?? [], targets: action.targets },
138
- ];
139
- }
140
- else if (action.kind === "orphan") {
141
- installed = installed.filter((e) => e.name !== action.name);
142
- }
143
- }
144
- return { version: 1, installed };
145
- }
146
- /** Persist the lock to `praxis-external.lock` at `cwd`, sorted for a stable
147
- * diff (deterministic, reviewable — no timestamps anywhere in the file). */
148
- export function writeLock(cwd, lock) {
149
- const sorted = {
150
- version: 1,
151
- installed: [...lock.installed].sort((a, b) => a.name.localeCompare(b.name)),
152
- };
153
- writeFileSync(join(cwd, LOCK_FILE), `${JSON.stringify(sorted, null, 2)}\n`, "utf8");
154
- }
155
- //# sourceMappingURL=external.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"external.js","sourceRoot":"","sources":["../src/external.ts"],"names":[],"mappings":"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"}