dorfl 0.8.0 → 0.10.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.
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +63 -25
- package/dist/cli.js.map +1 -1
- package/dist/config.d.ts +82 -7
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +14 -2
- package/dist/config.js.map +1 -1
- package/dist/do.d.ts +16 -1
- package/dist/do.d.ts.map +1 -1
- package/dist/do.js +14 -9
- package/dist/do.js.map +1 -1
- package/dist/env-config.d.ts.map +1 -1
- package/dist/env-config.js +25 -3
- package/dist/env-config.js.map +1 -1
- package/dist/intake-trigger-template.d.ts +91 -53
- package/dist/intake-trigger-template.d.ts.map +1 -1
- package/dist/intake-trigger-template.js +213 -114
- package/dist/intake-trigger-template.js.map +1 -1
- package/dist/intake.d.ts +53 -4
- package/dist/intake.d.ts.map +1 -1
- package/dist/intake.js +59 -15
- package/dist/intake.js.map +1 -1
- package/dist/placement.d.ts +42 -33
- package/dist/placement.d.ts.map +1 -1
- package/dist/placement.js +20 -17
- package/dist/placement.js.map +1 -1
- package/dist/repo-config.d.ts +1 -1
- package/dist/repo-config.d.ts.map +1 -1
- package/dist/repo-config.js +35 -0
- package/dist/repo-config.js.map +1 -1
- package/dist/tasking.d.ts +46 -1
- package/dist/tasking.d.ts.map +1 -1
- package/dist/tasking.js +48 -21
- package/dist/tasking.js.map +1 -1
- package/package.json +1 -1
- package/src/cli.ts +75 -28
- package/src/config.ts +96 -9
- package/src/do.ts +30 -10
- package/src/env-config.ts +25 -3
- package/src/intake-trigger-template.ts +263 -143
- package/src/intake.ts +136 -18
- package/src/placement.ts +42 -36
- package/src/repo-config.ts +35 -0
- package/src/tasking.ts +75 -43
|
@@ -6,9 +6,11 @@
|
|
|
6
6
|
* STRUCTURALLY VALIDATES it, mirroring the snapshot-assertion style of
|
|
7
7
|
* `advance-lifecycle-template.ts` / `advance-ci-template.ts` (the package depends on
|
|
8
8
|
* NO YAML lib, so the checks are presence/shape assertions over the raw text). It
|
|
9
|
-
* ALSO carries the PURE
|
|
10
|
-
*
|
|
11
|
-
*
|
|
9
|
+
* ALSO carries the PURE intake-flags DERIVATION ({@link deriveIntakeFlags}) —
|
|
10
|
+
* CI's merge-vs-propose POLICY, the load-bearing testable logic the workflow
|
|
11
|
+
* encodes at runtime. The DOCUMENT mode is the resolved `intakeIntegration`
|
|
12
|
+
* (operator/config); author-trust drives ONLY the `--origin-trust` stamp +
|
|
13
|
+
* placement, never the mode.
|
|
12
14
|
*
|
|
13
15
|
* SCOPE FENCE (spec Out-of-Scope): the issue→artifact TRANSFORM engine is
|
|
14
16
|
* `issue-intake`'s (`intake <N>` + its four-outcome dispatch + the per-outcome
|
|
@@ -27,14 +29,23 @@
|
|
|
27
29
|
* (re-)evaluation; an EDITED comment is NOT a trigger (the ID-based
|
|
28
30
|
* `seen=<ids>` watermark suffices). The "post a NEW comment to signal an edit"
|
|
29
31
|
* convention is documented in the workflow so a human knows to re-trigger.
|
|
30
|
-
* -
|
|
31
|
-
*
|
|
32
|
-
*
|
|
33
|
-
*
|
|
34
|
-
*
|
|
35
|
-
*
|
|
36
|
-
*
|
|
37
|
-
* (
|
|
32
|
+
* - INTAKE-INTEGRATION → the file-emit MODE; AUTHOR-TRUST → PLACEMENT + the
|
|
33
|
+
* STAMP (ADR `untrusted-origin-carries-via-stamp-not-forced-staging`; spec
|
|
34
|
+
* `intake-integration-knob-and-specs-land-in-proposed-rename`; {@link
|
|
35
|
+
* deriveIntakeFlags}): the intake DOCUMENT mode (merge-vs-propose for a
|
|
36
|
+
* task/spec FILE) is the resolved `intakeIntegration ?? integration` — an
|
|
37
|
+
* operator/config choice, a SINGLE value applied to BOTH the task and the spec
|
|
38
|
+
* document, DECOUPLED from the autonomy gates. `autoBuild`/`autoTask` no
|
|
39
|
+
* longer feed the document mode (they mean ONLY "may an agent act
|
|
40
|
+
* autonomously"). Author-trust feeds exactly (1) the `--origin-trust` STAMP
|
|
41
|
+
* (`author_association` not in OWNER/MEMBER/COLLABORATOR ⇒ `untrusted`) and
|
|
42
|
+
* (2) — via that stamp, read by `intake`'s dispatch — which PLACEMENT default
|
|
43
|
+
* (`untrusted*LandIn` vs `*LandIn`) the emitted document lands in. Untrusted
|
|
44
|
+
* safety is the CARRIED stamp (it forces the BUILD transition to a code PR)
|
|
45
|
+
* plus the placement default, NOT a forced document PR. A document therefore
|
|
46
|
+
* merges to `main` regardless of who filed the issue OR whether the gates are
|
|
47
|
+
* on; whether it is reviewed-as-a-PR is purely the `intakeIntegration`
|
|
48
|
+
* operator config, not a trust or autonomy consequence.
|
|
38
49
|
* - INSERTION POINT E (the issue-thread review surface): the review verdict over
|
|
39
50
|
* intake's generated specs/tasks is surfaced into the ISSUE THREAD via the
|
|
40
51
|
* `IssueProvider.postIssueComment` seam (issue thread, by NUMBER — NOT the PR
|
|
@@ -85,38 +96,49 @@ export const TRUSTED_AUTHOR_ASSOCIATIONS = [
|
|
|
85
96
|
'COLLABORATOR',
|
|
86
97
|
];
|
|
87
98
|
/**
|
|
88
|
-
* DERIVE the per-outcome
|
|
89
|
-
*
|
|
90
|
-
*
|
|
91
|
-
* logic the workflow encodes at runtime (it reads
|
|
92
|
-
*
|
|
99
|
+
* DERIVE the per-outcome file-emit modes + the origin-trust stamp — CI's intake
|
|
100
|
+
* POLICY (ADR `untrusted-origin-carries-via-stamp-not-forced-staging`; spec
|
|
101
|
+
* `intake-integration-knob-and-specs-land-in-proposed-rename` US #1/#2). This is
|
|
102
|
+
* the load-bearing pure logic the workflow encodes at runtime (it reads the
|
|
103
|
+
* resolved `intakeIntegration ?? integration` via `dorfl config --json` for the
|
|
104
|
+
* MODE, and `author_association` off the event payload for the STAMP):
|
|
93
105
|
*
|
|
94
|
-
* - **
|
|
95
|
-
*
|
|
96
|
-
*
|
|
97
|
-
*
|
|
98
|
-
*
|
|
99
|
-
*
|
|
100
|
-
*
|
|
106
|
+
* - **DOCUMENT mode (spec = task)** — the resolved `intakeIntegration` value, a
|
|
107
|
+
* SINGLE mode applied to BOTH the spec and task document: `merge` ⇒
|
|
108
|
+
* `--merge-spec` + `--merge-task`, `propose` ⇒ `--propose-spec` +
|
|
109
|
+
* `--propose-task`. DECOUPLED from the autonomy gates: `autoBuild`/`autoTask`
|
|
110
|
+
* no longer bite the document mode (they mean ONLY "may an agent act
|
|
111
|
+
* autonomously"). So a repo with `autoBuild: true`/`autoTask: true` +
|
|
112
|
+
* `intakeIntegration` (or `integration`) `merge` MERGES intake documents to
|
|
113
|
+
* `main` — previously impossible (the gates forced a document PR).
|
|
114
|
+
* - **ORIGIN-TRUST stamp** — the ONLY thing author-trust drives: `untrusted`
|
|
115
|
+
* iff the author is not trusted, else `trusted`. `intake`'s dispatch reads
|
|
116
|
+
* this stamp to select the untrusted-side PLACEMENT default and to force the
|
|
117
|
+
* later BUILD transition of an untrusted task to a code PR.
|
|
101
118
|
*
|
|
102
|
-
* So
|
|
103
|
-
* and the
|
|
104
|
-
*
|
|
105
|
-
*
|
|
119
|
+
* So author-trust changes ONLY (a) which folder the document lands in (via the
|
|
120
|
+
* stamp → `untrusted*LandIn`) and (b) the carried stamp — NEVER whether the
|
|
121
|
+
* DOCUMENT is a PR. Whether a document merges or is proposed is now purely the
|
|
122
|
+
* `intakeIntegration` operator config, independent of the gates AND of who filed
|
|
123
|
+
* the issue. The untrusted safety is the stamp (the build-time code PR) plus the
|
|
124
|
+
* placement default, not a forced document PR (the ADR's core move).
|
|
106
125
|
*/
|
|
107
126
|
export function deriveIntakeFlags(options) {
|
|
108
|
-
const {
|
|
109
|
-
//
|
|
110
|
-
//
|
|
111
|
-
|
|
112
|
-
//
|
|
113
|
-
//
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
//
|
|
118
|
-
// `
|
|
119
|
-
//
|
|
127
|
+
const { intakeIntegration, authorTrusted } = options;
|
|
128
|
+
// DOCUMENT mode: the resolved `intakeIntegration ?? integration` (operator/config),
|
|
129
|
+
// a SINGLE value applied to BOTH the spec and the task document. Decoupled from
|
|
130
|
+
// the autonomy gates (ADR untrusted-origin-carries-via-stamp-not-forced-staging;
|
|
131
|
+
// spec intake-integration-knob-and-specs-land-in-proposed-rename): autoBuild/
|
|
132
|
+
// autoTask no longer bite the mode, and author-trust never did. The two axes are
|
|
133
|
+
// kept only because intake's CLI takes --merge-spec/--merge-task separately.
|
|
134
|
+
const spec = intakeIntegration;
|
|
135
|
+
const task = intakeIntegration;
|
|
136
|
+
// ORIGIN-TRUST stamp — the SOLE thing author-trust drives on the wire (task
|
|
137
|
+
// `untrusted-origin-forces-build-propose`): the author-trust verdict collapsed
|
|
138
|
+
// to the value `intake` stamps onto the emitted artifact. `intake`'s dispatch
|
|
139
|
+
// reads it to (1) select the untrusted-side placement default (`untrusted*LandIn`)
|
|
140
|
+
// and (2) force the later BUILD transition of an untrusted task to a code PR. It
|
|
141
|
+
// is NOT a re-resolution of trust (CI already resolved it); it is the verdict
|
|
120
142
|
// being CARRIED so it survives the spec/task merge boundary (the becomes-code
|
|
121
143
|
// checkpoint is not laundered when the file lands on main).
|
|
122
144
|
const originTrust = authorTrusted
|
|
@@ -147,9 +169,13 @@ export function isAuthorTrusted(authorAssociation) {
|
|
|
147
169
|
* shape itself is config-independent.
|
|
148
170
|
*
|
|
149
171
|
* The per-outcome FLAGS are DERIVED AT RUNTIME by a `bash` step that mirrors
|
|
150
|
-
* {@link deriveIntakeFlags}: it reads the
|
|
151
|
-
* `
|
|
152
|
-
* `--merge-task`/`--propose-task`
|
|
172
|
+
* {@link deriveIntakeFlags}: it reads the resolved `intakeIntegration ??
|
|
173
|
+
* integration` via `dorfl config --json` to set the (config-derived) DOCUMENT
|
|
174
|
+
* mode `--merge-spec`/`--propose-spec` + `--merge-task`/`--propose-task` (a SINGLE
|
|
175
|
+
* mode applied to both), and the event's `author_association` to set ONLY the
|
|
176
|
+
* `--origin-trust` STAMP (which carries the placement + build-PR consequence). The
|
|
177
|
+
* autonomy gates (`autoBuild`/`autoTask`) are NOT read for the document mode (they
|
|
178
|
+
* mean only "may an agent act autonomously"). The same rule that
|
|
153
179
|
* {@link deriveIntakeFlags} unit-tests is what the workflow executes — they cannot
|
|
154
180
|
* desync because the test asserts the SHELL derivation matches the function.
|
|
155
181
|
*/
|
|
@@ -180,15 +206,22 @@ export function generateIntakeWorkflow(config) {
|
|
|
180
206
|
# re-evaluation (a fresh id the watermark catches). There is NO edit-detection /
|
|
181
207
|
# \`updated_at\` / body-hash tracking.
|
|
182
208
|
#
|
|
183
|
-
# AUTHOR-TRUST →
|
|
184
|
-
#
|
|
185
|
-
#
|
|
186
|
-
#
|
|
187
|
-
#
|
|
188
|
-
#
|
|
189
|
-
#
|
|
190
|
-
#
|
|
191
|
-
#
|
|
209
|
+
# THE DOCUMENT MODE is \`intakeIntegration\`; AUTHOR-TRUST → PLACEMENT + the STAMP:
|
|
210
|
+
# the intake DOCUMENT merge-vs-propose mode is the resolved \`intakeIntegration ??
|
|
211
|
+
# integration\` (an operator/config choice, a SINGLE value applied to BOTH the task
|
|
212
|
+
# and spec document), DECOUPLED from the autonomy gates (spec
|
|
213
|
+
# intake-integration-knob-and-specs-land-in-proposed-rename; ADR
|
|
214
|
+
# untrusted-origin-carries-via-stamp-not-forced-staging). \`autoBuild\`/\`autoTask\`
|
|
215
|
+
# no longer decide the document mode (they mean only "may an agent act
|
|
216
|
+
# autonomously"). Because ANYBODY can file an issue, WHO authored it still matters —
|
|
217
|
+
# but author-trust drives only (1) the \`--origin-trust\` STAMP on the emitted
|
|
218
|
+
# document and (2), via that stamp read by \`intake\`'s dispatch, which PLACEMENT
|
|
219
|
+
# default the document lands in. So an untrusted author's task DOCUMENT MERGES to
|
|
220
|
+
# \`main\` just like a trusted one when \`intakeIntegration\` is \`merge\`; the
|
|
221
|
+
# untrusted safety is the CARRIED stamp (it forces the later BUILD to a code PR)
|
|
222
|
+
# plus the placement default, not a forced document PR. "Merge everything" is
|
|
223
|
+
# \`intakeIntegration: merge\` (or \`integration: merge\`), independent of the gates
|
|
224
|
+
# AND of who filed the issue — so a repo can have autonomy AND merged documents.
|
|
192
225
|
#
|
|
193
226
|
# CI runs IN-PLACE (the CI container IS the isolation): NO --isolated/--remote/
|
|
194
227
|
# registry (laptop-only affordances). The PER-ISSUE concurrency group below
|
|
@@ -234,23 +267,25 @@ permissions:
|
|
|
234
267
|
pull-requests: write
|
|
235
268
|
issues: write
|
|
236
269
|
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
270
|
+
# ── The intake DOCUMENT mode is resolved FROM CONFIG, not carried here ───────
|
|
271
|
+
# CI is NOT a special policy surface (ADR ci-config-policy-and-gate-family §5):
|
|
272
|
+
# it runs the SAME engine config, resolved through flag > env > per-repo > global
|
|
273
|
+
# > default. The SAME dorfl.json the laptop uses applies here. This workflow emits
|
|
274
|
+
# NO DORFL_AUTO_BUILD / DORFL_AUTO_TASK line (ADR
|
|
275
|
+
# untrusted-origin-carries-via-stamp-not-forced-staging: hardcoding them here made
|
|
276
|
+
# the env layer OUTRANK the committed dorfl.json — the shadowing bug). So the env
|
|
277
|
+
# layer carries NO config default; the policy step below READS the resolved intake
|
|
278
|
+
# DOCUMENT mode \`intakeIntegration ?? integration\` via \`dorfl config --json\` (the
|
|
279
|
+
# mechanism \`advance\` already uses), so your committed dorfl.json wins (then the
|
|
280
|
+
# global config, then the built-in default \`propose\`). To land intake documents on
|
|
281
|
+
# main, set \`intakeIntegration: merge\` (or \`integration: merge\`) in dorfl.json
|
|
282
|
+
# (applies everywhere) — NOT by re-running install-ci (ADR §6: install-ci is
|
|
283
|
+
# one-time). The autonomy gates \`autoBuild\`/\`autoTask\` are DECOUPLED from the
|
|
284
|
+
# document mode (spec intake-integration-knob-and-specs-land-in-proposed-rename):
|
|
285
|
+
# they gate autonomy only and are NOT read here. \`intake\` itself is GATE-FREE (the
|
|
286
|
+
# explicit invocation is its own authorization); CI READS only the resolved
|
|
287
|
+
# \`intakeIntegration\`/\`integration\` to DERIVE the merge-vs-propose document flags
|
|
288
|
+
# below (the merge-vs-propose POLICY).
|
|
254
289
|
|
|
255
290
|
jobs:
|
|
256
291
|
intake:
|
|
@@ -265,16 +300,23 @@ jobs:
|
|
|
265
300
|
fetch-depth: 0
|
|
266
301
|
- uses: ./.github/actions/dorfl-setup${setupWith}
|
|
267
302
|
|
|
268
|
-
- name: derive the
|
|
303
|
+
- name: derive the intake DOCUMENT mode (intakeIntegration) + the origin-trust stamp (author-trust)
|
|
269
304
|
id: policy
|
|
270
|
-
# The
|
|
305
|
+
# The intake POLICY, executed at runtime — the SAME rule
|
|
271
306
|
# \`deriveIntakeFlags\` unit-tests (they cannot desync; the test asserts this
|
|
272
|
-
# shell matches the function)
|
|
273
|
-
#
|
|
274
|
-
#
|
|
275
|
-
#
|
|
276
|
-
#
|
|
277
|
-
#
|
|
307
|
+
# shell matches the function). The DOCUMENT mode is the resolved
|
|
308
|
+
# \`intakeIntegration ?? integration\` (operator/config), DECOUPLED from the
|
|
309
|
+
# autonomy gates; author-trust drives ONLY the stamp + placement (ADR
|
|
310
|
+
# untrusted-origin-carries-via-stamp-not-forced-staging; spec
|
|
311
|
+
# intake-integration-knob-and-specs-land-in-proposed-rename):
|
|
312
|
+
# * DOCUMENT mode (spec = task) — config-derived: --merge-* iff the
|
|
313
|
+
# resolved intakeIntegration is merge, else --propose-*. A SINGLE
|
|
314
|
+
# value applied to BOTH the spec and task document. autoBuild/
|
|
315
|
+
# autoTask are NOT read (they gate autonomy only).
|
|
316
|
+
# * ORIGIN-TRUST stamp — the ONLY thing author-trust drives: --origin-trust
|
|
317
|
+
# untrusted iff the author is not OWNER/MEMBER/COLLABORATOR, which
|
|
318
|
+
# \`intake\`'s dispatch reads to select the untrusted PLACEMENT
|
|
319
|
+
# default and to force the later BUILD to a code PR.
|
|
278
320
|
# author_association comes from the COMMENT on an \`issue_comment\` event,
|
|
279
321
|
# else the ISSUE on an \`issues\` event — read straight off the payload, no
|
|
280
322
|
# extra API call.
|
|
@@ -283,37 +325,53 @@ jobs:
|
|
|
283
325
|
run: |
|
|
284
326
|
set -euo pipefail
|
|
285
327
|
|
|
286
|
-
#
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
328
|
+
# Read the RESOLVED intake DOCUMENT mode from the committed config via
|
|
329
|
+
# \`dorfl config --json\` (the mechanism \`advance\` already uses), NOT a
|
|
330
|
+
# hardcoded DORFL_* env (ADR
|
|
331
|
+
# untrusted-origin-carries-via-stamp-not-forced-staging: an env default
|
|
332
|
+
# would OUTRANK dorfl.json — the shadowing bug). In-place, so the
|
|
333
|
+
# resolution chain reads THIS repo's dorfl.json exactly like the laptop.
|
|
334
|
+
# \`intakeIntegration\` is OPTIONAL (unset ⇒ falls back to \`integration\`),
|
|
335
|
+
# so read \`.intakeIntegration // .integration\` in ONE jq expression — the
|
|
336
|
+
# shell twin of the \`intakeIntegration ?? integration\` the CLI applies.
|
|
337
|
+
# The autonomy gates (autoBuild/autoTask) are DECOUPLED from the document
|
|
338
|
+
# mode (spec intake-integration-knob-and-specs-land-in-proposed-rename):
|
|
339
|
+
# they gate autonomy only and are NOT read here.
|
|
340
|
+
config_json="$(dorfl config --json)"
|
|
341
|
+
intake_integration="$(echo "\${config_json}" | jq -r '.intakeIntegration // .integration')"
|
|
342
|
+
|
|
343
|
+
# DOCUMENT mode: config-derived from the single \`intakeIntegration ??
|
|
344
|
+
# integration\` value, applied to BOTH the spec and task document (US #1
|
|
345
|
+
# chose one intake knob, not a per-type split). merge ⇒ --merge-*,
|
|
346
|
+
# else --propose-*. Author-trust does NOT bite the mode (ADR
|
|
347
|
+
# untrusted-origin-carries-via-stamp-not-forced-staging): an untrusted
|
|
348
|
+
# author's DOCUMENT merges just like a trusted one; the untrusted safety
|
|
349
|
+
# is the stamp + placement below, not a document PR.
|
|
350
|
+
if [ "\${intake_integration}" = "merge" ]; then
|
|
290
351
|
spec_flag="--merge-spec"
|
|
352
|
+
task_flag="--merge-task"
|
|
353
|
+
else
|
|
354
|
+
spec_flag="--propose-spec"
|
|
355
|
+
task_flag="--propose-task"
|
|
291
356
|
fi
|
|
292
357
|
|
|
293
358
|
# Author-trust: TRUSTED iff OWNER/MEMBER/COLLABORATOR (admin / write-
|
|
294
359
|
# collaborator — the whole signal). Anything else (incl. empty) is
|
|
295
|
-
# UNTRUSTED
|
|
360
|
+
# UNTRUSTED. It drives ONLY the origin-trust stamp below (NOT the modes).
|
|
296
361
|
trusted="false"
|
|
297
362
|
case "\${AUTHOR_ASSOCIATION:-}" in
|
|
298
363
|
OWNER|MEMBER|COLLABORATOR) trusted="true" ;;
|
|
299
364
|
esac
|
|
300
365
|
|
|
301
|
-
#
|
|
302
|
-
#
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
#
|
|
310
|
-
# derived from the SAME \${trusted} case above (one author-trust read,
|
|
311
|
-
# two consumers — the task/spec modes AND the stamp — so they cannot
|
|
312
|
-
# desync). \`intake\` STAMPS this onto the emitted spec/task frontmatter
|
|
313
|
-
# (origin: issue + originTrust: <value>); it does NOT re-resolve trust
|
|
314
|
-
# (that is CI's policy, passed IN). The stamp SURVIVES the merge boundary
|
|
315
|
-
# so a later auto-task/auto-build of an untrusted-origin artifact still
|
|
316
|
-
# forces a human becomes-code checkpoint (the laundering gap is closed).
|
|
366
|
+
# ORIGIN-TRUST stamp — the SOLE thing author-trust drives on the wire
|
|
367
|
+
# (task untrusted-origin-forces-build-propose). \`intake\` STAMPS this
|
|
368
|
+
# onto the emitted spec/task frontmatter (origin: issue + originTrust:
|
|
369
|
+
# <value>); its dispatch reads the stamp to (1) select the untrusted-side
|
|
370
|
+
# PLACEMENT default (\`untrusted*LandIn\`) and (2) force the later BUILD of
|
|
371
|
+
# an untrusted task to a code PR. It does NOT re-resolve trust (that is
|
|
372
|
+
# CI's policy, passed IN). The stamp SURVIVES the merge boundary so a
|
|
373
|
+
# later auto-task/auto-build of an untrusted-origin artifact still forces
|
|
374
|
+
# a human becomes-code checkpoint (the laundering gap is closed).
|
|
317
375
|
if [ "\${trusted}" = "true" ]; then
|
|
318
376
|
origin_trust_flag="--origin-trust=trusted"
|
|
319
377
|
else
|
|
@@ -323,12 +381,15 @@ jobs:
|
|
|
323
381
|
echo "spec_flag=\${spec_flag}" >> "\$GITHUB_OUTPUT"
|
|
324
382
|
echo "task_flag=\${task_flag}" >> "\$GITHUB_OUTPUT"
|
|
325
383
|
echo "origin_trust_flag=\${origin_trust_flag}" >> "\$GITHUB_OUTPUT"
|
|
326
|
-
echo "intake policy: author_association='\${AUTHOR_ASSOCIATION:-}' trusted=\${trusted} → \${spec_flag} \${task_flag} \${origin_trust_flag}"
|
|
384
|
+
echo "intake policy: intakeIntegration='\${intake_integration}' author_association='\${AUTHOR_ASSOCIATION:-}' trusted=\${trusted} → \${spec_flag} \${task_flag} \${origin_trust_flag}"
|
|
327
385
|
|
|
328
386
|
- name: intake the issue (four-outcome dispatch; surfaces the review verdict into the thread)
|
|
329
387
|
# In-place in this checkout (no --isolated/--remote): the CI container IS
|
|
330
388
|
# the isolation. EXPLICIT \`intake <N>\`, never a bare slug. The per-outcome
|
|
331
|
-
# flags carry the
|
|
389
|
+
# flags carry the (intakeIntegration-derived) document modes + the
|
|
390
|
+
# origin-trust stamp derived above (author-trust drives only the stamp +
|
|
391
|
+
# placement, not the document merge-vs-propose; the autonomy gates drive
|
|
392
|
+
# neither). \`intake\` runs the
|
|
332
393
|
# lone-task review/edit loop and posts its findings as questions back into
|
|
333
394
|
# THIS issue thread (insertion point E) through the issue-comment seam —
|
|
334
395
|
# CI surfaces E by invoking intake; it adds no new review mechanism.
|
|
@@ -397,30 +458,68 @@ export function validateIntakeWorkflow(text) {
|
|
|
397
458
|
// Trust = OWNER/MEMBER/COLLABORATOR (the whole signal).
|
|
398
459
|
require('trust-owner-member-collaborator', /OWNER\|MEMBER\|COLLABORATOR|OWNER[\s\S]{0,40}MEMBER[\s\S]{0,40}COLLABORATOR/.test(text), 'author-trust must be OWNER/MEMBER/COLLABORATOR (admin / write-collaborator ' +
|
|
399
460
|
'— the whole signal; Decision 1).');
|
|
400
|
-
//
|
|
401
|
-
//
|
|
402
|
-
//
|
|
461
|
+
// The DOCUMENT mode is intakeIntegration-DERIVED (spec
|
|
462
|
+
// intake-integration-knob-and-specs-land-in-proposed-rename; the autonomy gates
|
|
463
|
+
// no longer bite it): the derivation must be able to emit both task modes
|
|
464
|
+
// (merge iff the resolved intakeIntegration is merge, else propose).
|
|
403
465
|
require('derives-propose-task', /--propose-task\b/.test(operative), 'the policy derivation must be able to emit `--propose-task` (the ' +
|
|
404
|
-
'
|
|
466
|
+
'intakeIntegration-propose path).');
|
|
405
467
|
require('derives-merge-task', /--merge-task\b/.test(operative), 'the policy derivation must be able to emit `--merge-task` (the ' +
|
|
406
|
-
'
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
require('derives-
|
|
468
|
+
'intakeIntegration-merge path; a task DOCUMENT merges regardless of the ' +
|
|
469
|
+
'autonomy gates or author-trust).');
|
|
470
|
+
// --merge-spec is emitted when the resolved intakeIntegration is merge (the
|
|
471
|
+
// SAME single value as the task; the gates do not bite it).
|
|
472
|
+
require('derives-merge-spec', /--merge-spec\b/.test(operative), 'the policy derivation must be able to emit `--merge-spec` (the ' +
|
|
473
|
+
'intakeIntegration-merge path).');
|
|
474
|
+
require('derives-propose-spec', /--propose-spec\b/.test(operative), 'the policy derivation must be able to emit `--propose-spec` (the ' +
|
|
475
|
+
'intakeIntegration-propose path).');
|
|
411
476
|
// ORIGIN-TRUST stamp (task untrusted-origin-forces-build-propose): the shell
|
|
412
|
-
// must derive `--origin-trust <trusted|untrusted>` from the
|
|
413
|
-
//
|
|
414
|
-
// artifact is stamped (the stamp
|
|
477
|
+
// must derive `--origin-trust <trusted|untrusted>` from the author-trust case
|
|
478
|
+
// (independent of the document mode) and pass it to `intake` so the emitted
|
|
479
|
+
// artifact is stamped (the stamp is the SOLE thing author-trust drives).
|
|
415
480
|
require('derives-origin-trust-untrusted', /--origin-trust=untrusted\b/.test(operative), 'the policy derivation must emit `--origin-trust=untrusted` for a non-trusted ' +
|
|
416
481
|
'author (so the emitted artifact is stamped untrusted; task ' +
|
|
417
482
|
'untrusted-origin-forces-build-propose).');
|
|
418
483
|
require('derives-origin-trust-trusted', /--origin-trust=trusted\b/.test(operative), 'the policy derivation must emit `--origin-trust=trusted` for a trusted author.');
|
|
419
484
|
require('passes-origin-trust-to-intake', /steps\.policy\.outputs\.origin_trust_flag/.test(operative), 'the intake invocation must pass the derived `--origin-trust` flag (the ' +
|
|
420
485
|
'stamp must reach `dorfl intake`).');
|
|
421
|
-
// The derivation must
|
|
422
|
-
|
|
423
|
-
|
|
486
|
+
// The derivation must read the RESOLVED intake DOCUMENT mode via `dorfl config
|
|
487
|
+
// --json` (the mechanism `advance` uses), NOT a hardcoded DORFL_* env (ADR
|
|
488
|
+
// untrusted-origin-carries-via-stamp-not-forced-staging — the shadowing bug).
|
|
489
|
+
require('reads-config-json', /dorfl config --json/.test(operative), 'the policy derivation must read the resolved config via ' +
|
|
490
|
+
'`dorfl config --json` (as `advance` does), so a committed `dorfl.json` ' +
|
|
491
|
+
'mode is honored in CI (not shadowed by a hardcoded env).');
|
|
492
|
+
// The DOCUMENT mode is the resolved `intakeIntegration ?? integration` (spec
|
|
493
|
+
// intake-integration-knob-and-specs-land-in-proposed-rename): the derivation
|
|
494
|
+
// must read `.intakeIntegration` with a `.integration` FALLBACK (the shell twin
|
|
495
|
+
// of `intakeIntegration ?? integration`), NOT the autonomy gates. Pin BOTH the
|
|
496
|
+
// key and the fallback so a regression to a gate-derived mode is caught.
|
|
497
|
+
require('reads-intake-integration', /\.intakeIntegration\b/.test(operative), 'the policy derivation must read the resolved `intakeIntegration` mode (jq ' +
|
|
498
|
+
'`.intakeIntegration` off `dorfl config --json`) for the document mode.');
|
|
499
|
+
require('intake-integration-falls-back-to-integration', /\.intakeIntegration\s*\/\/\s*\.integration/.test(operative), 'the policy derivation must fall back to `.integration` when ' +
|
|
500
|
+
'`intakeIntegration` is unset (jq `.intakeIntegration // .integration`, the ' +
|
|
501
|
+
'shell twin of `intakeIntegration ?? integration`).');
|
|
502
|
+
// The DOCUMENT mode must NOT be derived from the autonomy gates (spec
|
|
503
|
+
// intake-integration-knob-and-specs-land-in-proposed-rename: autoBuild/autoTask
|
|
504
|
+
// gate autonomy ONLY, never the document PR-mode). The mode branch must not read
|
|
505
|
+
// `.autoBuild` / `.autoTask` off the config json.
|
|
506
|
+
require('mode-not-gate-derived', !/\.auto(?:Build|Task)\b/.test(operative), 'the intake DOCUMENT mode must be derived from `intakeIntegration ?? ' +
|
|
507
|
+
'integration`, NOT the autonomy gates — the derivation must not read ' +
|
|
508
|
+
'`.autoBuild` / `.autoTask` (they gate autonomy only; spec ' +
|
|
509
|
+
'intake-integration-knob-and-specs-land-in-proposed-rename).');
|
|
510
|
+
// ANTI-REGRESSION (ADR untrusted-origin-carries-via-stamp-not-forced-staging;
|
|
511
|
+
// spec US #12): the workflow must NOT emit a `DORFL_AUTO_BUILD:` /
|
|
512
|
+
// `DORFL_AUTO_TASK:` env ASSIGNMENT. The env layer OUTRANKS per-repo config, so
|
|
513
|
+
// a hardcoded default here SHADOWS the committed `dorfl.json` gates (the bug this
|
|
514
|
+
// task fixes). Mirrors `advance-lifecycle-template.ts`'s `no-gate-env-auto-build`
|
|
515
|
+
// / `no-gate-env-auto-task`. Checked over the OPERATIVE (non-comment) lines so
|
|
516
|
+
// the header comment that NAMES these keys is not a false positive.
|
|
517
|
+
require('no-gate-env-auto-build', !/DORFL_AUTO_BUILD\s*:/.test(operative), 'the workflow must NOT emit a `DORFL_AUTO_BUILD:` env assignment (env ' +
|
|
518
|
+
'carries no defaults; the gate is resolved from per-repo config / built-in ' +
|
|
519
|
+
'default — else the env SHADOWS the committed dorfl.json).');
|
|
520
|
+
require('no-gate-env-auto-task', !/DORFL_AUTO_TASK\s*:/.test(operative), 'the workflow must NOT emit a `DORFL_AUTO_TASK:` env assignment (env ' +
|
|
521
|
+
'carries no defaults; the gate is resolved from per-repo config / built-in ' +
|
|
522
|
+
'default — else the env SHADOWS the committed dorfl.json).');
|
|
424
523
|
// --- Insertion point E: the issue-thread review surface ---------------------
|
|
425
524
|
// E is REUSED via `intake` (which runs the lone-task review and posts to the
|
|
426
525
|
// thread). The workflow must request `issues: write` so that comment can land.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"intake-trigger-template.js","sourceRoot":"","sources":["../src/intake-trigger-template.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"intake-trigger-template.js","sourceRoot":"","sources":["../src/intake-trigger-template.ts"],"names":[],"mappings":"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"}
|
package/dist/intake.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { IntegrateResult, ReviewProvider } from './integrator.js';
|
|
2
|
-
import type { IntegrationMode, SpecsLandIn } from './config.js';
|
|
2
|
+
import type { IntegrationMode, SpecsLandIn, TasksLandIn } from './config.js';
|
|
3
3
|
import type { OriginTrust } from './frontmatter.js';
|
|
4
4
|
import { type Identity } from './identity.js';
|
|
5
5
|
import { type Harness } from './harness.js';
|
|
@@ -226,11 +226,47 @@ export interface PerformIntakeOptions {
|
|
|
226
226
|
* the PR opens normally.
|
|
227
227
|
*/
|
|
228
228
|
noPR?: boolean;
|
|
229
|
+
/**
|
|
230
|
+
* **The per-repo TASK-PLACEMENT default, passed IN** (spec
|
|
231
|
+
* `untrusted-origin-carries-via-stamp-intake-placement-symmetry-and-ci-gate-resolution`
|
|
232
|
+
* US #2, governing ADR `untrusted-origin-carries-via-stamp-not-forced-staging`).
|
|
233
|
+
* The resolved per-repo default landing for `intake`-authored TASKS emitted
|
|
234
|
+
* DIRECTLY from an issue (`backlog` = staging; `ready` = the agent pool), fed
|
|
235
|
+
* as the CONFIGURED-DEFAULT rung into the shared placement resolver
|
|
236
|
+
* (`src/placement.ts`) via the SAME task slots + `landingToSide` mapping the
|
|
237
|
+
* tasker (`tasking.ts`) uses — so the intake TASK emit reaches PARITY with the
|
|
238
|
+
* intake SPEC emit (both route through the resolver, both stamp origin-trust).
|
|
239
|
+
* Unset ⇒ the resolver's built-in floor applies (`staging` = `tasks/backlog/`,
|
|
240
|
+
* the conservative landing). The TASK twin of {@link specsLandIn}.
|
|
241
|
+
*/
|
|
242
|
+
tasksLandIn?: TasksLandIn;
|
|
243
|
+
/**
|
|
244
|
+
* **The per-repo UNTRUSTED-side TASK-PLACEMENT default, passed IN** (spec
|
|
245
|
+
* `untrusted-origin-carries-via-stamp-intake-placement-symmetry-and-ci-gate-resolution`
|
|
246
|
+
* US #5, governing ADR `untrusted-origin-carries-via-stamp-not-forced-staging`).
|
|
247
|
+
* The TWIN of {@link tasksLandIn} selected when the intake stamp is
|
|
248
|
+
* `originTrust: untrusted`: {@link dispatchTask} reads the stamp and feeds THIS
|
|
249
|
+
* default (rather than {@link tasksLandIn}) as the configured-default rung of
|
|
250
|
+
* the shared placement resolver. The resolver no longer has an
|
|
251
|
+
* untrusted-forces-staging rung; DEFAULTS to staging (`backlog`), opt-in
|
|
252
|
+
* `ready` (safety then via the task's carried stamp, not the folder). The TASK
|
|
253
|
+
* twin of {@link untrustedSpecsLandIn}; the SAME knob the tasker consults for
|
|
254
|
+
* an untrusted-origin spec's downstream tasks (one policy, both call sites).
|
|
255
|
+
*/
|
|
256
|
+
untrustedTasksLandIn?: TasksLandIn;
|
|
257
|
+
/**
|
|
258
|
+
* **The OPERATOR's EXPLICIT task-placement override** (the TOP precedence
|
|
259
|
+
* rung). When set, the runner-deterministic resolver lands the emitted task
|
|
260
|
+
* HERE regardless of {@link tasksLandIn} / {@link untrustedTasksLandIn} — the
|
|
261
|
+
* TASK twin of {@link explicitSpecsLandIn}. Set ONLY when the operator typed
|
|
262
|
+
* the explicit placement flag; never when the value came from config.
|
|
263
|
+
*/
|
|
264
|
+
explicitTasksLandIn?: TasksLandIn;
|
|
229
265
|
/**
|
|
230
266
|
* **The per-repo SPEC-PLACEMENT default, passed IN** (spec
|
|
231
267
|
* `staging-pool-position-gate-and-trust-model` US #2/#5, task
|
|
232
268
|
* `pre-prd-staging-pool-split-and-untrusted-prd-placement`). The resolved
|
|
233
|
-
* per-repo default landing for `intake`-authored prds (`
|
|
269
|
+
* per-repo default landing for `intake`-authored prds (`proposed` =
|
|
234
270
|
* staging; `ready` = the auto-tasking pool), fed as the CONFIGURED-DEFAULT rung
|
|
235
271
|
* into the shared placement resolver (`src/placement.ts`). The resolver
|
|
236
272
|
* overlays an EXPLICIT operator flag ({@link explicitSpecsLandIn}, top) and
|
|
@@ -240,11 +276,24 @@ export interface PerformIntakeOptions {
|
|
|
240
276
|
* path — one resolver, two lifecycles.
|
|
241
277
|
*/
|
|
242
278
|
specsLandIn?: SpecsLandIn;
|
|
279
|
+
/**
|
|
280
|
+
* **The per-repo UNTRUSTED-side SPEC-PLACEMENT default, passed IN** (spec
|
|
281
|
+
* `untrusted-origin-carries-via-stamp-intake-placement-symmetry-and-ci-gate-resolution`
|
|
282
|
+
* US #7, governing ADR
|
|
283
|
+
* `untrusted-origin-carries-via-stamp-not-forced-staging`). The TWIN of
|
|
284
|
+
* {@link specsLandIn} selected when the intake stamp is
|
|
285
|
+
* `originTrust: untrusted`: the spec dispatch reads the stamp and feeds THIS
|
|
286
|
+
* default (rather than {@link specsLandIn}) as the configured-default rung of
|
|
287
|
+
* the shared placement resolver. The resolver no longer has an
|
|
288
|
+
* untrusted-forces-staging rung; DEFAULTS to staging (`proposed`), opt-in
|
|
289
|
+
* `ready` (safety then via the tasks' carried stamp, not the folder).
|
|
290
|
+
*/
|
|
291
|
+
untrustedSpecsLandIn?: SpecsLandIn;
|
|
243
292
|
/**
|
|
244
293
|
* **The OPERATOR's EXPLICIT spec-placement override** (the TOP precedence
|
|
245
294
|
* rung). When set, the runner-deterministic resolver lands the spec HERE
|
|
246
|
-
* regardless of
|
|
247
|
-
* analogue of `explicitMerge` overriding the untrusted-origin
|
|
295
|
+
* regardless of {@link specsLandIn} / {@link untrustedSpecsLandIn} — the
|
|
296
|
+
* positional analogue of `explicitMerge` overriding the untrusted-origin
|
|
248
297
|
* build-propose rule ("the operator is present; CLI always wins, no
|
|
249
298
|
* special force-key"). Set ONLY when the operator typed
|
|
250
299
|
* `--specs-land-in <where>`; never when the value came from config.
|
package/dist/intake.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"intake.d.ts","sourceRoot":"","sources":["../src/intake.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAC,eAAe,EAAE,cAAc,EAAC,MAAM,iBAAiB,CAAC;AAErE,OAAO,KAAK,EAAC,eAAe,EAAE,WAAW,EAAC,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"intake.d.ts","sourceRoot":"","sources":["../src/intake.ts"],"names":[],"mappings":"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"}
|