dorfl 0.3.1 → 0.3.2

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 (66) hide show
  1. package/dist/advance-drivers.d.ts +1 -1
  2. package/dist/advance-lifecycle-template.js +6 -6
  3. package/dist/advance-lifecycle-template.js.map +1 -1
  4. package/dist/brand.d.ts +1 -1
  5. package/dist/brand.js +1 -1
  6. package/dist/cli.js +11 -11
  7. package/dist/cli.js.map +1 -1
  8. package/dist/config-override.d.ts +1 -1
  9. package/dist/do-autopick.d.ts +1 -1
  10. package/dist/do-config.d.ts.map +1 -1
  11. package/dist/do-config.js +1 -1
  12. package/dist/do-config.js.map +1 -1
  13. package/dist/env-config.d.ts +1 -1
  14. package/dist/env-config.js +1 -1
  15. package/dist/identity.d.ts +1 -1
  16. package/dist/install-ci.js +2 -2
  17. package/dist/install-ci.js.map +1 -1
  18. package/dist/intake-trigger-template.js +2 -2
  19. package/dist/lifecycle-pools.d.ts +1 -1
  20. package/dist/mirror-pool-scan.d.ts +2 -2
  21. package/dist/mirror-pool-scan.js +1 -1
  22. package/dist/mirror-pool-scan.js.map +1 -1
  23. package/dist/prd-to-spec.d.ts +5 -5
  24. package/dist/prd-to-spec.js +5 -5
  25. package/dist/prd-to-spec.js.map +1 -1
  26. package/dist/protocol/WORK-CONTRACT.md +1 -1
  27. package/dist/repo-config.d.ts +11 -11
  28. package/dist/repo-config.d.ts.map +1 -1
  29. package/dist/repo-config.js +9 -9
  30. package/dist/repo-mirror.d.ts +6 -6
  31. package/dist/repo-mirror.d.ts.map +1 -1
  32. package/dist/repo-mirror.js +6 -6
  33. package/dist/repo-mirror.js.map +1 -1
  34. package/dist/run.d.ts +1 -1
  35. package/dist/run.js +1 -1
  36. package/dist/run.js.map +1 -1
  37. package/dist/scan.d.ts +2 -2
  38. package/dist/scan.js +5 -5
  39. package/dist/scan.js.map +1 -1
  40. package/dist/skills/convert-from-prd-to-spec/SKILL.md +2 -2
  41. package/dist/skills/drive-tasks/SKILL.md +1 -1
  42. package/dist/skills/from-idea/SKILL.md +2 -2
  43. package/dist/skills/setup/SKILL.md +1 -1
  44. package/dist/skills/setup/protocol/WORK-CONTRACT.md +1 -1
  45. package/dist/verify-workflow-template.d.ts +1 -1
  46. package/dist/verify-workflow-template.js +1 -1
  47. package/package.json +1 -1
  48. package/src/advance-drivers.ts +1 -1
  49. package/src/advance-lifecycle-template.ts +6 -6
  50. package/src/brand.ts +1 -1
  51. package/src/cli.ts +11 -11
  52. package/src/config-override.ts +1 -1
  53. package/src/do-autopick.ts +1 -1
  54. package/src/do-config.ts +1 -1
  55. package/src/env-config.ts +1 -1
  56. package/src/identity.ts +1 -1
  57. package/src/install-ci.ts +2 -2
  58. package/src/intake-trigger-template.ts +2 -2
  59. package/src/lifecycle-pools.ts +1 -1
  60. package/src/mirror-pool-scan.ts +3 -3
  61. package/src/prd-to-spec.ts +8 -8
  62. package/src/repo-config.ts +11 -11
  63. package/src/repo-mirror.ts +7 -7
  64. package/src/run.ts +2 -2
  65. package/src/scan.ts +5 -5
  66. package/src/verify-workflow-template.ts +1 -1
@@ -295,9 +295,9 @@ env:
295
295
  # ── The engine GATE FAMILY, surfaced as the DORFL_* env block ─────────
296
296
  # CI is NOT a special policy surface (ADR ci-config-policy-and-gate-family §5):
297
297
  # it runs the SAME engine gates, resolved through flag > env > per-repo > global
298
- # > default. The SAME .dorfl.json the laptop uses applies here; this env
298
+ # > default. The SAME dorfl.json the laptop uses applies here; this env
299
299
  # block is the optional CI-only override. Change behaviour by editing these
300
- # values (or a GitHub repo variable / .dorfl.json key) — NOT by re-running
300
+ # values (or a GitHub repo variable / dorfl.json key) — NOT by re-running
301
301
  # install-ci (ADR §6: install-ci is one-time).
302
302
  #
303
303
  # \`intake\` itself is GATE-FREE (the explicit invocation is its own
@@ -116,7 +116,7 @@ export interface LifecyclePoolGates {
116
116
  * `LifecyclePoolGates`. Placement acknowledged above; ratified as intentional
117
117
  * so the gate colocates with its sibling create-side gates.
118
118
  * 4. **`surfaceStaging` in `REPO_ALLOWED_KEYS` is intentional** so a repo's
119
- * `.dorfl.json` can flip it via the normal resolution chain.
119
+ * `dorfl.json` can flip it via the normal resolution chain.
120
120
  */
121
121
  surfaceStaging?: boolean;
122
122
  }
@@ -47,7 +47,7 @@ import {heldTaskSlugs} from './item-lock.js';
47
47
  * over the mirror's `work/specs/ready` + `work/specs/tasked` read via the mirror-ref
48
48
  * {@link LedgerReadStrategy.resolveMirrorSpecPool}.
49
49
  *
50
- * Per-repo policy parity: a bare mirror has no checked-out `.dorfl.json`,
50
+ * Per-repo policy parity: a bare mirror has no checked-out `dorfl.json`,
51
51
  * but the COMMITTED one is reachable on `main` (the `do --remote` per-repo seam).
52
52
  * We layer it via {@link resolveRepoConfigFromMirror} so the same logical `work/`
53
53
  * state yields the SAME `autoBuild`/`autoTask` decision an in-place checkout
@@ -59,7 +59,7 @@ export interface ScanMirrorPoolOptions {
59
59
  /** The bare hub mirror directory (`<workspacesDir>/repos/<key>.git`). */
60
60
  mirrorPath: string;
61
61
  /**
62
- * The global + default config layer. The repo's COMMITTED `.dorfl.json`
62
+ * The global + default config layer. The repo's COMMITTED `dorfl.json`
63
63
  * (read from the mirror's `main`) is layered on top, so `autoBuild`/`autoTask`
64
64
  * resolve per-repo exactly as the in-place scan resolves them from the checkout.
65
65
  */
@@ -146,7 +146,7 @@ export async function scanMirrorPool(
146
146
  const read = options.read ?? ledgerRead;
147
147
  const warn = options.warn;
148
148
 
149
- // Per-repo policy parity: layer the COMMITTED `.dorfl.json` from the
149
+ // Per-repo policy parity: layer the COMMITTED `dorfl.json` from the
150
150
  // mirror's `main` (the `do --remote` per-repo seam) onto global. Never fatal —
151
151
  // a config-less repo or a read fault falls back to global + default.
152
152
  let repoConfig: Config;
@@ -41,7 +41,7 @@ import {repoConfigPath} from './repo-config.js';
41
41
  * (a) FOLDERS `work/prds/{proposed,ready,tasked,dropped}/ → work/specs/…`
42
42
  * via `git mv`; (b) FRONTMATTER/body `prd: → spec:` + inert path/token refs
43
43
  * across ALL items INCLUDING `work/tasks/done/` and `work/specs/tasked/`;
44
- * (c) CONFIG `.dorfl.json` (`prdsLandIn → specsLandIn`, keep-case);
44
+ * (c) CONFIG `dorfl.json` (`prdsLandIn → specsLandIn`, keep-case);
45
45
  * (d) LIVE GIT REFS (inert lock-refs `refs/dorfl/lock/prd-<slug>` and
46
46
  * work-branches `work/prd-<slug>` — the quiescence gate guarantees none are
47
47
  * held/in-flight, so this renames only INERT refs).
@@ -86,7 +86,7 @@ import {repoConfigPath} from './repo-config.js';
86
86
  * A single vocabulary cutover the engine enacts: the retired word `from` (all
87
87
  * three case variants) → the new word `to`. The `prd → spec` migration pins
88
88
  * {@link MIGRATION}; a future cutover supplies a different value and reuses the
89
- * same engine (user story 9). `configKeys` are the exact `.dorfl.json` keys that
89
+ * same engine (user story 9). `configKeys` are the exact `dorfl.json` keys that
90
90
  * carry the `from` word (their VALUES are preserved — only the key renames).
91
91
  */
92
92
  export interface VocabularyMigration {
@@ -653,7 +653,7 @@ export function migrateAllItemContent(
653
653
  }
654
654
 
655
655
  // ───────────────────────────────────────────────────────────────────────────
656
- // Layer 3c: the CONFIG key rewrite (.dorfl.json).
656
+ // Layer 3c: the CONFIG key rewrite (dorfl.json).
657
657
  // ───────────────────────────────────────────────────────────────────────────
658
658
 
659
659
  /** One config key the rewrite renamed (or would rename). */
@@ -663,12 +663,12 @@ export interface ConfigRewrite {
663
663
  }
664
664
 
665
665
  /**
666
- * Rewrite the retired config KEYS in `.dorfl.json` (`prdsLandIn → specsLandIn`),
666
+ * Rewrite the retired config KEYS in `dorfl.json` (`prdsLandIn → specsLandIn`),
667
667
  * preserving each key's VALUE and the file's surrounding formatting — a TEXTUAL
668
668
  * key rename on the raw JSON, NOT a parse+reserialise (which would drop unknown
669
669
  * keys / reflow the file). Only renames a key that is actually present, so it is
670
670
  * idempotent (a config already on `specsLandIn` changes nothing) and safe on a
671
- * repo with no `.dorfl.json`. Returns the keys renamed. `dryRun` reports without
671
+ * repo with no `dorfl.json`. Returns the keys renamed. `dryRun` reports without
672
672
  * writing.
673
673
  */
674
674
  export function migrateConfig(
@@ -677,7 +677,7 @@ export function migrateConfig(
677
677
  options: {dryRun?: boolean} = {},
678
678
  ): ConfigRewrite[] {
679
679
  // Resolve the repo's actual config file (prefers `dorfl.json`, falls back to
680
- // the legacy `.dorfl.json`), so the key rewrite finds it under either name.
680
+ // the legacy `dorfl.json`), so the key rewrite finds it under either name.
681
681
  const configAbs = repoConfigPath(repoPath);
682
682
  if (!existsSync(configAbs)) {
683
683
  return [];
@@ -806,7 +806,7 @@ export interface DataLeak {
806
806
  * command's OUTPUT (ADR §7e: the leak scan is exhaustive-by-construction). This
807
807
  * is the DATA analogue of the source-part `prd-to-spec-leak-scan.test.ts`
808
808
  * (which scans `src/`/`skills/`/`docs/`): here it walks the CONVERTED `work/`
809
- * tree + `.dorfl.json` + the git refs.
809
+ * tree + `dorfl.json` + the git refs.
810
810
  *
811
811
  * - **FORWARD:** fails on any surviving retired word (`prd`/`Prd`/`PRD`) in a
812
812
  * data STRUCTURE position — a frontmatter `prd:` KEY, a `work/prds/…` folder
@@ -926,7 +926,7 @@ export function scanForLeaks(
926
926
  }
927
927
  }
928
928
  // The config file (the key layer) — under either the preferred `dorfl.json`
929
- // or the legacy `.dorfl.json`.
929
+ // or the legacy `dorfl.json`.
930
930
  const configAbs = repoConfigPath(repoPath);
931
931
  if (existsSync(configAbs)) {
932
932
  scanText(
@@ -16,7 +16,7 @@ import {run} from './git.js';
16
16
  /**
17
17
  * The per-repo config layer.
18
18
  *
19
- * A repo may commit a `.dorfl.json` at its root. It travels WITH the repo
19
+ * A repo may commit a `dorfl.json` at its root. It travels WITH the repo
20
20
  * (it is committed) and overrides the global `~/.config/dorfl/config.json`
21
21
  * FOR THAT REPO ONLY — so repo-local properties (how this repo integrates, its
22
22
  * acceptance `verify` gate, which remote arbitrates its claims) are agreed by all
@@ -28,7 +28,7 @@ import {run} from './git.js';
28
28
  * global > built-in default
29
29
  *
30
30
  * The mechanism is multi-repo aware: each repo resolves against its OWN
31
- * `.dorfl.json`, so repo A can be `merge` while repo B is `propose` in the
31
+ * `dorfl.json`, so repo A can be `merge` while repo B is `propose` in the
32
32
  * SAME run (see {@link resolveRepoConfig}).
33
33
  *
34
34
  * Only keys that are genuinely repo properties are honoured in the COMMITTED
@@ -44,7 +44,7 @@ import {run} from './git.js';
44
44
  * the global file / a flag) may set ANY key, host-only included (see
45
45
  * {@link envOverrides}).
46
46
  *
47
- * A repo with no `.dorfl.json` resolves to exactly the global config —
47
+ * A repo with no `dorfl.json` resolves to exactly the global config —
48
48
  * behaviour is unchanged from before this layer existed.
49
49
  */
50
50
 
@@ -57,7 +57,7 @@ export const REPO_CONFIG_FILENAME = brand.repoConfigFilename;
57
57
 
58
58
  /**
59
59
  * Config keys that are genuinely repo properties and so are honoured in a
60
- * per-repo `.dorfl.json`. Deliberately a subset of {@link Config};
60
+ * per-repo `dorfl.json`. Deliberately a subset of {@link Config};
61
61
  * extend this list as more keys become legitimately repo-scoped.
62
62
  */
63
63
  export const REPO_ALLOWED_KEYS = [
@@ -306,7 +306,7 @@ export function repoConfigPath(repoPath: string): string {
306
306
  return resolveRepoConfigPath(repoPath);
307
307
  }
308
308
 
309
- /** The result of reading (and filtering) a repo's `.dorfl.json`. */
309
+ /** The result of reading (and filtering) a repo's `dorfl.json`. */
310
310
  export interface LoadedRepoConfig {
311
311
  /** Where we looked (whether or not the file exists). */
312
312
  path: string;
@@ -328,7 +328,7 @@ export interface LoadedRepoConfig {
328
328
  }
329
329
 
330
330
  /**
331
- * Read a repo's `.dorfl.json` and split it into the honoured subset and
331
+ * Read a repo's `dorfl.json` and split it into the honoured subset and
332
332
  * the rejected runner/host-only keys. A missing file is not an error (the repo
333
333
  * simply resolves to the global config); invalid JSON is. Unknown keys are
334
334
  * silently dropped (neither honoured nor reported as rejected). Only keys in
@@ -352,8 +352,8 @@ export function loadRepoConfig(repoPath: string): LoadedRepoConfig {
352
352
 
353
353
  /**
354
354
  * The content-based half of {@link loadRepoConfig}: parse + apply the SAME
355
- * allow/reject split to ALREADY-READ `.dorfl.json` bytes, labelling the
356
- * source as `sourceLabel` (a path, or e.g. `<arbiter>/main:.dorfl.json`)
355
+ * allow/reject split to ALREADY-READ `dorfl.json` bytes, labelling the
356
+ * source as `sourceLabel` (a path, or e.g. `<arbiter>/main:dorfl.json`)
357
357
  * in the rejected-key message. Used wherever the committed repo file is sourced
358
358
  * from somewhere OTHER than a working-tree path — notably `do --remote`, which
359
359
  * reads it from the arbiter's `main` (`git show`) since there is no checkout.
@@ -413,7 +413,7 @@ function isRejectedKey(key: string): boolean {
413
413
 
414
414
  /** Inputs to {@link resolveRepoConfig}. */
415
415
  export interface ResolveRepoConfigOptions {
416
- /** Absolute path to the repo root (where `.dorfl.json` would live). */
416
+ /** Absolute path to the repo root (where `dorfl.json` would live). */
417
417
  repoPath: string;
418
418
  /**
419
419
  * The fully-resolved GLOBAL config (already merged over built-in defaults,
@@ -491,7 +491,7 @@ export interface ResolvedRepoConfig {
491
491
  /**
492
492
  * Resolve the effective config for ONE repo by layering, per key:
493
493
  *
494
- * flag > ENV (DORFL_*) > per-repo `.dorfl.json` > global >
494
+ * flag > ENV (DORFL_*) > per-repo `dorfl.json` > global >
495
495
  * built-in default
496
496
  *
497
497
  * The `global` argument already carries the global + default layers (it is the
@@ -502,7 +502,7 @@ export interface ResolvedRepoConfig {
502
502
  * in a multi-repo run yields INDEPENDENT results — repo A can be `merge` while
503
503
  * repo B is `propose` in the same run.
504
504
  *
505
- * A repo with no `.dorfl.json` (and no env) resolves to exactly `global`
505
+ * A repo with no `dorfl.json` (and no env) resolves to exactly `global`
506
506
  * (unchanged behaviour).
507
507
  */
508
508
  export function resolveRepoConfig(
@@ -151,7 +151,7 @@ export function ensureMirror(options: EnsureMirrorOptions): EnsureMirrorResult {
151
151
  * but on REUSE refreshes via {@link fetchMirrorMain} (main-only, no-prune).
152
152
  *
153
153
  * This is the MIRROR-ENSURE for the no-checkout CONFIG READ (`do --remote`/
154
- * `do --isolated` per-repo `.dorfl.json`): `git show main:.dorfl.json`
154
+ * `do --isolated` per-repo `dorfl.json`): `git show main:dorfl.json`
155
155
  * only needs `main`, and using the pruning all-heads fetch here would let a
156
156
  * `work/<slug>` branch CHECKED OUT in some other (stale) job worktree block the
157
157
  * fetch (`git refuses to fetch into branch … checked out`), throwing the config
@@ -226,12 +226,12 @@ export function fetchMirrorMain(
226
226
  }
227
227
 
228
228
  /**
229
- * Read the target repo's COMMITTED `.dorfl.json` from the bare hub
230
- * mirror's `main` (`git show main:.dorfl.json`) — the per-repo config
229
+ * Read the target repo's COMMITTED `dorfl.json` from the bare hub
230
+ * mirror's `main` (`git show main:dorfl.json`) — the per-repo config
231
231
  * layer for the NO-CHECKOUT paths (`do --remote`). The committed file is a
232
232
  * tracked file on `<arbiter>/main`, so it is reachable from the mirror without a
233
233
  * worktree. Returns the raw file CONTENT, or `undefined` when the repo has no
234
- * `.dorfl.json` on `main` (a config-less repo — the caller then resolves to
234
+ * `dorfl.json` on `main` (a config-less repo — the caller then resolves to
235
235
  * exactly global + default, byte-identical to before this layer existed).
236
236
  *
237
237
  * This is the task's ONE genuinely-new seam: sourcing the bytes from the arbiter
@@ -248,7 +248,7 @@ export function readRepoConfigFromMirrorMain(
248
248
  mirrorDir: string,
249
249
  env?: NodeJS.ProcessEnv,
250
250
  ): string | undefined {
251
- // Prefer the plain `dorfl.json`; fall back to the legacy `.dorfl.json` when the
251
+ // Prefer the plain `dorfl.json`; fall back to the legacy `dorfl.json` when the
252
252
  // preferred name is absent on `main` (a repo that committed the dotfile before
253
253
  // dual-support). A genuine read fault on the FIRST attempt propagates; a
254
254
  // path-missing on the first falls through to the legacy attempt.
@@ -293,7 +293,7 @@ function showConfigOnMain(
293
293
 
294
294
  /**
295
295
  * Resolve a repo's effective {@link Config} for a NO-CHECKOUT path by layering its
296
- * COMMITTED `.dorfl.json` (read from the bare hub mirror's `main` via
296
+ * COMMITTED `dorfl.json` (read from the bare hub mirror's `main` via
297
297
  * {@link readRepoConfigFromMirrorMain}) into the SAME
298
298
  * `flag > env > per-repo > global > default` chain a working checkout uses
299
299
  * ({@link resolveRepoConfigFromLoaded}). This is the reusable core of `do
@@ -308,7 +308,7 @@ function showConfigOnMain(
308
308
  * global + flags itself.
309
309
  */
310
310
  export function resolveRepoConfigFromMirror(options: {
311
- /** The bare hub mirror directory whose `main:.dorfl.json` to read. */
311
+ /** The bare hub mirror directory whose `main:dorfl.json` to read. */
312
312
  mirrorPath: string;
313
313
  /** The global + default config layer (from `loadConfig`/`mergeConfig`). */
314
314
  global: Config;
package/src/run.ts CHANGED
@@ -294,7 +294,7 @@ export interface RunOnceOptions {
294
294
  /** Override agent-id generation (tests). Retained for API compat; unused for branch naming. */
295
295
  agentId?: () => string;
296
296
  /**
297
- * Sink for non-fatal warnings (e.g. a repo's `.dorfl.json` naming
297
+ * Sink for non-fatal warnings (e.g. a repo's `dorfl.json` naming
298
298
  * runner/host-only keys that were ignored). Defaults to a no-op so the core
299
299
  * stays pure; the CLI wires this to stderr.
300
300
  */
@@ -537,7 +537,7 @@ async function runOneItem(
537
537
  const {slug, repoPath} = candidate;
538
538
  const base: ItemResult = {repoPath, slug, status: 'lost-race'};
539
539
 
540
- // Resolve THIS repo's effective config against its own `.dorfl.json`
540
+ // Resolve THIS repo's effective config against its own `dorfl.json`
541
541
  // layered over the global config (flag > per-repo > global > default). Each
542
542
  // repo gets its own integration mode / arbiter, so repo A can be `merge`
543
543
  // while repo B is `propose` in one tick.
package/src/scan.ts CHANGED
@@ -384,7 +384,7 @@ export function scoreItems(
384
384
  * primitive; the per-repo `work/` read goes through the seam's mirror-ref method.
385
385
  *
386
386
  * The autonomy gate's `autoBuild` policy is resolved PER REPO. NOTE: a bare
387
- * mirror has no checked-out `.dorfl.json`, so the per-repo file cannot be
387
+ * mirror has no checked-out `dorfl.json`, so the per-repo file cannot be
388
388
  * read from it — the global/env-resolved policy applies (the per-repo override is
389
389
  * a working-checkout concern, served by {@link scanRepoPaths}).
390
390
  */
@@ -450,7 +450,7 @@ export async function scan(
450
450
  );
451
451
  // Spec pool — the TASKABLE-SPEC companion of the task pool above
452
452
  // (`ci-propose-matrix-must-enumerate-sliceable-prds-not-only-slices`). Resolve
453
- // `autoTask` PER REPO from the mirror's COMMITTED `.dorfl.json`
453
+ // `autoTask` PER REPO from the mirror's COMMITTED `dorfl.json`
454
454
  // (exactly as the mirror-side pool scan does — NOT forked); a read fault is
455
455
  // non-fatal (warn + global fall-back), since `scan` is read-only and must
456
456
  // degrade gracefully (ADR §5/§6).
@@ -476,7 +476,7 @@ export async function scan(
476
476
  const specs = scoreSpecs(mirror.path, specPool, repoAutoTask);
477
477
  // The per-repo LIFECYCLE pool (`ci-propose-matrix-enumerates-lifecycle-items`),
478
478
  // gated by this mirror's question-surfacing config (resolved from its committed
479
- // `.dorfl.json`, with the same non-fatal global fall-back as `autoTask`
479
+ // `dorfl.json`, with the same non-fatal global fall-back as `autoTask`
480
480
  // above) and computed by REUSING `gatherLifecycleMirror` → `buildLifecyclePools`
481
481
  // (NOT a forked predicate), so it AGREES with the `run` selection.
482
482
  let repoLifecycleConfig = {
@@ -536,7 +536,7 @@ export async function scan(
536
536
  * checkout IS the local state); the fetch-first contract (ADR §5/§6) applies to
537
537
  * the REGISTRY `scan` above, which refreshes each bare mirror before reading.
538
538
  * Reads each repo's `work/` via the read seam's local-tree method and honours its
539
- * per-repo `.dorfl.json` `autoBuild`. The registry `scan` above is the
539
+ * per-repo `dorfl.json` `autoBuild`. The registry `scan` above is the
540
540
  * mirror-ref counterpart; this is its working-tree sibling.
541
541
  */
542
542
  export function scanRepoPaths(
@@ -579,7 +579,7 @@ export function scanRepoPaths(
579
579
  override,
580
580
  }).config;
581
581
  // Spec pool — the TASKABLE-SPEC companion of the task pool. Resolve
582
- // `autoTask` PER REPO from the working-tree `.dorfl.json` (the same
582
+ // `autoTask` PER REPO from the working-tree `dorfl.json` (the same
583
583
  // way `autoBuild` is resolved); `taskableSpecs` (the SAME `autoslice-gate`
584
584
  // predicate the autopick paths run) decides what is taskable — no forked
585
585
  // predicate. This is what makes the propose-mode CI matrix enumerate `spec:`
@@ -13,7 +13,7 @@
13
13
  *
14
14
  * The workflow is deliberately thin: it wires the same composite setup action
15
15
  * the other capabilities use, then runs `dorfl verify` — the deterministic shell
16
- * gate the repo declares in `.dorfl.json`. No agent, no provider secrets, no
16
+ * gate the repo declares in `dorfl.json`. No agent, no provider secrets, no
17
17
  * `gh` mutation; it is read-only with respect to `work/`.
18
18
  *
19
19
  * `merge_group` is present (with no extra wiring) so a follow-on Tier-2 task