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.
- package/dist/advance-drivers.d.ts +1 -1
- package/dist/advance-lifecycle-template.js +6 -6
- package/dist/advance-lifecycle-template.js.map +1 -1
- package/dist/brand.d.ts +1 -1
- package/dist/brand.js +1 -1
- package/dist/cli.js +11 -11
- package/dist/cli.js.map +1 -1
- package/dist/config-override.d.ts +1 -1
- package/dist/do-autopick.d.ts +1 -1
- package/dist/do-config.d.ts.map +1 -1
- package/dist/do-config.js +1 -1
- package/dist/do-config.js.map +1 -1
- package/dist/env-config.d.ts +1 -1
- package/dist/env-config.js +1 -1
- package/dist/identity.d.ts +1 -1
- package/dist/install-ci.js +2 -2
- package/dist/install-ci.js.map +1 -1
- package/dist/intake-trigger-template.js +2 -2
- package/dist/lifecycle-pools.d.ts +1 -1
- package/dist/mirror-pool-scan.d.ts +2 -2
- package/dist/mirror-pool-scan.js +1 -1
- package/dist/mirror-pool-scan.js.map +1 -1
- package/dist/prd-to-spec.d.ts +5 -5
- package/dist/prd-to-spec.js +5 -5
- package/dist/prd-to-spec.js.map +1 -1
- package/dist/protocol/WORK-CONTRACT.md +1 -1
- package/dist/repo-config.d.ts +11 -11
- package/dist/repo-config.d.ts.map +1 -1
- package/dist/repo-config.js +9 -9
- package/dist/repo-mirror.d.ts +6 -6
- package/dist/repo-mirror.d.ts.map +1 -1
- package/dist/repo-mirror.js +6 -6
- package/dist/repo-mirror.js.map +1 -1
- package/dist/run.d.ts +1 -1
- package/dist/run.js +1 -1
- package/dist/run.js.map +1 -1
- package/dist/scan.d.ts +2 -2
- package/dist/scan.js +5 -5
- package/dist/scan.js.map +1 -1
- package/dist/skills/convert-from-prd-to-spec/SKILL.md +2 -2
- package/dist/skills/drive-tasks/SKILL.md +1 -1
- package/dist/skills/from-idea/SKILL.md +2 -2
- package/dist/skills/setup/SKILL.md +1 -1
- package/dist/skills/setup/protocol/WORK-CONTRACT.md +1 -1
- package/dist/verify-workflow-template.d.ts +1 -1
- package/dist/verify-workflow-template.js +1 -1
- package/package.json +1 -1
- package/src/advance-drivers.ts +1 -1
- package/src/advance-lifecycle-template.ts +6 -6
- package/src/brand.ts +1 -1
- package/src/cli.ts +11 -11
- package/src/config-override.ts +1 -1
- package/src/do-autopick.ts +1 -1
- package/src/do-config.ts +1 -1
- package/src/env-config.ts +1 -1
- package/src/identity.ts +1 -1
- package/src/install-ci.ts +2 -2
- package/src/intake-trigger-template.ts +2 -2
- package/src/lifecycle-pools.ts +1 -1
- package/src/mirror-pool-scan.ts +3 -3
- package/src/prd-to-spec.ts +8 -8
- package/src/repo-config.ts +11 -11
- package/src/repo-mirror.ts +7 -7
- package/src/run.ts +2 -2
- package/src/scan.ts +5 -5
- 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
|
|
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 /
|
|
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
|
package/src/lifecycle-pools.ts
CHANGED
|
@@ -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
|
-
*
|
|
119
|
+
* `dorfl.json` can flip it via the normal resolution chain.
|
|
120
120
|
*/
|
|
121
121
|
surfaceStaging?: boolean;
|
|
122
122
|
}
|
package/src/mirror-pool-scan.ts
CHANGED
|
@@ -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
|
|
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
|
|
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
|
|
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;
|
package/src/prd-to-spec.ts
CHANGED
|
@@ -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
|
|
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
|
|
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 (
|
|
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
|
|
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
|
|
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
|
|
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 +
|
|
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
|
|
929
|
+
// or the legacy `dorfl.json`.
|
|
930
930
|
const configAbs = repoConfigPath(repoPath);
|
|
931
931
|
if (existsSync(configAbs)) {
|
|
932
932
|
scanText(
|
package/src/repo-config.ts
CHANGED
|
@@ -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
|
|
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
|
-
*
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
356
|
-
* source as `sourceLabel` (a path, or e.g. `<arbiter>/main
|
|
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
|
|
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
|
|
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
|
|
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(
|
package/src/repo-mirror.ts
CHANGED
|
@@ -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
|
|
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
|
|
230
|
-
* mirror's `main` (`git show main
|
|
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
|
-
*
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
-
//
|
|
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
|
|
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
|
|
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
|
|
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
|