omniconductor 0.6.0 → 1.0.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.
Files changed (48) hide show
  1. package/CHANGELOG.md +63 -0
  2. package/README.md +16 -12
  3. package/VISION.md +2 -2
  4. package/adapters/README.md +8 -8
  5. package/adapters/claude/README.md +2 -5
  6. package/adapters/claude/SUPPORTED-FEATURES.md +1 -1
  7. package/adapters/claude/metadata.json +39 -0
  8. package/adapters/claude/transform.sh +198 -34
  9. package/adapters/codex/README.md +23 -27
  10. package/adapters/codex/metadata.json +35 -0
  11. package/adapters/codex/transform-spec.md +5 -6
  12. package/adapters/codex/transform.sh +282 -35
  13. package/adapters/copilot/README.md +26 -29
  14. package/adapters/copilot/metadata.json +36 -0
  15. package/adapters/copilot/transform.sh +124 -33
  16. package/adapters/cursor/README.md +31 -30
  17. package/adapters/cursor/metadata.json +35 -0
  18. package/adapters/cursor/transform.sh +115 -26
  19. package/adapters/gemini/README.md +14 -15
  20. package/adapters/gemini/metadata.json +36 -0
  21. package/adapters/gemini/transform.sh +310 -34
  22. package/adapters/windsurf/README.md +20 -19
  23. package/adapters/windsurf/metadata.json +36 -0
  24. package/adapters/windsurf/transform.sh +137 -53
  25. package/bin/doctor.js +257 -0
  26. package/bin/omniconductor.js +15 -2
  27. package/core/anti-patterns/frequent-rule-file-edit.md +1 -1
  28. package/core/anti-patterns/single-monolithic-rule-file.md +1 -1
  29. package/core/recipes/README.md +2 -2
  30. package/core/universal-rules/README.md +4 -4
  31. package/core/universal-rules/meta-discipline.md +4 -4
  32. package/core/universal-rules/spec-as-you-go.md +1 -1
  33. package/docs/ADAPTER-LIVE-VERIFICATION.md +73 -0
  34. package/docs/COMPARISON.md +133 -0
  35. package/docs/COMPATIBILITY-MATRIX.md +126 -0
  36. package/docs/DESIGN-DECISIONS.md +1268 -0
  37. package/docs/MANUAL-INSTALL.md +15 -15
  38. package/docs/PUBLICATION-POLICY.md +46 -0
  39. package/docs/PUBLISH-GUIDE.md +141 -0
  40. package/package.json +7 -1
  41. package/tools/check-adapter-metadata.sh +211 -0
  42. package/tools/check-stale-tokens.sh +130 -0
  43. package/tools/generate-adapter-docs.js +123 -0
  44. package/tools/live-verify.sh +195 -0
  45. package/tools/manifest-safety.sh +118 -0
  46. package/tools/stale-tokens.txt +32 -0
  47. package/tools/test-install-modes.sh +277 -0
  48. package/tools/validate-adapter-output.sh +1 -1
package/CHANGELOG.md CHANGED
@@ -5,6 +5,69 @@ Format follows [Keep a Changelog](https://keepachangelog.com/); versioning is [S
5
5
 
6
6
  ## [Unreleased]
7
7
 
8
+ ## [1.0.1] — 2026-07-09
9
+
10
+ ### Fixed — manifest safety follow-up
11
+ - **Checksum-protected uninstall on all six adapters** — normal manifest entries now record the emitted file's SHA-256. `--uninstall` removes or restores only an unchanged emitted file; a user-modified file (and legacy manifest entries without a checksum) is preserved with a warning instead of being deleted.
12
+ - **Lossless full-mode re-install** — an unmodified re-install retains the original pre-CONDUCTOR backup rather than replacing it with the prior generated bundle. Backup names are collision-safe within the same second. If a generated file was edited before an update, that edit is backed up before replacement.
13
+ - **Owned marked blocks only** — Gemini/Codex replace an existing `conductor:block` only when exactly one matching marker pair is present, the current manifest owns it, and its content hash is unchanged. Foreign, malformed, duplicate, or customized markers abort without changing the host file.
14
+ - **Regression coverage** — `tools/test-install-modes.sh` now asserts original-baseline restoration after two full installs, preservation of user edits during uninstall for every adapter, and non-destructive foreign-marker rejection for Gemini/Codex.
15
+ - **Private-source/public-mirror policy** — the source repository remains private; a fail-closed filtered snapshot is the only route to the public mirror and npm release. `sync-public.sh HEAD --check` is network-free and runs in CI to reject denied paths or private tokens before merge. See `docs/PUBLICATION-POLICY.md`.
16
+
17
+ ## [1.0.0] — 2026-07-09
18
+
19
+ ### Added — install modes (audit follow-up #4; the final pre-1.0 feature)
20
+ - **`--mode=full|minimal|strict|recipes-only|reflector-only` on all six adapters** (npx CLI forwards it; manifest stamps `"mode"`). `full` = unchanged default. `minimal` = discipline text + docs only (no agents/hooks/Reflector runtime). `strict` = abort (exit 3) instead of touching an existing baseline. `recipes-only` = à la carte (requires `--recipes=`). `reflector-only` = the self-improvement loop standalone — the least-conflicting install for projects already on Spec Kit / BMAD. — **ADR-044**.
21
+ - **Marked append-blocks for single-file tools (Gemini/Codex)** — à-la-carte modes APPEND `<!-- conductor:block … -->` to an existing `GEMINI.md`/`AGENTS.md` instead of overwriting; the manifest tracks `type: block` + content `sha256` + `created_file`, and `--uninstall` strips the block only when unmodified (a customized block is left in place with a warning). Windsurf needed no blocks — its rules are per-file under `.devin/rules/`.
22
+ - **Framework detection** — the installer detects Spec Kit (`.specify/`) / BMAD (`_bmad`/`.bmad-core`) and *suggests* an à-la-carte mode. Suggest only; never auto-switches.
23
+ - **`tools/test-install-modes.sh`** — per-tool mode-behavior harness (strict abort incl. secondary rules surfaces, à-la-carte emission sets, **byte-lossless block round-trips (checksum-asserted)**, cross-mode block cleanup, customized-block preservation, zero-valid-recipes failure); CI job `install-modes` runs it for all six adapters.
24
+ - **`install.ala_carte` in adapter metadata** — the block-vs-per-file à-la-carte strategy is single-sourced in `metadata.json` (new M9 consistency check + a column in the generated outputs table). npm-registry lag now surfaces as a non-fatal `WARN[A3]` in the stale-token check.
25
+
26
+ ### Changed
27
+ - ROADMAP P4 marked **Done** — v1.0.0 is the public release (beta feedback + marketplace listing move post-1.0). COMPARISON's "pre-1.0" maturity framing retired (tokenized per the ADR-039 process rule).
28
+ - Claude adapter: `INSTALLED_HOOKS` initialized before mode branches; recipes step creates `.claude/rules/` itself (à-la-carte no longer depends on step 1).
29
+
30
+ ### Milestone
31
+ - **v1.0.0** — all five features from the 2026-07-09 audit-follow-up plan are shipped (#3 stale-token CI + #2 metadata single-source in 0.7.0; #1 doctor + #5 live-verify + #2 slice 2 doc generation in 0.8.0; #4 install modes here). The anti-drift system is closed-loop: metadata is the single source, CI regenerates and verifies the docs, doctor checks installs, live-verify records reality.
32
+
33
+ ## [0.8.0] — 2026-07-09
34
+
35
+ ### Added — metadata consumers (audit follow-up #1 + #5 + #2 slice 2)
36
+ - **`omniconductor doctor <target>` (3rd CLI command)** — read-only installed-project health check anchored on `.conductor-manifest.json`. Seven groups: manifest validity · version drift (install stamp vs running CLI) · file integrity · stale legacy paths (from adapter `metadata.json`, `--legacy-cursorrules` aware) · hook validity (`.json` parses, `.sh` executable + `bash -n`) · doc-link liveness · stale-claim scan (reuses `tools/stale-tokens.txt` semantics). OK/WARN/FAIL → exit 0/1/2, `--json` for machines. CI runs a positive + negative doctor smoke per adapter. Prior-art differentiated by scope (per-project asset health), not name. — **ADR-041**.
37
+ - **Generated doc regions from metadata (`tools/generate-adapter-docs.js`)** — the live-verification status table (`docs/ADAPTER-LIVE-VERIFICATION.md`) and a new "Adapter outputs at a glance" table (`docs/COMPATIBILITY-MATRIX.md`) are now rendered from `adapters/*/metadata.json`; `--check` fails CI on drift. All remaining hand-written live-verification dates/CLI versions on living surfaces replaced with date-free pointers to the generated table (milestone history keeps "first live-verified" dates). — **ADR-042**.
38
+ - **`tools/live-verify.sh` — automated live rule-loading verification** — per tool: throwaway install → headless probe (read-only) → deterministic grade (≥3/5 universal rule names + CURRENT_WORK; no LLM judge) → writes `live_verification` into `metadata.json` and regenerates the doc tables. Honest SKIP when a CLI isn't installed; >90-day freshness WARN; local-first (CI can't hold six authenticated CLIs). **First run: Claude Code newly live-verified (5/5 rules, Claude Code 2.1.205) and Codex re-verified (4/5, codex-cli 0.144.0), both 2026-07-09.** — **ADR-043**.
39
+
40
+ ### Changed
41
+ - Claude adapter manifest now stamps `"adapter": "claude"` (the other five adapters already stamped theirs) — doctor uses it; footprint inference covers pre-0.8 installs.
42
+ - `bin/omniconductor.js` usage/comments: `doctor` added; stale "ADR-018" citation corrected to ADR-002/023/025.
43
+
44
+ ## [0.7.0] — 2026-07-09
45
+
46
+ ### Added — anti-drift guards (audit follow-up #3 + #2 slice 1)
47
+ - **CI stale-token + version-stamp check** — `tools/check-stale-tokens.sh` + data file `tools/stale-tokens.txt` (`pattern⇥reason⇥hint⇥allow_regex`, inline `stale-ok:` waivers) as a new CI job. Class A mechanizes the R7 stamps (README status line must stamp the exact `package.json` version — **now re-stamped on every release, patches included**; CHANGELOG must have the section). Class B fails CI on known-false claims (seeded ~15 tokens from the verified drift inventory: `.codex/codex.md`-as-current, unqualified `.windsurf/rules`, "no npx", "❌ No hooks/sub-agents", "Single model per session", …). Process rule: a change that flips a fact adds the now-false claim to the token list in the same PR. — **ADR-039**.
48
+ - **Adapter metadata single-source** — `adapters/<tool>/metadata.json` ×6 (outputs / reflector outputs / legacy paths / tier / two-axis capabilities per ADR-031 / live-verification / headless CLI) + `tools/check-adapter-metadata.sh` CI job asserting 8 invariants (paths exist in `transform.sh` and the validator; legacy paths handled in code; verified-status dates single-sourced in `docs/ADAPTER-LIVE-VERIFICATION.md`; headless CLIs known to `run-weekly.sh`; matrix tier rows agree). The bash transforms stay dependency-free — metadata validates them, never drives them (ADR-002/023/025). — **ADR-040**.
49
+
50
+ ### Fixed (residual doc drift the 0.6.1 point-fix missed — found by re-verification + the new checker itself)
51
+ - **5 non-Claude adapter READMEs** rewritten to the ADR-031 capability-vs-emission framing (were still "❌ No sub-agent / No hooks / single model" as tool limitations, with pre-P1 rule names in the install trees, "npx not yet available", and a **Codex tier contradiction (README said T3, matrix says T2)**); Reflector emission (`--recipes=self-improvement`) now documented per adapter.
52
+ - **`core/**` reference tables** — `.codex/codex.md` → `AGENTS.md` and `.windsurf/rules/` → `.devin/rules/` in universal-rules/recipes READMEs, spec-as-you-go, anti-pattern examples; meta-discipline cross-tool enforcement table de-staled.
53
+ - **docs/** — ARCHITECTURE (adapter output map, always-loaded row, orchestrator paragraph), INDEX (package row, adapter rows, Codex live-verified, P4 row: npm published), MANUAL-INSTALL (all-6-adapters decision table, "until adapter ships" headers, "No hooks, no sub-agents" limitations), MIGRATION (modern `.mdc` flow, guard-hook phrasing), HOW-IT-WORKS (Gemini/Windsurf lost-feature tables), VISION (`.devin/rules/` tree).
54
+ - **First machine-scan catches** (missed by two human sweeps + a 3-agent verification pass): `adapters/codex/transform-spec.md` body still specced `.codex/codex.md`, `VISION.md` tree, and two "(planned / roadmap — not yet available): npx …" blocks in adapter READMEs — including a claude README pointer to the retired v0.1 archive installer.
55
+
56
+ ### Changed
57
+ - Version-stamp policy: patch releases now re-stamp the README status line (supersedes the 0.6.1 "feature-baseline stamp" stance) — enforced by CI. — **ADR-039**.
58
+ - README's "New in" blockquote now carries only the current release (older summaries drift and were an unguarded second changelog); history lives here.
59
+
60
+ ### Notes
61
+ - **npm registry skips 0.6.1**: 0.6.1 was tagged + released on GitHub but never `npm publish`-ed; the registry goes 0.6.0 → 0.7.0 directly. Everything in 0.6.1 is contained in 0.7.0.
62
+
63
+ ## [0.6.1] — 2026-07-09
64
+
65
+ ### Fixed (documentation + adapter output truth-source; from an external audit)
66
+ - **Manifest version bug** — all 6 adapters hardcoded `"version": "v0.2.0"` in the emitted `.conductor-manifest.json`; now read dynamically from `package.json` (installs stamp the real version). Fixes bogus install-history / rollback / bug-report data.
67
+ - **Adapter capability strings** — Codex/Gemini/Windsurf/Copilot emitted output claimed the tool has "no hooks / no sub-agents / single model"; corrected to the ADR-031 *capability vs CONDUCTOR-emission* framing (the tools support these; CONDUCTOR emits rule text + the Reflector loop, full emission Phase 2).
68
+ - **Doc drift to v0.6.0 reality** — README/ROADMAP/COMPARISON/HOW-IT-WORKS/ARCHITECTURE/VISION/COMPATIBILITY-MATRIX/ADAPTER-LIVE-VERIFICATION/SUPPORTED-FEATURES: all 6 tools have working adapters (not "adapter-less"), npm package exists (no "no npx"), Codex output is `AGENTS.md` (not `.codex/codex.md`), Windsurf emits `.devin/rules/` (not "pending"), Codex is live-verified (single-sourced across docs), Claude hook count reconciled (10 hooks / 5 PreToolUse + 5 Stop).
69
+ - **npm completeness** — `package.json` `files` now ships the docs the README links to (COMPATIBILITY-MATRIX, ADAPTER-LIVE-VERIFICATION, PUBLISH-GUIDE, DESIGN-DECISIONS, COMPARISON), so npm-installed users don't hit dead links.
70
+
8
71
  ## [0.6.0] — 2026-07-07
9
72
 
10
73
  ### Added
package/README.md CHANGED
@@ -6,9 +6,11 @@ Write your project's rules, workflow, and discipline ONCE. Install into any AI c
6
6
 
7
7
  > Born from one year of production iteration at LFamily Labs — the rules, agents, hooks, and memory patterns that survived real shipping pressure.
8
8
 
9
- > **Status (v0.6.0 — 2026-07-07)**: All 6 adapters ship a working `transform.sh` — **Claude Code** (full: rules + hooks + sub-agents + per-call model routing), **Cursor**, **GitHub Copilot** (one install covers 5 IDEs), **Gemini CLI** (`GEMINI.md` + `.gemini/styleguide.md`), **Codex** (`AGENTS.md`), **Windsurf / Devin Desktop** (`.windsurfrules` + `.devin/rules/*.md`). Published to npm as [`omniconductor`](https://www.npmjs.com/package/omniconductor) (v0.6.0). Output is emit-verified (format-validator + CI on all 6); live runtime consumption by Gemini / Codex / Windsurf is adopter-pending — see [`docs/ADAPTER-LIVE-VERIFICATION.md`](./docs/ADAPTER-LIVE-VERIFICATION.md). Manual install ([`docs/MANUAL-INSTALL.md`](./docs/MANUAL-INSTALL.md)) remains a fallback.
9
+ > **Status (v1.0.1 — 2026-07-09)**: All 6 adapters ship a working `transform.sh` — **Claude Code** (full: rules + hooks + sub-agents + per-call model routing), **Cursor**, **GitHub Copilot** (one install covers 5 IDEs), **Gemini CLI** (`GEMINI.md` + `.gemini/styleguide.md`), **Codex** (`AGENTS.md`), **Windsurf / Devin Desktop** (`.windsurfrules` + `.devin/rules/*.md`). This release is ready for npm publication as [`omniconductor`](https://www.npmjs.com/package/omniconductor). Output is emit-verified (format-validator + CI on all 6); **Claude Code + Codex are additionally live-verified** by the automated headless probe (`tools/live-verify.sh`), the rest are live-pending — current per-tool status in the generated table in [`docs/ADAPTER-LIVE-VERIFICATION.md`](./docs/ADAPTER-LIVE-VERIFICATION.md). Manual install ([`docs/MANUAL-INSTALL.md`](./docs/MANUAL-INSTALL.md)) remains a fallback.
10
10
  >
11
- > **New in 0.6.0**: an opt-in **`loop-engineering` recipe** bounded, externally-verified agent loops (explicit done-criterion, iteration+token budget, require-progress, escalate-on-stall, **verify externally never by self-judgment**, oscillation guard), grounded in a 5-source research pass; Claude adds a non-blocking PreToolUse loop-guard, other tools use the rule text (ADR-038). **In 0.5.0**: **`git-hygiene`** shared-repo discipline (ADR-037). **In 0.4.0**: instruction-fidelity **token economy** (ADR-035/036). **In 0.3.0**: **self-improvement / Reflector loop** (ADR-030/032/033) + compatibility-matrix correction (ADR-031). Full history: [`CHANGELOG.md`](./CHANGELOG.md).
11
+ > **New in 1.0.1**: manifest-backed install/uninstall is now checksum-safe: user-modified emitted files are retained, original baselines survive re-installs, and Gemini/Codex only replace manifest-owned, unmodified marked blocks. 1.0 introduced install modes, anti-drift guards, `doctor`, generated doc tables, and live verification. Earlier releases: [`CHANGELOG.md`](./CHANGELOG.md).
12
+ >
13
+ > **Publication boundary**: development is maintained in a private source repository; users receive a deliberately filtered public mirror and npm package. The private source repository must never be made public. See [`docs/PUBLICATION-POLICY.md`](./docs/PUBLICATION-POLICY.md).
12
14
  >
13
15
  > Marketplace listing (VSCode Marketplace + Open VSX) remains **Phase 2** (post-0.6) — see ADR-023.
14
16
 
@@ -76,7 +78,7 @@ bash ~/conductor/adapters/claude/transform.sh . \
76
78
 
77
79
  ### 설치 방법 (3가지)
78
80
 
79
- - **Path A — `npx` (권장, 클론 불필요)**: `npx omniconductor init --target=<tool> <dir>` — `<tool>` = `claude` / `cursor` / `copilot` / `gemini` / `codex` / `windsurf`. `list` · `--dry-run` · `--recipes=A,B` · `--uninstall` 지원.
81
+ - **Path A — `npx` (권장, 클론 불필요)**: `npx omniconductor init --target=<tool> <dir>` — `<tool>` = `claude` / `cursor` / `copilot` / `gemini` / `codex` / `windsurf`. `list` · `doctor` (설치 상태 진단, 읽기 전용) · `--dry-run` · `--recipes=A,B` · `--mode=<preset>` (v1.0: `full`/`minimal`/`strict`/`recipes-only`/`reflector-only` — Spec Kit·BMAD 와 공존용 à-la-carte 포함) · `--uninstall` 지원.
80
82
  - **Path B — bash 어댑터**: CONDUCTOR 클론 후 `bash adapters/<tool>/transform.sh <dir> [--recipes=...] [--dry-run]`.
81
83
  - **Path C — 수동 복사**: 스크립트 없이 `cp`/`cat` 으로. [`docs/MANUAL-INSTALL.md`](./docs/MANUAL-INSTALL.md) 참조.
82
84
  - **Windows**: Git Bash 또는 WSL2 — [Cross-platform](#cross-platform-mac-and-windows) 참조.
@@ -177,7 +179,7 @@ The columns below show **CONDUCTOR emission today** (⚠️ = the tool supports
177
179
 
178
180
  Full per-feature matrix + first-party footnotes: [`docs/COMPATIBILITY-MATRIX.md`](./docs/COMPATIBILITY-MATRIX.md).
179
181
 
180
- > **CLI wrapper**: `npx omniconductor init --target=<tool> <dir>` (published to npm) — or `node bin/omniconductor.js init --target=<tool> <dir>` from a local clone — dispatches to these same adapter scripts, with `list`, `--dry-run`, `--recipes=`, and `--uninstall`.
182
+ > **CLI wrapper**: `npx omniconductor init --target=<tool> <dir>` (published to npm) — or `node bin/omniconductor.js init --target=<tool> <dir>` from a local clone — dispatches to these same adapter scripts, with `list`, `--dry-run`, `--recipes=`, and `--uninstall`. **`npx omniconductor doctor <dir>`** (v0.8+) health-checks an existing install read-only — manifest validity, version drift, file integrity, stale legacy paths, hook validity, doc links, stale claims — exit 0/1/2 (`--json` for machines).
181
183
 
182
184
  > **What you keep going Claude → other tools**: all rule text, doc templates, the 4-type memory pattern, the workflow phases, and the opt-in Reflector loop (emitted on all six). **What is still Claude-only in CONDUCTOR's *emission* today**: auto-blocking hooks, per-call model routing, sub-agent dispatch — a Phase-2 emission gap, **not** a tool limitation (the tools support them; Windsurf is the one real exception, for Stop-style hooks). The discipline is portable; the enforcement is becoming portable as adapter emission catches up.
183
185
 
@@ -248,7 +250,7 @@ bash ~/conductor/adapters/claude/transform.sh . --recipes=monorepo,coding-conven
248
250
 
249
251
  ### Path C — Manual file copy (no script, fully manual)
250
252
 
251
- For tools without an adapter (Gemini / Codex / Windsurf), or for adopters in constrained environments. Step-by-step `cp` / `cat` commands per tool, with frontmatter conversion cheat sheet, are in:
253
+ All 6 tools have a working adapter (Path A/B), so this path is a fallback — for adopters in constrained environments (no bash / no Node) or those who want to see every file before it lands. Step-by-step `cp` / `cat` commands per tool, with frontmatter conversion cheat sheet, are in:
252
254
 
253
255
  → **[`docs/MANUAL-INSTALL.md`](./docs/MANUAL-INSTALL.md)**
254
256
 
@@ -341,6 +343,7 @@ Usage: bash adapters/<tool>/transform.sh <target-project> [options]
341
343
  |---|---|
342
344
  | `<target-project>` | Project directory to install into (required). `.` for current dir. |
343
345
  | `--recipes=A,B,C` | Comma-separated recipes from the 13 in `core/recipes/`. |
346
+ | `--mode=<m>` | Install preset (v1.0, ADR-044): `full` (default) · `minimal` (rule text + docs only — no agents/hooks/Reflector runtime) · `strict` (abort with exit 3 instead of touching an existing baseline) · `recipes-only` (à la carte: ONLY the selected recipes; single-file tools get a hash-tracked marked block appended, stripped losslessly on uninstall) · `reflector-only` (the self-improvement loop standalone — least-conflicting when coexisting with Spec Kit / BMAD, which the installer detects and suggests, never auto-switches). |
344
347
  | `--dry-run` | Preview only — no files written. |
345
348
  | `--measure-baseline` | Run `tools/measure-tokens.sh --latest` after install; save CSV; auto-show anti-patterns if cache hit < 95%. |
346
349
  | `--no-prompt` | Skip wizard, apply defaults (CI-safe). Combine with `--recipes` and `--measure-baseline` as needed. |
@@ -355,7 +358,7 @@ Usage: bash adapters/<tool>/transform.sh <target-project> [options]
355
358
 
356
359
  | File | Already exists |
357
360
  |---|---|
358
- | `CLAUDE.md` / `.cursorrules` / `.github/instructions/all.instructions.md` | Backed up to `.conductor-backup-YYYYMMDD-HHMMSS`, then overwritten |
361
+ | `CLAUDE.md` / `GEMINI.md` / `AGENTS.md` / `.github/copilot-instructions.md` | Backed up to `.conductor-backup-YYYYMMDD-HHMMSS`, then overwritten (`--mode=strict`: aborts instead) |
359
362
  | `.claude/rules/*.md` / `.cursor/rules/*.mdc` / `.github/instructions/*.instructions.md` | Backed up + overwritten |
360
363
  | `.claude/agents/*.md` | Backed up + overwritten |
361
364
  | `.claude/hooks/*.sh` | Overwritten |
@@ -372,7 +375,7 @@ Usage: bash adapters/<tool>/transform.sh <target-project> [options]
372
375
  cd ~/conductor && git pull
373
376
  ```
374
377
 
375
- Then re-run `transform.sh` on each target — installs are idempotent. Existing files get fresh timestamped backups before overwrite (manifest tracks every emitted file, see ADR-020).
378
+ Then re-run `transform.sh` on each target — installs are idempotent. An unchanged CONDUCTOR file retains its original pre-install backup; a user-edited emitted file is backed up before replacement. Manifest entries record the emitted SHA-256 to make uninstall non-destructive.
376
379
 
377
380
  ### Re-measure cache hit (1 week after install)
378
381
 
@@ -395,9 +398,10 @@ bash ~/conductor/adapters/claude/transform.sh ~/your-project --uninstall
395
398
  ```
396
399
 
397
400
  Behavior:
398
- - For each manifested file: restore backup if one exists, otherwise delete.
399
- - Adopter-customized files (anything not in the manifest) are preserved.
400
- - `.conductor-backup-*` siblings cleaned up.
401
+ - For each unchanged manifested file: restore its original backup if one exists, otherwise delete it.
402
+ - A manifested file whose SHA-256 differs (or a legacy manifest without a checksum) is treated as user-modified and left in place with a warning; any original backup is retained for recovery.
403
+ - Adopter-customized files outside the manifest are preserved.
404
+ - Manifest-history backup siblings are cleaned up; retained original backups are never deleted when a user-modified file needs them.
401
405
  - Best-effort `rmdir` of empty `.claude/{rules,agents,hooks}/`.
402
406
 
403
407
  ---
@@ -497,7 +501,7 @@ Claude Code uses `~/.claude/projects/.../memory/`; other tools use `docs/memory/
497
501
 
498
502
  #### Architecture Decision Records (`docs/DESIGN-DECISIONS.md`)
499
503
 
500
- 36 ADRs cover the foundational decisions. Highlights:
504
+ 44 ADRs cover the foundational decisions. Highlights:
501
505
 
502
506
  | ADR | Topic | Why it matters |
503
507
  |---|---|---|
@@ -547,7 +551,7 @@ A: See `docs/COMPARISON.md` for the conflict-resolution decision tree (3 pattern
547
551
 
548
552
  **Q: Idempotent re-install? Will it clobber my edits?**
549
553
 
550
- A: Re-running `transform.sh` is safe. Every overwrite creates a timestamped backup (`.conductor-backup-YYYYMMDD-HHMMSS`); your prior state is recoverable. `docs/CURRENT_WORK.md` and other doc templates are NEVER overwritten if they already exist.
554
+ A: Re-running `transform.sh` is safe. An unchanged emitted file keeps its first pre-CONDUCTOR backup; an edited emitted file is snapshotted before replacement. `--uninstall` preserves any file whose emitted SHA-256 no longer matches, rather than deleting it. `docs/CURRENT_WORK.md` and other doc templates are NEVER overwritten if they already exist.
551
555
 
552
556
  **Q: Use Conductor before all 6 adapters ship?**
553
557
 
package/VISION.md CHANGED
@@ -32,7 +32,7 @@ This is the problem CONDUCTOR solves.
32
32
 
33
33
  ## The solution
34
34
 
35
- > **한글:** 프로젝트의 규율을 도구 독립적인 포맷으로 **단 한 번** 작성하세요. 도구별로 명령어 하나만 실행하면, CONDUCTOR 가 해당 도구에 맞는 파일을 올바른 경로·올바른 포맷으로 생성합니다 (`core/` 에 룰을 한 번 쓰면 → `.claude/` / `.cursor/rules/` / `.github/instructions/` / `GEMINI.md` / `.codex/codex.md` / `.windsurfrules` 로 변환). 같은 Plan → Architecture → Tasks 워크플로가, 그날 개발자가 어떤 도구를 쓰든 프로젝트의 모든 에이전트를 동일하게 지배하게 됩니다.
35
+ > **한글:** 프로젝트의 규율을 도구 독립적인 포맷으로 **단 한 번** 작성하세요. 도구별로 명령어 하나만 실행하면, CONDUCTOR 가 해당 도구에 맞는 파일을 올바른 경로·올바른 포맷으로 생성합니다 (`core/` 에 룰을 한 번 쓰면 → `.claude/` / `.cursor/rules/` / `.github/instructions/` / `GEMINI.md` / `AGENTS.md` / `.windsurfrules` 로 변환). 같은 Plan → Architecture → Tasks 워크플로가, 그날 개발자가 어떤 도구를 쓰든 프로젝트의 모든 에이전트를 동일하게 지배하게 됩니다.
36
36
 
37
37
  Write your project's discipline ONCE in a tool-agnostic format. Run a single command per tool, and CONDUCTOR generates the right files at the right paths in the right format for that specific tool.
38
38
 
@@ -51,7 +51,7 @@ target-project/
51
51
  ├── .github/instructions/ (if --target=copilot)
52
52
  ├── GEMINI.md (if --target=gemini)
53
53
  ├── AGENTS.md (if --target=codex)
54
- └── .windsurf/rules/ (if --target=windsurf)
54
+ └── .devin/rules/ (if --target=windsurf)
55
55
  ```
56
56
 
57
57
  The same Plan → Architecture → Tasks workflow now governs every agent in the project, regardless of which tool the developer happens to be using that day.
@@ -6,12 +6,12 @@ One adapter per supported tool. Each reads the tool-agnostic content under `core
6
6
 
7
7
  ```
8
8
  adapters/
9
- ├── claude/ # Claude Code (T1 — full support)
10
- ├── cursor/ # Cursor (T1 — partial; no sub-agents/hooks)
9
+ ├── claude/ # Claude Code (T1 — reference implementation, full emission)
10
+ ├── cursor/ # Cursor (T1)
11
11
  ├── copilot/ # GitHub Copilot (T2)
12
12
  ├── gemini/ # Gemini CLI (T2)
13
- ├── codex/ # OpenAI Codex (T3)
14
- └── windsurf/ # Windsurf (T3)
13
+ ├── codex/ # OpenAI Codex (T2)
14
+ └── windsurf/ # Windsurf / Devin Desktop (T3)
15
15
  ```
16
16
 
17
17
  Each adapter directory contains:
@@ -75,11 +75,11 @@ The Layer-1 universal-rules use `applies_to:` front-matter for routing hints. Ea
75
75
  | (Cursor) | `globs:\n - "**/*.ts"\n - "**/*.tsx"` |
76
76
  | (Copilot) | `applyTo: '**/*.ts,**/*.tsx'` |
77
77
  | (Gemini / Codex) | (bundled — no per-pattern routing) |
78
- | (Windsurf) | (bundled into `.windsurf/rules/`) |
78
+ | (Windsurf) | (bundled into `.devin/rules/`; legacy `.windsurf/rules/` still read) |
79
79
 
80
80
  | `core/` front-matter | Adapter behavior |
81
81
  |---|---|
82
- | `always_loaded: true` | Merge content into the always-loaded baseline file (`CLAUDE.md`, `.cursorrules`, `applyTo: '**'`, `GEMINI.md`, `.codex/codex.md`, `.windsurfrules`) |
82
+ | `always_loaded: true` | Merge content into the always-loaded baseline (`CLAUDE.md`, `.cursor/rules/*.mdc` `alwaysApply: true`, `.github/copilot-instructions.md`, `GEMINI.md`, `AGENTS.md`, `.windsurfrules`) |
83
83
  | `always_loaded: false` (or absent) | Emit as a separate rule file with appropriate per-pattern scoping |
84
84
 
85
85
  ## Adapter-specific extensions
@@ -105,8 +105,8 @@ bash adapters/<tool>/transform.sh <target> [--dry-run]
105
105
  # Or by absolute path:
106
106
  /path/to/conductor/adapters/<tool>/transform.sh /path/to/target [--dry-run]
107
107
 
108
- # (planned / roadmap not yet available):
109
- # npx omniconductor init --target=<tool> [target-dir]
108
+ # Or via the npm CLI (no clone needed):
109
+ npx omniconductor init --target=<tool> [target-dir]
110
110
  ```
111
111
 
112
112
  ## Status (P0 foundation)
@@ -19,11 +19,8 @@ bash adapters/claude/transform.sh <target> [--dry-run]
19
19
  # Or by absolute path:
20
20
  /path/to/conductor/adapters/claude/transform.sh /path/to/target [--dry-run]
21
21
 
22
- # (planned / roadmap not yet available):
23
- # npx omniconductor init --target=claude [target-dir]
24
-
25
- # Today (P0 foundation): use the v0.1 archive:
26
- /path/to/conductor/archive/v0.1/install.sh /path/to/target
22
+ # Or via the npm CLI (no clone needed):
23
+ npx omniconductor init --target=claude [target-dir]
27
24
  ```
28
25
 
29
26
  ## What gets installed
@@ -44,7 +44,7 @@ CONDUCTOR ships 10 hooks, all registered in the generated `.claude/settings.json
44
44
  | `stop-r6-review-check.sh` | `Stop` (session end) | Inject reminder to run Stage B `/code-review` slash command if a feature/fix branch has open PR + cool-down. |
45
45
  | `stop-cache-hit-baseline-check.sh` | `Stop` | Flag prompt-cache baseline regressions at session end. |
46
46
 
47
- `transform.sh` registers all 7 in `.claude/settings.json` (4 `PreToolUse` + 3 `Stop`). Users customize paths and conditions in that generated file, or override per-user in `settings.local.json` (gitignored).
47
+ `transform.sh` registers all 10 in `.claude/settings.json` (5 `PreToolUse` + 5 `Stop`). Users customize paths and conditions in that generated file, or override per-user in `settings.local.json` (gitignored).
48
48
 
49
49
  ## What Claude DOES NOT support that CONDUCTOR doesn't try to compensate for
50
50
 
@@ -0,0 +1,39 @@
1
+ {
2
+ "_comment": "Single source for enumerable adapter facts (ADR-040). CI asserts transform.sh / validator / matrix agree with this file. Update HERE first; docs follow.",
3
+ "tool": "claude",
4
+ "display_name": "Claude Code",
5
+ "tier": "T1",
6
+ "outputs": [
7
+ { "path": "CLAUDE.md", "kind": "always_loaded", "validated": false },
8
+ { "path": ".claude/rules", "kind": "rules", "validated": true },
9
+ { "path": ".claude/agents", "kind": "agents", "validated": false },
10
+ { "path": ".claude/hooks", "kind": "hooks", "validated": false },
11
+ { "path": ".claude/settings.json", "kind": "config", "validated": false },
12
+ { "path": "docs/CURRENT_WORK.md", "kind": "docs", "validated": false }
13
+ ],
14
+ "reflector_outputs": [
15
+ { "path": ".claude/commands", "note": "/reflect command (recipe-gated)" },
16
+ { "path": ".conductor/reflect", "note": "runner + brief + scheduling (recipe-gated)" }
17
+ ],
18
+ "install": { "ala_carte": "per-file" },
19
+ "legacy_paths": [],
20
+ "capabilities": {
21
+ "tool_native": {
22
+ "hooks": "yes",
23
+ "sub_agents": "yes",
24
+ "model_routing": "yes",
25
+ "commands": "yes",
26
+ "glob_scoping": "yes",
27
+ "scheduler": "local"
28
+ },
29
+ "conductor_emitted": {
30
+ "rules": "full",
31
+ "guard_hooks": "full",
32
+ "reflector_loop": "recipe",
33
+ "role_agents": "full",
34
+ "model_routing": "full"
35
+ }
36
+ },
37
+ "live_verification": { "status": "verified", "date": "2026-07-09", "cli": "2.1.205 (Claude Code)", "note": "headless probe listed 5/5 rules + read-CURRENT_WORK-first" },
38
+ "headless_cli": { "command": "claude", "invocation": "claude -p" }
39
+ }