dorfl 0.3.2 → 0.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,9 +1,14 @@
1
- import { existsSync, readdirSync, readFileSync, writeFileSync, copyFileSync, mkdirSync, rmdirSync, } from 'node:fs';
2
- import { join, relative, dirname, basename } from 'node:path';
1
+ import { existsSync, readdirSync, readFileSync, writeFileSync, rmdirSync, } from 'node:fs';
2
+ import { join, basename } from 'node:path';
3
3
  import { run, git, gitMv } from './git.js';
4
- import { resolveProtocolDoc } from './prompt.js';
5
4
  import { WORK_ROOT } from './work-layout.js';
6
5
  import { repoConfigPath } from './repo-config.js';
6
+ import { resyncProtocol, PROTOCOL_DOCS, } from './resync-protocol.js';
7
+ // The protocol re-sync now lives in the shared `resync-protocol.ts` module (so
8
+ // the standalone `dorfl sync` command and this migration engine share ONE
9
+ // implementation). Re-exported here for backward compatibility with existing
10
+ // importers/tests that reach for these symbols on `prd-to-spec.js`.
11
+ export { resyncProtocol, PROTOCOL_DOCS };
7
12
  /** The `prd → spec` cutover this verb enacts (ADR §7e). */
8
13
  export const MIGRATION = {
9
14
  from: 'prd',
@@ -12,24 +17,6 @@ export const MIGRATION = {
12
17
  toFolder: 'specs',
13
18
  configKeys: [{ from: 'prdsLandIn', to: 'specsLandIn' }],
14
19
  };
15
- /**
16
- * The FULL set of protocol docs `setup` propagates into a repo's
17
- * `work/protocol/`. The re-sync copies EACH from the package's canonical source
18
- * (via {@link resolveProtocolDoc}) so the migrated repo carries the new `spec`
19
- * contract. Kept in lockstep with `skills/setup/protocol/` (the source of truth)
20
- * and the `vendor-protocol` build step (which vendors these into `dist/protocol/`
21
- * so the published CLI is self-contained).
22
- */
23
- export const PROTOCOL_DOCS = [
24
- 'WORK-CONTRACT.md',
25
- 'CLAIM-PROTOCOL.md',
26
- 'REVIEW-PROTOCOL.md',
27
- 'SURFACE-PROTOCOL.md',
28
- 'TASKING-PROTOCOL.md',
29
- 'ADR-FORMAT.md',
30
- 'task-template.md',
31
- 'spec-template.md',
32
- ];
33
20
  // ───────────────────────────────────────────────────────────────────────────
34
21
  // Layer: keep-case replace (the bespoke sweep — see the tooling JSDoc above).
35
22
  // ───────────────────────────────────────────────────────────────────────────
@@ -124,78 +111,6 @@ export function checkQuiescence(repoPath, migration = MIGRATION, env = undefined
124
111
  }
125
112
  return undefined;
126
113
  }
127
- /**
128
- * Re-sync the target repo's `work/protocol/*` from the package's canonical
129
- * source (the deterministic part of the `setup` skill — copy the docs verbatim +
130
- * bump `VERSION`). Resolves each doc's SOURCE via {@link resolveProtocolDoc} with
131
- * NO `cwd`, so it reads the package-vendored (`dist/protocol/`) or dev-source
132
- * (`skills/setup/protocol/`) copy — NEVER the target repo's own (old) copy. This
133
- * is how the migrated repo picks up the new `spec` contract before its data is
134
- * converted. Idempotent: a doc already byte-identical is reported `unchanged`.
135
- * A doc whose SOURCE cannot be resolved is reported `skipped` (NOT copied, NEVER
136
- * a VERSION-bump) rather than silently bumping VERSION with nothing copied.
137
- *
138
- * `dryRun` reports what WOULD be copied without writing. `resolveDoc` overrides
139
- * how a doc's source path is resolved (defaults to {@link resolveProtocolDoc});
140
- * it exists so a test can force a non-resolvable source (a path that does not
141
- * exist) to exercise the skip path.
142
- */
143
- export function resyncProtocol(repoPath, options = {}) {
144
- const protocolDir = join(repoPath, WORK_ROOT, 'protocol');
145
- const resolveDoc = options.resolveDoc ?? ((name) => resolveProtocolDoc(name));
146
- const docs = [];
147
- for (const name of PROTOCOL_DOCS) {
148
- // Resolve the SOURCE (package/dev), never the target's adopted copy.
149
- const source = resolveDoc(name);
150
- const destAbs = join(protocolDir, name);
151
- const destRel = relative(repoPath, destAbs);
152
- const sourceExists = existsSync(source);
153
- if (!sourceExists) {
154
- // The source doc could not be resolved: copy NOTHING and record the doc as
155
- // SKIPPED (never a change). This is the latent-bug fix: a non-resolvable
156
- // source must not count as `changed` and bump `VERSION` while copying no
157
- // file. `unchanged: false` here is honest (the dest was not made to match a
158
- // source), but `skipped: true` keeps it OUT of the VERSION-bump tally.
159
- docs.push({ name, dest: destRel, unchanged: false, skipped: true });
160
- continue;
161
- }
162
- // Source resolved: a doc is CHANGED (VERSION-bump-worthy) only when the dest
163
- // is absent OR its content differs from the source. An identical dest is a
164
- // no-op copy (`unchanged`), so an already-synced re-run stays a true no-op.
165
- const unchanged = existsSync(destAbs) &&
166
- readFileSync(source, 'utf8') === readFileSync(destAbs, 'utf8');
167
- if (!options.dryRun) {
168
- mkdirSync(dirname(destAbs), { recursive: true });
169
- copyFileSync(source, destAbs);
170
- }
171
- docs.push({ name, dest: destRel, unchanged, skipped: false });
172
- }
173
- const versionAbs = join(protocolDir, 'VERSION');
174
- const versionRel = relative(repoPath, versionAbs);
175
- // Bump VERSION only when a doc was ACTUALLY COPIED with new content, or when
176
- // VERSION is absent AND at least one doc was genuinely synced (copied). A
177
- // SKIPPED doc (unresolvable source, nothing copied) is NEVER a change —
178
- // counting it would bump VERSION without copying a single doc (the latent bug),
179
- // and the write-when-absent fallback must ALSO require a real copy so an
180
- // all-skipped resync leaves no VERSION behind. A re-run on an already-synced
181
- // repo must stay a true no-op — otherwise the (always-fresh) `synced-at`
182
- // timestamp would dirty the tree on every idempotent re-run.
183
- const anyDocChanged = docs.some((d) => !d.unchanged && !d.skipped);
184
- const anyDocSynced = docs.some((d) => !d.skipped);
185
- if (!options.dryRun &&
186
- (anyDocChanged || (anyDocSynced && !existsSync(versionAbs)))) {
187
- mkdirSync(dirname(versionAbs), { recursive: true });
188
- const today = new Date().toISOString().slice(0, 10);
189
- writeFileSync(versionAbs, [
190
- `protocol-version: ${today}`,
191
- 'synced-from: skills/setup/protocol/',
192
- `synced-at: ${new Date().toISOString()}`,
193
- 'source-commit: dorfl prd-to-spec',
194
- '',
195
- ].join('\n'));
196
- }
197
- return { docs, versionPath: versionRel };
198
- }
199
114
  // ───────────────────────────────────────────────────────────────────────────
200
115
  // Layer 3a: the FOLDER move (in lockstep with work-layout.ts).
201
116
  // ───────────────────────────────────────────────────────────────────────────
@@ -684,7 +599,10 @@ export function runPrdToSpec(options) {
684
599
  };
685
600
  }
686
601
  // 2. Setup contract re-sync FIRST (decision B).
687
- const resync = resyncProtocol(repoPath, { dryRun });
602
+ const resync = resyncProtocol(repoPath, {
603
+ dryRun,
604
+ sourceCommit: 'dorfl prd-to-spec',
605
+ });
688
606
  // 3a. Folders (git mv) — before content, so the content sweep also fixes the
689
607
  // moved items' own `work/prds/…` body refs in their NEW location.
690
608
  const folderMoves = migrateFolders(repoPath, migration, { dryRun });
@@ -1 +1 @@
1
- {"version":3,"file":"prd-to-spec.js","sourceRoot":"","sources":["../src/prd-to-spec.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"prd-to-spec.js","sourceRoot":"","sources":["../src/prd-to-spec.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,73 @@
1
+ /**
2
+ * The **protocol re-sync** primitive: copy the package's canonical
3
+ * `work/protocol/*` docs into a target repo's `work/protocol/` and bump
4
+ * `work/protocol/VERSION`. This is the deterministic slice of what the `setup`
5
+ * skill does — the SINGLE source of truth for "make this repo carry the current
6
+ * protocol contract".
7
+ *
8
+ * Two verbs drive it:
9
+ * - `dorfl sync` — the standalone "get the latest protocol" command (a repo
10
+ * that adopted an OLD protocol picks up the new docs in one command);
11
+ * - `dorfl prd-to-spec` — the vocabulary-migration engine, which re-syncs the
12
+ * contract FIRST (before converting the repo's data) so the migrated repo
13
+ * lands on the new `spec` contract.
14
+ *
15
+ * It was lifted out of `prd-to-spec.ts` (where it began life) into this shared
16
+ * module so both verbs import ONE implementation; `prd-to-spec.ts` re-exports
17
+ * the symbols for backward compatibility.
18
+ */
19
+ /**
20
+ * The FULL set of protocol docs `setup` propagates into a repo's
21
+ * `work/protocol/`. The re-sync copies EACH from the package's canonical source
22
+ * (via {@link resolveProtocolDoc}) so a set-up repo carries the current
23
+ * contract. Kept in lockstep with `skills/setup/protocol/` (the source of truth)
24
+ * and the `vendor-protocol` build step (which vendors these into `dist/protocol/`
25
+ * so the published CLI is self-contained).
26
+ */
27
+ export declare const PROTOCOL_DOCS: readonly string[];
28
+ /** One protocol doc the re-sync copied (or WOULD copy under `--dry-run`). */
29
+ export interface ResyncedDoc {
30
+ /** The doc basename (e.g. `'WORK-CONTRACT.md'`). */
31
+ name: string;
32
+ /** Repo-relative destination (`work/protocol/<name>`). */
33
+ dest: string;
34
+ /** True when the target already had byte-identical content (a no-op copy). */
35
+ unchanged: boolean;
36
+ /**
37
+ * True when the doc's SOURCE could not be resolved (the package/dev copy is
38
+ * missing), so NOTHING was copied to `dest`. A skipped doc is NEVER counted as
39
+ * a change (it must not bump `VERSION` — the latent bug this field guards) and
40
+ * is surfaced LOUDLY by the caller. Distinct from `unchanged` (which means the
41
+ * source WAS resolved and matched the dest byte-for-byte).
42
+ */
43
+ skipped: boolean;
44
+ }
45
+ /** What the protocol re-sync did (or would do). */
46
+ export interface ResyncResult {
47
+ docs: ResyncedDoc[];
48
+ /** Repo-relative `work/protocol/VERSION` path (written unless dry-run). */
49
+ versionPath: string;
50
+ }
51
+ /**
52
+ * Re-sync the target repo's `work/protocol/*` from the package's canonical
53
+ * source (the deterministic part of the `setup` skill — copy the docs verbatim +
54
+ * bump `VERSION`). Resolves each doc's SOURCE via {@link resolveProtocolDoc} with
55
+ * NO `cwd`, so it reads the package-vendored (`dist/protocol/`) or dev-source
56
+ * (`skills/setup/protocol/`) copy — NEVER the target repo's own (old) copy. This
57
+ * is how a repo picks up the current contract. Idempotent: a doc already
58
+ * byte-identical is reported `unchanged`. A doc whose SOURCE cannot be resolved
59
+ * is reported `skipped` (NOT copied, NEVER a VERSION-bump) rather than silently
60
+ * bumping VERSION with nothing copied.
61
+ *
62
+ * `dryRun` reports what WOULD be copied without writing. `resolveDoc` overrides
63
+ * how a doc's source path is resolved (defaults to {@link resolveProtocolDoc});
64
+ * it exists so a test can force a non-resolvable source (a path that does not
65
+ * exist) to exercise the skip path. `sourceCommit` is stamped into the written
66
+ * `VERSION` provenance line so a reader can tell which verb wrote it.
67
+ */
68
+ export declare function resyncProtocol(repoPath: string, options?: {
69
+ dryRun?: boolean;
70
+ resolveDoc?: (name: string) => string;
71
+ sourceCommit?: string;
72
+ }): ResyncResult;
73
+ //# sourceMappingURL=resync-protocol.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resync-protocol.d.ts","sourceRoot":"","sources":["../src/resync-protocol.ts"],"names":[],"mappings":"AAWA;;;;;;;;;;;;;;;;;GAiBG;AAEH;;;;;;;GAOG;AACH,eAAO,MAAM,aAAa,EAAE,SAAS,MAAM,EAS1C,CAAC;AAEF,6EAA6E;AAC7E,MAAM,WAAW,WAAW;IAC3B,oDAAoD;IACpD,IAAI,EAAE,MAAM,CAAC;IACb,0DAA0D;IAC1D,IAAI,EAAE,MAAM,CAAC;IACb,8EAA8E;IAC9E,SAAS,EAAE,OAAO,CAAC;IACnB;;;;;;OAMG;IACH,OAAO,EAAE,OAAO,CAAC;CACjB;AAED,mDAAmD;AACnD,MAAM,WAAW,YAAY;IAC5B,IAAI,EAAE,WAAW,EAAE,CAAC;IACpB,2EAA2E;IAC3E,WAAW,EAAE,MAAM,CAAC;CACpB;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,cAAc,CAC7B,QAAQ,EAAE,MAAM,EAChB,OAAO,GAAE;IACR,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,CAAC;IACtC,YAAY,CAAC,EAAE,MAAM,CAAC;CACjB,GACJ,YAAY,CA+Dd"}
@@ -0,0 +1,114 @@
1
+ import { existsSync, readFileSync, writeFileSync, copyFileSync, mkdirSync, } from 'node:fs';
2
+ import { join, relative, dirname } from 'node:path';
3
+ import { resolveProtocolDoc } from './prompt.js';
4
+ import { WORK_ROOT } from './work-layout.js';
5
+ /**
6
+ * The **protocol re-sync** primitive: copy the package's canonical
7
+ * `work/protocol/*` docs into a target repo's `work/protocol/` and bump
8
+ * `work/protocol/VERSION`. This is the deterministic slice of what the `setup`
9
+ * skill does — the SINGLE source of truth for "make this repo carry the current
10
+ * protocol contract".
11
+ *
12
+ * Two verbs drive it:
13
+ * - `dorfl sync` — the standalone "get the latest protocol" command (a repo
14
+ * that adopted an OLD protocol picks up the new docs in one command);
15
+ * - `dorfl prd-to-spec` — the vocabulary-migration engine, which re-syncs the
16
+ * contract FIRST (before converting the repo's data) so the migrated repo
17
+ * lands on the new `spec` contract.
18
+ *
19
+ * It was lifted out of `prd-to-spec.ts` (where it began life) into this shared
20
+ * module so both verbs import ONE implementation; `prd-to-spec.ts` re-exports
21
+ * the symbols for backward compatibility.
22
+ */
23
+ /**
24
+ * The FULL set of protocol docs `setup` propagates into a repo's
25
+ * `work/protocol/`. The re-sync copies EACH from the package's canonical source
26
+ * (via {@link resolveProtocolDoc}) so a set-up repo carries the current
27
+ * contract. Kept in lockstep with `skills/setup/protocol/` (the source of truth)
28
+ * and the `vendor-protocol` build step (which vendors these into `dist/protocol/`
29
+ * so the published CLI is self-contained).
30
+ */
31
+ export const PROTOCOL_DOCS = [
32
+ 'WORK-CONTRACT.md',
33
+ 'CLAIM-PROTOCOL.md',
34
+ 'REVIEW-PROTOCOL.md',
35
+ 'SURFACE-PROTOCOL.md',
36
+ 'TASKING-PROTOCOL.md',
37
+ 'ADR-FORMAT.md',
38
+ 'task-template.md',
39
+ 'spec-template.md',
40
+ ];
41
+ /**
42
+ * Re-sync the target repo's `work/protocol/*` from the package's canonical
43
+ * source (the deterministic part of the `setup` skill — copy the docs verbatim +
44
+ * bump `VERSION`). Resolves each doc's SOURCE via {@link resolveProtocolDoc} with
45
+ * NO `cwd`, so it reads the package-vendored (`dist/protocol/`) or dev-source
46
+ * (`skills/setup/protocol/`) copy — NEVER the target repo's own (old) copy. This
47
+ * is how a repo picks up the current contract. Idempotent: a doc already
48
+ * byte-identical is reported `unchanged`. A doc whose SOURCE cannot be resolved
49
+ * is reported `skipped` (NOT copied, NEVER a VERSION-bump) rather than silently
50
+ * bumping VERSION with nothing copied.
51
+ *
52
+ * `dryRun` reports what WOULD be copied without writing. `resolveDoc` overrides
53
+ * how a doc's source path is resolved (defaults to {@link resolveProtocolDoc});
54
+ * it exists so a test can force a non-resolvable source (a path that does not
55
+ * exist) to exercise the skip path. `sourceCommit` is stamped into the written
56
+ * `VERSION` provenance line so a reader can tell which verb wrote it.
57
+ */
58
+ export function resyncProtocol(repoPath, options = {}) {
59
+ const protocolDir = join(repoPath, WORK_ROOT, 'protocol');
60
+ const resolveDoc = options.resolveDoc ?? ((name) => resolveProtocolDoc(name));
61
+ const docs = [];
62
+ for (const name of PROTOCOL_DOCS) {
63
+ // Resolve the SOURCE (package/dev), never the target's adopted copy.
64
+ const source = resolveDoc(name);
65
+ const destAbs = join(protocolDir, name);
66
+ const destRel = relative(repoPath, destAbs);
67
+ const sourceExists = existsSync(source);
68
+ if (!sourceExists) {
69
+ // The source doc could not be resolved: copy NOTHING and record the doc as
70
+ // SKIPPED (never a change). This is the latent-bug fix: a non-resolvable
71
+ // source must not count as `changed` and bump `VERSION` while copying no
72
+ // file. `unchanged: false` here is honest (the dest was not made to match a
73
+ // source), but `skipped: true` keeps it OUT of the VERSION-bump tally.
74
+ docs.push({ name, dest: destRel, unchanged: false, skipped: true });
75
+ continue;
76
+ }
77
+ // Source resolved: a doc is CHANGED (VERSION-bump-worthy) only when the dest
78
+ // is absent OR its content differs from the source. An identical dest is a
79
+ // no-op copy (`unchanged`), so an already-synced re-run stays a true no-op.
80
+ const unchanged = existsSync(destAbs) &&
81
+ readFileSync(source, 'utf8') === readFileSync(destAbs, 'utf8');
82
+ if (!options.dryRun) {
83
+ mkdirSync(dirname(destAbs), { recursive: true });
84
+ copyFileSync(source, destAbs);
85
+ }
86
+ docs.push({ name, dest: destRel, unchanged, skipped: false });
87
+ }
88
+ const versionAbs = join(protocolDir, 'VERSION');
89
+ const versionRel = relative(repoPath, versionAbs);
90
+ // Bump VERSION only when a doc was ACTUALLY COPIED with new content, or when
91
+ // VERSION is absent AND at least one doc was genuinely synced (copied). A
92
+ // SKIPPED doc (unresolvable source, nothing copied) is NEVER a change —
93
+ // counting it would bump VERSION without copying a single doc (the latent bug),
94
+ // and the write-when-absent fallback must ALSO require a real copy so an
95
+ // all-skipped resync leaves no VERSION behind. A re-run on an already-synced
96
+ // repo must stay a true no-op — otherwise the (always-fresh) `synced-at`
97
+ // timestamp would dirty the tree on every idempotent re-run.
98
+ const anyDocChanged = docs.some((d) => !d.unchanged && !d.skipped);
99
+ const anyDocSynced = docs.some((d) => !d.skipped);
100
+ if (!options.dryRun &&
101
+ (anyDocChanged || (anyDocSynced && !existsSync(versionAbs)))) {
102
+ mkdirSync(dirname(versionAbs), { recursive: true });
103
+ const today = new Date().toISOString().slice(0, 10);
104
+ writeFileSync(versionAbs, [
105
+ `protocol-version: ${today}`,
106
+ 'synced-from: skills/setup/protocol/',
107
+ `synced-at: ${new Date().toISOString()}`,
108
+ `source-commit: ${options.sourceCommit ?? 'dorfl sync'}`,
109
+ '',
110
+ ].join('\n'));
111
+ }
112
+ return { docs, versionPath: versionRel };
113
+ }
114
+ //# sourceMappingURL=resync-protocol.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resync-protocol.js","sourceRoot":"","sources":["../src/resync-protocol.ts"],"names":[],"mappings":"AAAA,OAAO,EACN,UAAU,EACV,YAAY,EACZ,aAAa,EACb,YAAY,EACZ,SAAS,GACT,MAAM,SAAS,CAAC;AACjB,OAAO,EAAC,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAC,MAAM,WAAW,CAAC;AAClD,OAAO,EAAC,kBAAkB,EAAC,MAAM,aAAa,CAAC;AAC/C,OAAO,EAAC,SAAS,EAAC,MAAM,kBAAkB,CAAC;AAE3C;;;;;;;;;;;;;;;;;GAiBG;AAEH;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,aAAa,GAAsB;IAC/C,kBAAkB;IAClB,mBAAmB;IACnB,oBAAoB;IACpB,qBAAqB;IACrB,qBAAqB;IACrB,eAAe;IACf,kBAAkB;IAClB,kBAAkB;CAClB,CAAC;AA2BF;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,UAAU,cAAc,CAC7B,QAAgB,EAChB,UAII,EAAE;IAEN,MAAM,WAAW,GAAG,IAAI,CAAC,QAAQ,EAAE,SAAS,EAAE,UAAU,CAAC,CAAC;IAC1D,MAAM,UAAU,GAAG,OAAO,CAAC,UAAU,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC,CAAC;IAC9E,MAAM,IAAI,GAAkB,EAAE,CAAC;IAC/B,KAAK,MAAM,IAAI,IAAI,aAAa,EAAE,CAAC;QAClC,qEAAqE;QACrE,MAAM,MAAM,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC;QAChC,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;QACxC,MAAM,OAAO,GAAG,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QAC5C,MAAM,YAAY,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC;QACxC,IAAI,CAAC,YAAY,EAAE,CAAC;YACnB,2EAA2E;YAC3E,yEAAyE;YACzE,yEAAyE;YACzE,4EAA4E;YAC5E,uEAAuE;YACvE,IAAI,CAAC,IAAI,CAAC,EAAC,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAC,CAAC,CAAC;YAClE,SAAS;QACV,CAAC;QACD,6EAA6E;QAC7E,2EAA2E;QAC3E,4EAA4E;QAC5E,MAAM,SAAS,GACd,UAAU,CAAC,OAAO,CAAC;YACnB,YAAY,CAAC,MAAM,EAAE,MAAM,CAAC,KAAK,YAAY,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QAChE,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;YACrB,SAAS,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,EAAC,SAAS,EAAE,IAAI,EAAC,CAAC,CAAC;YAC/C,YAAY,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAC/B,CAAC;QACD,IAAI,CAAC,IAAI,CAAC,EAAC,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,KAAK,EAAC,CAAC,CAAC;IAC7D,CAAC;IAED,MAAM,UAAU,GAAG,IAAI,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC;IAChD,MAAM,UAAU,GAAG,QAAQ,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;IAClD,6EAA6E;IAC7E,0EAA0E;IAC1E,wEAAwE;IACxE,gFAAgF;IAChF,yEAAyE;IACzE,6EAA6E;IAC7E,yEAAyE;IACzE,6DAA6D;IAC7D,MAAM,aAAa,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;IACnE,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;IAClD,IACC,CAAC,OAAO,CAAC,MAAM;QACf,CAAC,aAAa,IAAI,CAAC,YAAY,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC,CAAC,EAC3D,CAAC;QACF,SAAS,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,EAAC,SAAS,EAAE,IAAI,EAAC,CAAC,CAAC;QAClD,MAAM,KAAK,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QACpD,aAAa,CACZ,UAAU,EACV;YACC,qBAAqB,KAAK,EAAE;YAC5B,qCAAqC;YACrC,cAAc,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,EAAE;YACxC,kBAAkB,OAAO,CAAC,YAAY,IAAI,YAAY,EAAE;YACxD,EAAE;SACF,CAAC,IAAI,CAAC,IAAI,CAAC,CACZ,CAAC;IACH,CAAC;IAED,OAAO,EAAC,IAAI,EAAE,WAAW,EAAE,UAAU,EAAC,CAAC;AACxC,CAAC"}
@@ -37,7 +37,7 @@ An **ADR** (`docs/adr/`) records a **DECISION + its why** — the rejected optio
37
37
  `ls`/glob the repo first. For EACH artifact setup would write, if it ALREADY exists, do NOT overwrite — report it and leave it (or, for `dorfl.json` / `CONTEXT.md`, offer to MERGE-in only the missing keys/sections). Only CREATE what is missing. This is what makes setup safe to run on a populated repo and idempotent to re-run.
38
38
 
39
39
  - If `work/` already has the folders → skip them. **If `work/` is on the LEGACY FLAT layout** (top-level `backlog/` / `prd/` / `observations/` / … instead of the `notes/` / `tasks/` / `specs/` umbrellas) → do NOT silently scaffold a second, parallel tree beside it; surface it and offer the documented migration mapping (see A5b).
40
- - **`work/protocol/` is the ONE exception to never-clobber — it is protocol-owned, not repo-owned.** The repo's `work/` _items_ (tasks/specs/notes) are sacred and never touched; but the `work/protocol/` reference docs are verbatim copies setup owns, so re-running setup **re-syncs** them (overwrite with the current canonical copies + bump `work/protocol/VERSION`). This is how a repo picks up protocol updates. Never hand-edit `work/protocol/<doc>` in a target repo — edits belong in setup's canonical `protocol/` source and propagate via re-sync.
40
+ - **`work/protocol/` is the ONE exception to never-clobber — it is protocol-owned, not repo-owned.** The repo's `work/` _items_ (tasks/specs/notes) are sacred and never touched; but the `work/protocol/` reference docs are verbatim copies setup owns, so re-running setup **re-syncs** them (overwrite with the current canonical copies + bump `work/protocol/VERSION`). This is how a repo picks up protocol updates. (If `dorfl` is installed, `dorfl sync` is the focused, non-interactive way to do JUST this re-sync — no re-scan/conversation — and can additionally `--add-skills` to refresh the operator's packaged skills.) Never hand-edit `work/protocol/<doc>` in a target repo — edits belong in setup's canonical `protocol/` source and propagate via re-sync.
41
41
  - If `CONTEXT.md` exists → do not overwrite; offer to APPEND a "domain terms" section if absent, else leave it.
42
42
  - If `dorfl.json` exists → do not overwrite; report its `verify`/`harness` and offer to fill only ABSENT keys.
43
43
  - **Detect Phase B material — do NOT skip dotfolders that might hold meaningful content.** While inventorying, note any **convertible material**: a `tasks/` folder, a `TODO.md`, an issue-tracker export, `docs/` design notes / RFCs, plan files, and **substantial source code** (code that embodies decisions). A plain `ls` of the visible top level is NOT enough: a hidden (dot-prefixed) folder can hold real sources (design docs, plans, tasks, notes), and a missed source is silently under-routed (a rich design doc that should be a spec never gets seen). So look inside dotfolders too, and judge each by whether it _could plausibly contain documents/plans/notes_ worth converting. **Skip only the noise** — `.git/`, `node_modules/` and other dependency dirs, build output, and anything `.gitignore`d are never sources. This detection decides whether Phase B runs (see A4 / Phase B). A repo with only a README that says "clean slate" (or nothing) → Phase B is empty; finish after Phase A.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "dorfl",
3
- "version": "0.3.2",
3
+ "version": "0.4.0",
4
4
  "repository": {
5
5
  "type": "git",
6
6
  "url": "git+https://github.com/wighawag/dorfl.git",
package/src/cli.ts CHANGED
@@ -114,6 +114,7 @@ import {
114
114
  type PrdToSpecResult,
115
115
  type DataLeak,
116
116
  } from './prd-to-spec.js';
117
+ import {resyncProtocol, type ResyncResult} from './resync-protocol.js';
117
118
  import {sweepRemoteMergedBranches} from './reap-branches.js';
118
119
  import {sweepOrphanSidecars} from './orphan-sidecar.js';
119
120
  import {sweepLedgerDuplicates, formatLedgerSweep} from './ledger-lint.js';
@@ -910,6 +911,91 @@ function printLeak(leak: DataLeak): void {
910
911
  );
911
912
  }
912
913
 
914
+ /**
915
+ * A minimal interactive yes/no confirmation (default NO). Prompts on stderr
916
+ * (stdout stays reserved for machine/report output) and reads one line from
917
+ * stdin. Callers only reach this on an interactive (TTY) session — a non-TTY
918
+ * path decides WITHOUT prompting (so a scripted run never hangs). Returns true
919
+ * only for an explicit `y`/`yes`.
920
+ */
921
+ function confirmYesNo(message: string): Promise<boolean> {
922
+ return new Promise((resolvePrompt) => {
923
+ const rl = createInterface({input: process.stdin, output: process.stderr});
924
+ rl.question(`${message} [y/N] `, (answer) => {
925
+ rl.close();
926
+ const a = answer.trim().toLowerCase();
927
+ resolvePrompt(a === 'y' || a === 'yes');
928
+ });
929
+ });
930
+ }
931
+
932
+ interface SyncFlags {
933
+ /** The repo working-tree root to sync (default: cwd). */
934
+ repo?: string;
935
+ /** Report what WOULD change, touching nothing. */
936
+ dryRun?: boolean;
937
+ /**
938
+ * ALSO (re-)install the packaged dorfl skills into the operator's own harness
939
+ * dir(s), NON-INTERACTIVELY. This flag IS the confirmation: it BYPASSES the
940
+ * interactive ask. Without it, an interactive (TTY) session PROMPTS once
941
+ * before installing, and a non-TTY session skips the skills step entirely
942
+ * (so a scripted `sync` never hangs). Either way, the protocol re-sync half
943
+ * always runs.
944
+ */
945
+ addSkills?: boolean;
946
+ /** With `--add-skills` (or a confirmed prompt): scope the skills install to <cwd>/.agents/skills/ instead of the global default. */
947
+ local?: boolean;
948
+ json?: boolean;
949
+ }
950
+
951
+ /**
952
+ * Human-readable report for the deterministic protocol re-sync half of
953
+ * `dorfl sync`. Groups the docs into changed / unchanged / skipped and names the
954
+ * VERSION file. `dryRun` reframes it as "WOULD" so a preview reads honestly.
955
+ * A SKIPPED doc (unresolvable source) is surfaced LOUDLY — the contract in the
956
+ * target repo is incomplete for that doc.
957
+ */
958
+ export function formatSyncReport(
959
+ result: ResyncResult,
960
+ dryRun: boolean,
961
+ ): string {
962
+ const lines: string[] = [];
963
+ const changed = result.docs.filter((d) => !d.unchanged && !d.skipped);
964
+ const unchanged = result.docs.filter((d) => d.unchanged);
965
+ const skipped = result.docs.filter((d) => d.skipped);
966
+ const verb = dryRun ? 'WOULD sync' : 'Synced';
967
+ lines.push(
968
+ dryRun
969
+ ? '=== dorfl sync (DRY RUN — nothing written) ==='
970
+ : '=== dorfl sync ===',
971
+ );
972
+ lines.push(
973
+ `Protocol: ${verb} ${result.docs.length} doc(s) — ` +
974
+ `${changed.length} changed, ${unchanged.length} unchanged, ` +
975
+ `${skipped.length} skipped.`,
976
+ );
977
+ for (const d of changed) {
978
+ lines.push(` ~ ${d.dest}`);
979
+ }
980
+ for (const d of skipped) {
981
+ lines.push(
982
+ ` !! ${d.name}: SOURCE could not be resolved — NOT copied ` +
983
+ '(the contract doc is missing in the package).',
984
+ );
985
+ }
986
+ if (changed.length > 0 || skipped.length === result.docs.length) {
987
+ lines.push(
988
+ `VERSION: ${dryRun ? 'WOULD bump' : 'bumped'} ${result.versionPath}` +
989
+ (skipped.length === result.docs.length
990
+ ? ' (no doc synced — no bump)'
991
+ : '.'),
992
+ );
993
+ } else {
994
+ lines.push(`VERSION: unchanged (${result.versionPath} — already current).`);
995
+ }
996
+ return lines.join('\n');
997
+ }
998
+
913
999
  interface StatusFlags {
914
1000
  config?: string;
915
1001
  workspace?: string;
@@ -3541,6 +3627,77 @@ export function buildProgram(): Command {
3541
3627
  );
3542
3628
  });
3543
3629
 
3630
+ // `dorfl sync`: bring an already-onboarded repo up to the CURRENT protocol.
3631
+ // Always re-syncs `work/protocol/*` + bumps VERSION (the deterministic slice of
3632
+ // `setup`, shared with `prd-to-spec` via `resync-protocol.ts`). `--add-skills`
3633
+ // ADDITIONALLY (re-)installs the packaged skills into the operator's harness
3634
+ // dir(s), NON-INTERACTIVELY (the flag IS the confirmation); without it an
3635
+ // interactive session PROMPTS once and a non-TTY session skips skills.
3636
+ program
3637
+ .command('sync')
3638
+ .helpGroup(HEADLINE_GROUP)
3639
+ .description(
3640
+ "Bring THIS repo up to the current dorfl protocol: re-sync work/protocol/* from the package's canonical contract docs and bump work/protocol/VERSION (idempotent — a no-op when already current). This is how a repo that adopted an older protocol picks up the latest. Optionally ALSO (re-)installs the packaged dorfl skills into your own harness: pass --add-skills to do it non-interactively (the flag bypasses the ask), otherwise an interactive run prompts once (a non-TTY run skips skills). Runs IN-PLACE (no git commit/push — the human commits the result).",
3641
+ )
3642
+ .option('--repo <dir>', 'the repo working-tree root to sync (default: cwd)')
3643
+ .option(
3644
+ '--dry-run',
3645
+ 'REPORT what the protocol re-sync WOULD change, touching nothing (no writes; skills are never installed under --dry-run)',
3646
+ )
3647
+ .option(
3648
+ '--add-skills',
3649
+ 'ALSO (re-)install the packaged dorfl skills into your own harness dir(s), non-interactively. This flag IS the confirmation — it bypasses the interactive ask.',
3650
+ )
3651
+ .option(
3652
+ '--local',
3653
+ 'with skills install: scope to <cwd>/.agents/skills/ instead of the global ~/.agents/skills/ default',
3654
+ )
3655
+ .option('--json', 'output the raw protocol re-sync result as JSON')
3656
+ .action(async (flags: SyncFlags) => {
3657
+ const repoPath = flags.repo ?? process.cwd();
3658
+ const dryRun = flags.dryRun === true;
3659
+
3660
+ // 1. The deterministic protocol re-sync (always runs).
3661
+ const resync = resyncProtocol(repoPath, {
3662
+ dryRun,
3663
+ sourceCommit: 'dorfl sync',
3664
+ });
3665
+ if (flags.json) {
3666
+ console.log(JSON.stringify(resync, null, 2));
3667
+ } else {
3668
+ console.log(formatSyncReport(resync, dryRun));
3669
+ }
3670
+
3671
+ // A doc whose source could not be resolved is a broken package — exit
3672
+ // non-zero so a scripted `sync` notices the incomplete contract.
3673
+ const anySkipped = resync.docs.some((d) => d.skipped);
3674
+
3675
+ // 2. The OPTIONAL skills install. Never under --dry-run (a preview writes
3676
+ // nothing). `--add-skills` authorises it directly (bypasses the ask);
3677
+ // otherwise an interactive TTY prompts once, and a non-TTY skips.
3678
+ if (!dryRun) {
3679
+ let doSkills = flags.addSkills === true;
3680
+ if (!doSkills && process.stdin.isTTY) {
3681
+ const scope = flags.local === true ? 'project-local' : 'global';
3682
+ doSkills = await confirmYesNo(
3683
+ `Also (re-)install the packaged dorfl skills into your ${scope} harness dir(s)?`,
3684
+ );
3685
+ }
3686
+ if (doSkills) {
3687
+ const result = installSkills({global: flags.local !== true});
3688
+ console.log(formatSkillsAddReport(result, flags.local === true));
3689
+ } else if (flags.addSkills !== true && !process.stdin.isTTY) {
3690
+ console.error(
3691
+ '>> Skills not installed (non-interactive run; pass --add-skills to install them).',
3692
+ );
3693
+ }
3694
+ }
3695
+
3696
+ if (anySkipped) {
3697
+ process.exit(1);
3698
+ }
3699
+ });
3700
+
3544
3701
  program
3545
3702
  .command('prd-to-spec')
3546
3703
  .helpGroup(ADVANCED_GROUP)