@outerlayer/cli 0.15.0 → 0.17.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/CHANGELOG.md +34 -0
- package/README.md +11 -11
- package/dist/{agent-setup-CN2HUBEJ.js → agent-setup-T624CWPD.js} +8 -7
- package/dist/artifact-link-cmd-2F47LT7F.js +24 -0
- package/dist/build-info.json +1 -1
- package/dist/{check-2JSSXCKJ.js → check-5XE7XMC4.js} +22 -19
- package/dist/{chunk-HFKKFTXU.js → chunk-2MNPHL23.js} +19 -11
- package/dist/{chunk-YDSMROTB.js → chunk-3NSNIIBE.js} +8 -4
- package/dist/{chunk-FOJGZYFC.js → chunk-42ZI52JW.js} +1 -1
- package/dist/{chunk-NPQWKGUA.js → chunk-6Y5RUTHO.js} +1 -1
- package/dist/{chunk-PQUM37BK.js → chunk-BWQ66M6N.js} +1 -1
- package/dist/chunk-C5Y5ZJJZ.js +88 -0
- package/dist/{chunk-ASOSIKA4.js → chunk-G5NPRL2K.js} +27 -6
- package/dist/{chunk-QLTYTPYU.js → chunk-HGECYFEI.js} +64 -7
- package/dist/{chunk-SXWS25JC.js → chunk-KG5ECZGJ.js} +6 -6
- package/dist/{chunk-F7GBYX2P.js → chunk-LWSJQJC6.js} +18 -4
- package/dist/{chunk-UUDDPNRJ.js → chunk-MAK5LYRF.js} +33 -10
- package/dist/{chunk-MTF3PHVZ.js → chunk-NBGDBTO2.js} +3 -3
- package/dist/{chunk-KFRM23WD.js → chunk-NNRTPG7X.js} +2 -2
- package/dist/{chunk-MSASO5O4.js → chunk-NWQTTSBB.js} +1 -1
- package/dist/{chunk-2M63GG56.js → chunk-OHVJA253.js} +1 -1
- package/dist/{chunk-Z3NOIFDR.js → chunk-ONKJUM6R.js} +1 -1
- package/dist/{chunk-T5VPP6H7.js → chunk-OZGHL5Y5.js} +1 -1
- package/dist/{chunk-ZA5CHAFY.js → chunk-POJMEEJJ.js} +21 -4
- package/dist/{chunk-JR6ERP3M.js → chunk-S3NYLI2P.js} +3 -3
- package/dist/{chunk-HXLMZOKU.js → chunk-VQYBXPI7.js} +4 -4
- package/dist/{chunk-LCEXHCHD.js → chunk-WTE3MQML.js} +1 -1
- package/dist/{chunk-NXUH742G.js → chunk-WVUIRTWA.js} +10 -8
- package/dist/{chunk-JJEGKEFV.js → chunk-YU3VKZ5F.js} +1 -1
- package/dist/{chunk-3NLOVYJQ.js → chunk-YZ5F4PIS.js} +134 -38
- package/dist/{cli-RGGXQTWI.js → cli-A76AXELQ.js} +90 -79
- package/dist/{command-ETUAEXP2.js → command-R2QCVX55.js} +10 -9
- package/dist/{connect-cmd-JUAW6MU4.js → connect-cmd-JBKAQNSF.js} +1 -1
- package/dist/{context-adopt-PJUMW2EZ.js → context-adopt-NFHCLVUB.js} +5 -4
- package/dist/{context-materialize-FDHYKNDT.js → context-materialize-IV2TUUFO.js} +5 -4
- package/dist/{doctor-CORFPYY6.js → doctor-4TAIARIG.js} +15 -13
- package/dist/{emit-artifact-cmd-FOGNJXVR.js → emit-artifact-cmd-MPZVR56N.js} +4 -4
- package/dist/{emit-cmd-ZEYWLC2C.js → emit-cmd-IJ3GVRFD.js} +4 -3
- package/dist/{emit-criteria-cmd-HBP6XS5C.js → emit-criteria-cmd-EFGYI23V.js} +2 -2
- package/dist/{emit-finding-cmd-DLI4MKMN.js → emit-finding-cmd-5GF3V4LR.js} +160 -47
- package/dist/{emit-result-cmd-MUSL7GQA.js → emit-result-cmd-I4OADKMD.js} +4 -4
- package/dist/hidden-prompt-UXBFMQC5.js +68 -0
- package/dist/{hook-fast-WYQD6D7T.js → hook-fast-R4FVSZ2H.js} +1 -1
- package/dist/{import-capture-cmd-6QVCOIHK.js → import-capture-cmd-EQ35EARA.js} +3 -3
- package/dist/{import-ruler-cmd-KLRGRBCP.js → import-ruler-cmd-BGAZXCQM.js} +1 -1
- package/dist/index.js +3 -3
- package/dist/{init-OPB7HHXO.js → init-6XPDRDTC.js} +12 -11
- package/dist/{init-MIC37V6J.js → init-PWU5YVL7.js} +54 -29
- package/dist/{init-cmd-JR3RKNFB.js → init-cmd-XAVO7HYZ.js} +11 -10
- package/dist/{init-update-O5YYFGF4.js → init-update-CVCWD6VS.js} +10 -9
- package/dist/{loop-QNSM5GXS.js → loop-FK3LPMMZ.js} +19 -18
- package/dist/{machine-IT6GG7FF.js → machine-SQXEBAM2.js} +10 -9
- package/dist/{runner-env-XTC53CHN.js → runner-env-EN7YE7QX.js} +1 -1
- package/dist/runner-key-6SLBI7PP.js +174 -0
- package/dist/{session-sender-4M247XSV.js → session-sender-FO3LCREV.js} +3 -3
- package/dist/{starter-pack-IB4UUIX3.js → starter-pack-KF66HGZR.js} +3 -3
- package/dist/{status-7ZX57OFJ.js → status-7VNQN5PW.js} +13 -12
- package/dist/{sync-cmd-UWD5JOFU.js → sync-cmd-GVPPFZ3G.js} +2 -2
- package/dist/{watch-DBNB7R6X.js → watch-23HSAEI6.js} +2 -2
- package/dist/{work-claim-cmd-A6IS6CQ7.js → work-claim-cmd-LKL3GHFQ.js} +5 -5
- package/dist/{work-cmd-EQSW5DTD.js → work-cmd-Z2WXLZPH.js} +3 -3
- package/dist/{work-comment-cmd-7VLKI7FN.js → work-comment-cmd-AWHP56M2.js} +3 -3
- package/dist/{work-open-pr-cmd-JEVD4HMQ.js → work-open-pr-cmd-IOM4AVQQ.js} +4 -4
- package/dist/{work-pr-cmd-L77K32WK.js → work-pr-cmd-HNEUIEN7.js} +3 -3
- package/package.json +1 -1
- package/skill-pack/maintained/{amend → outerlayer-amend}/SKILL.md +4 -2
- package/skill-pack/maintained/{outerlayer → outerlayer-cli}/SKILL.md +5 -3
- package/skill-pack/maintained/{emitting-evidence → outerlayer-evidence}/SKILL.md +5 -3
- package/skill-pack/maintained/{reporting-findings → outerlayer-findings}/SKILL.md +26 -30
- package/skill-pack/shipped.json +20 -4
- package/skill-pack/template/build/SKILL.md +7 -1
- package/skill-pack/template/build/references/agent-briefs.md +7 -1
- package/skill-pack/template/build/references/evidence.md +1 -1
- package/skill-pack/template/build/references/release.md +14 -12
- package/skill-pack/template/build/references/review-briefs.md +6 -0
- package/skill-pack/template/build/scripts/criterion-citations.mjs +8 -3
- package/skill-pack/template/build/scripts/record-criteria.mjs +8 -2
- package/skill-pack/template/spec/SKILL.md +2 -0
- package/skill-pack/template/writing-specs/SKILL.md +1 -1
- package/skill-pack/validators/acceptance-criteria.yaml +6 -5
- package/skill-pack/validators/code-review.yaml +6 -5
- package/dist/runner-key-7SSNMUBQ.js +0 -154
- /package/skill-pack/maintained/{outerlayer → outerlayer-cli}/references/open-pull-request.md +0 -0
- /package/skill-pack/maintained/{emitting-evidence → outerlayer-evidence}/references/agents-snippet.md +0 -0
|
@@ -1,19 +1,19 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import { createRequire } from 'node:module';
|
|
3
|
-
import { LEASE_SECONDS, ALREADY_RELEASED, RENEW_INTERVAL_SECONDS } from './chunk-
|
|
3
|
+
import { LEASE_SECONDS, ALREADY_RELEASED, RENEW_INTERVAL_SECONDS } from './chunk-G5NPRL2K.js';
|
|
4
4
|
import './chunk-RMWLBUCJ.js';
|
|
5
|
+
import './chunk-NNRTPG7X.js';
|
|
5
6
|
import './chunk-HYZRY4KZ.js';
|
|
6
|
-
import './chunk-
|
|
7
|
-
import './chunk-MSASO5O4.js';
|
|
7
|
+
import './chunk-NWQTTSBB.js';
|
|
8
8
|
import './chunk-HHJDN6AU.js';
|
|
9
9
|
import { formatBytes } from './chunk-YYYRBYWG.js';
|
|
10
10
|
import './chunk-TBT347UY.js';
|
|
11
|
-
import { formatDuration, formatClock, relativeToRunner } from './chunk-
|
|
11
|
+
import { formatDuration, formatClock, relativeToRunner } from './chunk-MAK5LYRF.js';
|
|
12
12
|
import './chunk-KMDLFI4P.js';
|
|
13
13
|
import './chunk-QKFB4K7X.js';
|
|
14
14
|
import './chunk-RSNSZ2LJ.js';
|
|
15
|
-
import './chunk-
|
|
16
|
-
import './chunk-
|
|
15
|
+
import './chunk-S3NYLI2P.js';
|
|
16
|
+
import './chunk-6Y5RUTHO.js';
|
|
17
17
|
import './chunk-IP7BIBXJ.js';
|
|
18
18
|
import './chunk-22RMZBGW.js';
|
|
19
19
|
import './chunk-UXYLWVTQ.js';
|
|
@@ -27,7 +27,7 @@ import './chunk-4Q7OMKAT.js';
|
|
|
27
27
|
import './chunk-CX22S5BA.js';
|
|
28
28
|
import './chunk-F7CU5ABH.js';
|
|
29
29
|
import './chunk-BKO6JEZI.js';
|
|
30
|
-
import './chunk-
|
|
30
|
+
import './chunk-3NSNIIBE.js';
|
|
31
31
|
import './chunk-WUYTWNMA.js';
|
|
32
32
|
import './chunk-JXYVA45C.js';
|
|
33
33
|
import './chunk-4KSQKQXE.js';
|
|
@@ -36,20 +36,21 @@ import './chunk-YRYMNBGQ.js';
|
|
|
36
36
|
import './chunk-GQD22KKN.js';
|
|
37
37
|
import './chunk-WZBHBH3J.js';
|
|
38
38
|
import './chunk-5QRP3MVS.js';
|
|
39
|
-
import './chunk-
|
|
40
|
-
import './chunk-
|
|
39
|
+
import './chunk-YZ5F4PIS.js';
|
|
40
|
+
import './chunk-WTE3MQML.js';
|
|
41
|
+
import './chunk-C5Y5ZJJZ.js';
|
|
41
42
|
import './chunk-ZJSNLVCE.js';
|
|
42
43
|
import './chunk-YO4PSLVB.js';
|
|
43
44
|
import './chunk-BYT5O5RV.js';
|
|
44
|
-
import './chunk-
|
|
45
|
-
import './chunk-
|
|
45
|
+
import './chunk-POJMEEJJ.js';
|
|
46
|
+
import './chunk-OHVJA253.js';
|
|
46
47
|
import './chunk-PLMTLGYH.js';
|
|
47
48
|
import './chunk-J5M7BSJQ.js';
|
|
48
49
|
import './chunk-EABW6AJQ.js';
|
|
49
50
|
import './chunk-RA3O54FC.js';
|
|
50
51
|
import './chunk-V7NIVOFD.js';
|
|
51
52
|
import { runnerDir, jobsDir } from './chunk-ZM2IMMYN.js';
|
|
52
|
-
import './chunk-
|
|
53
|
+
import './chunk-BWQ66M6N.js';
|
|
53
54
|
import './chunk-XCCLFVXM.js';
|
|
54
55
|
import './chunk-BJ3KTMDH.js';
|
|
55
56
|
import './chunk-VNVZDWO3.js';
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import { createRequire } from 'node:module';
|
|
3
|
-
export { CHUNK_PART_TARGET_BYTES, RETRYABLE_STATUSES, SyncConfigError, SyncTransportError, detectCi, isLoopbackUrl, resolveTier, runSync } from './chunk-
|
|
3
|
+
export { CHUNK_PART_TARGET_BYTES, RETRYABLE_STATUSES, SyncConfigError, SyncTransportError, detectCi, isLoopbackUrl, resolveTier, runSync } from './chunk-NWQTTSBB.js';
|
|
4
4
|
import './chunk-HHJDN6AU.js';
|
|
5
5
|
import './chunk-TBT347UY.js';
|
|
6
6
|
import './chunk-IP7BIBXJ.js';
|
|
@@ -19,7 +19,7 @@ import './chunk-J5M7BSJQ.js';
|
|
|
19
19
|
export { cloudConfigPath, readCloudConfig, writeCloudConfig } from './chunk-EABW6AJQ.js';
|
|
20
20
|
import './chunk-V7NIVOFD.js';
|
|
21
21
|
import './chunk-ZM2IMMYN.js';
|
|
22
|
-
import './chunk-
|
|
22
|
+
import './chunk-BWQ66M6N.js';
|
|
23
23
|
import './chunk-XCCLFVXM.js';
|
|
24
24
|
import './chunk-BJ3KTMDH.js';
|
|
25
25
|
import './chunk-VNVZDWO3.js';
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import { createRequire } from 'node:module';
|
|
3
|
-
import { LiveUploader } from './chunk-
|
|
3
|
+
import { LiveUploader } from './chunk-NWQTTSBB.js';
|
|
4
4
|
import './chunk-HHJDN6AU.js';
|
|
5
5
|
import './chunk-TBT347UY.js';
|
|
6
6
|
import './chunk-IP7BIBXJ.js';
|
|
@@ -19,7 +19,7 @@ import './chunk-J5M7BSJQ.js';
|
|
|
19
19
|
import './chunk-EABW6AJQ.js';
|
|
20
20
|
import './chunk-V7NIVOFD.js';
|
|
21
21
|
import './chunk-ZM2IMMYN.js';
|
|
22
|
-
import './chunk-
|
|
22
|
+
import './chunk-BWQ66M6N.js';
|
|
23
23
|
import './chunk-XCCLFVXM.js';
|
|
24
24
|
import './chunk-BJ3KTMDH.js';
|
|
25
25
|
import { homeFromEnv } from './chunk-VNVZDWO3.js';
|
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import { createRequire } from 'node:module';
|
|
3
3
|
import { RUNNER_PROTOCOL } from './chunk-ADJRGVZC.js';
|
|
4
|
-
import { resolveCredentials, WorkCommandError, parsePositiveInt, postJson, environmentFacts, resolveRepository, findLiveItem } from './chunk-
|
|
5
|
-
export { WorkCommandError } from './chunk-
|
|
6
|
-
import './chunk-
|
|
4
|
+
import { resolveCredentials, WorkCommandError, parsePositiveInt, postJson, environmentFacts, resolveRepository, findLiveItem } from './chunk-S3NYLI2P.js';
|
|
5
|
+
export { WorkCommandError } from './chunk-S3NYLI2P.js';
|
|
6
|
+
import './chunk-6Y5RUTHO.js';
|
|
7
7
|
import './chunk-IP7BIBXJ.js';
|
|
8
8
|
import { defaultRunnerConfigPath } from './chunk-22RMZBGW.js';
|
|
9
9
|
import './chunk-UXYLWVTQ.js';
|
|
10
10
|
import './chunk-7RQ73DLO.js';
|
|
11
11
|
import './chunk-4Q7OMKAT.js';
|
|
12
|
-
import './chunk-
|
|
12
|
+
import './chunk-3NSNIIBE.js';
|
|
13
13
|
import './chunk-WUYTWNMA.js';
|
|
14
14
|
import './chunk-JXYVA45C.js';
|
|
15
15
|
import './chunk-4KSQKQXE.js';
|
|
@@ -118,7 +118,7 @@ async function runWorkRelease(opts) {
|
|
|
118
118
|
{ sessionId, ended: true },
|
|
119
119
|
fetchImpl
|
|
120
120
|
);
|
|
121
|
-
const { markWorkLeaseRenewed } = await import('./hook-fast-
|
|
121
|
+
const { markWorkLeaseRenewed } = await import('./hook-fast-R4FVSZ2H.js');
|
|
122
122
|
markWorkLeaseRenewed(sessionId, opts.home ?? homeFromEnv(env));
|
|
123
123
|
const output2 = opts.json ? JSON.stringify(data2) : `released session ${sessionId}'s lease on #${itemId}, if it held one`;
|
|
124
124
|
if (!opts.quiet) process.stdout.write(output2 + "\n");
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import { createRequire } from 'node:module';
|
|
3
|
-
export { WorkCommandError, environmentFacts, findLiveItem, getJson, parsePositiveInt, postJson, resolveCredentials, resolveRepository, runWorkBuild, runWorkLinkSession, runWorkList, runWorkRemove, runWorkStatus } from './chunk-
|
|
4
|
-
import './chunk-
|
|
3
|
+
export { WorkCommandError, environmentFacts, findLiveItem, getJson, parsePositiveInt, postJson, resolveCredentials, resolveRepository, runWorkBuild, runWorkLinkSession, runWorkList, runWorkRemove, runWorkStatus } from './chunk-S3NYLI2P.js';
|
|
4
|
+
import './chunk-6Y5RUTHO.js';
|
|
5
5
|
import './chunk-IP7BIBXJ.js';
|
|
6
|
-
import './chunk-
|
|
6
|
+
import './chunk-3NSNIIBE.js';
|
|
7
7
|
import './chunk-WUYTWNMA.js';
|
|
8
8
|
import './chunk-JXYVA45C.js';
|
|
9
9
|
import './chunk-4KSQKQXE.js';
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import { createRequire } from 'node:module';
|
|
3
|
-
import { resolveCredentials, postJson, getJson } from './chunk-
|
|
4
|
-
import './chunk-
|
|
3
|
+
import { resolveCredentials, postJson, getJson } from './chunk-S3NYLI2P.js';
|
|
4
|
+
import './chunk-6Y5RUTHO.js';
|
|
5
5
|
import { detectActiveSession } from './chunk-IP7BIBXJ.js';
|
|
6
|
-
import './chunk-
|
|
6
|
+
import './chunk-3NSNIIBE.js';
|
|
7
7
|
import { sanitizeTerminal } from './chunk-WUYTWNMA.js';
|
|
8
8
|
import { resolveRepoIdentity } from './chunk-JXYVA45C.js';
|
|
9
9
|
import './chunk-4KSQKQXE.js';
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import { createRequire } from 'node:module';
|
|
3
|
-
import { itemLabel, runWorkPr, WorkPrCommandError } from './chunk-
|
|
4
|
-
import { resolveCredentials } from './chunk-
|
|
5
|
-
import './chunk-
|
|
3
|
+
import { itemLabel, runWorkPr, WorkPrCommandError } from './chunk-YU3VKZ5F.js';
|
|
4
|
+
import { resolveCredentials } from './chunk-S3NYLI2P.js';
|
|
5
|
+
import './chunk-6Y5RUTHO.js';
|
|
6
6
|
import './chunk-IP7BIBXJ.js';
|
|
7
|
-
import './chunk-
|
|
7
|
+
import './chunk-3NSNIIBE.js';
|
|
8
8
|
import './chunk-WUYTWNMA.js';
|
|
9
9
|
import './chunk-JXYVA45C.js';
|
|
10
10
|
import './chunk-4KSQKQXE.js';
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import { createRequire } from 'node:module';
|
|
3
|
-
export { WorkPrCommandError, itemLabel, runWorkPr } from './chunk-
|
|
4
|
-
import './chunk-
|
|
3
|
+
export { WorkPrCommandError, itemLabel, runWorkPr } from './chunk-YU3VKZ5F.js';
|
|
4
|
+
import './chunk-6Y5RUTHO.js';
|
|
5
5
|
import './chunk-IP7BIBXJ.js';
|
|
6
|
-
import './chunk-
|
|
6
|
+
import './chunk-3NSNIIBE.js';
|
|
7
7
|
import './chunk-WUYTWNMA.js';
|
|
8
8
|
import './chunk-JXYVA45C.js';
|
|
9
9
|
import './chunk-4KSQKQXE.js';
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@outerlayer/cli",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.17.0",
|
|
4
4
|
"description": "OuterLayer CLI — commands: init, connect, doctor, login, logout, sync, daemon (alias: watch), emit, work, runner, hooks, mcp, import, context. Capture and sync coding-agent sessions, and record proof of factory work.",
|
|
5
5
|
"license": "Apache-2.0",
|
|
6
6
|
"author": "Magu Studios, Inc.",
|
|
@@ -1,13 +1,15 @@
|
|
|
1
1
|
---
|
|
2
|
-
name: amend
|
|
2
|
+
name: outerlayer-amend
|
|
3
3
|
description: >
|
|
4
4
|
Answer the review threads waiting on an agent on an open pull request: read each
|
|
5
5
|
thread a person handed to an agent, fix what it says on the pull request's branch,
|
|
6
6
|
reply on the thread with a replacement artifact or a sentence, and push. Use when a
|
|
7
7
|
work item has threads waiting on an agent, or when asked to "answer the review" or
|
|
8
|
-
"fix what the reviewer failed". Invoke with /amend.
|
|
8
|
+
"fix what the reviewer failed". Invoke with /outerlayer-amend.
|
|
9
9
|
---
|
|
10
10
|
|
|
11
|
+
Run the CLI as `outerlayer`. If that command is not on PATH, run `npx -y @outerlayer/cli` with the same arguments. Every `outerlayer ...` command below follows this rule.
|
|
12
|
+
|
|
11
13
|
Answer every thread waiting on an agent on one work item's pull request, then
|
|
12
14
|
stop. A work item has one general thread and one thread per acceptance
|
|
13
15
|
criterion. A person's fail on the general thread leaves it waiting on an agent.
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
---
|
|
2
|
-
name: outerlayer
|
|
2
|
+
name: outerlayer-cli
|
|
3
3
|
description: >
|
|
4
4
|
Explain what OuterLayer is and how work flows through it: work items, the
|
|
5
5
|
OUTERLAYER_WORK variable, the factory, and building an issue or specifying one.
|
|
@@ -9,6 +9,8 @@ description: >
|
|
|
9
9
|
review.
|
|
10
10
|
---
|
|
11
11
|
|
|
12
|
+
Run the CLI as `outerlayer`. If that command is not on PATH, run `npx -y @outerlayer/cli` with the same arguments. Every `outerlayer ...` command below follows this rule.
|
|
13
|
+
|
|
12
14
|
OuterLayer is a software factory. An issue goes in. A reviewed and verified
|
|
13
15
|
pull request comes out, with the evidence that backs it. An agent builds it in
|
|
14
16
|
this repository, on the machine it already runs on.
|
|
@@ -34,9 +36,9 @@ from the output of `outerlayer work build`.
|
|
|
34
36
|
instead. With `--local`, the person builds it on their own machine with
|
|
35
37
|
`OUTERLAYER_WORK=<number> claude "/build"`.
|
|
36
38
|
4. `outerlayer emit artifact <file> --caption "<what it shows>"` attaches a
|
|
37
|
-
screenshot, recording, report or log as evidence. The `
|
|
39
|
+
screenshot, recording, report or log as evidence. The `outerlayer-evidence`
|
|
38
40
|
skill says what to capture.
|
|
39
|
-
5. `/amend` answers the review threads a person handed to an agent.
|
|
41
|
+
5. `/outerlayer-amend` answers the review threads a person handed to an agent.
|
|
40
42
|
|
|
41
43
|
## Several repositories
|
|
42
44
|
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
---
|
|
2
|
-
name:
|
|
2
|
+
name: outerlayer-evidence
|
|
3
3
|
description: >
|
|
4
4
|
Emit artifacts — screenshots, recordings, reports, logs — as proof that a
|
|
5
5
|
change works, bound to the pull request via `outerlayer emit artifact`.
|
|
@@ -8,6 +8,8 @@ description: >
|
|
|
8
8
|
works", and in CI steps that produce verifiable output.
|
|
9
9
|
---
|
|
10
10
|
|
|
11
|
+
Run the CLI as `outerlayer`. If that command is not on PATH, run `npx -y @outerlayer/cli` with the same arguments. Every `outerlayer ...` command below follows this rule.
|
|
12
|
+
|
|
11
13
|
An artifact is an exhibit: evidence *of* a specific change, anchored to the
|
|
12
14
|
pull request and rendered in its evidence comment. Emit the few exhibits the
|
|
13
15
|
spec asks for — a reviewer should see the change working, not a gallery.
|
|
@@ -98,7 +100,7 @@ Emit the review report, an HTML file, as a report artifact with no `--for`:
|
|
|
98
100
|
|
|
99
101
|
outerlayer emit artifact review.html --caption "Review of the change and what it found"
|
|
100
102
|
|
|
101
|
-
Then run `outerlayer sync
|
|
103
|
+
Then run `outerlayer sync`. It prints a line for the report that ends with its link (`outerlayer sync --json` lists them under `uploadedArtifacts`). Take the link from that line. If `sync` printed no line for the report, another sync already uploaded it: run `outerlayer sync --link <the artifact id>`, with the id `emit artifact` printed. Never build the link by hand, and never link a pull request comment. Record the review's verdict on the `code-review` check that `outerlayer init` writes, with that link as its proof:
|
|
102
104
|
|
|
103
105
|
outerlayer emit code-review --item "$OUTERLAYER_WORK" --result pass --link <the report's deep link>
|
|
104
106
|
|
|
@@ -108,7 +110,7 @@ Use `--result fail` when the review left a finding unfixed. Record it once. Outs
|
|
|
108
110
|
|
|
109
111
|
Bind the judge's report on each criterion, an HTML file, with `--for acceptance-criteria`. The item page links it at the top of its Criteria tab for the reviewer. Emit it only when the item has recorded criteria.
|
|
110
112
|
|
|
111
|
-
Then run `outerlayer sync`,
|
|
113
|
+
Then run `outerlayer sync`, take the report's deep link from the line it prints the same way, and record the judge's verdict on the `acceptance-criteria` check that `outerlayer init` writes:
|
|
112
114
|
|
|
113
115
|
outerlayer emit acceptance-criteria --item "$OUTERLAYER_WORK" --result pass --link <the report's deep link>
|
|
114
116
|
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
---
|
|
2
|
-
name:
|
|
2
|
+
name: outerlayer-findings
|
|
3
3
|
description: >
|
|
4
4
|
Records factory problems: anything in a repository's instructions, tests, tooling or
|
|
5
5
|
local setup that cost an agent time and was not caused by its own change. Use when
|
|
@@ -12,6 +12,8 @@ description: >
|
|
|
12
12
|
`outerlayer emit finding` command.
|
|
13
13
|
---
|
|
14
14
|
|
|
15
|
+
Run the CLI as `outerlayer`. If that command is not on PATH, run `npx -y @outerlayer/cli` with the same arguments. Every `outerlayer ...` command below follows this rule.
|
|
16
|
+
|
|
15
17
|
## What this is for
|
|
16
18
|
|
|
17
19
|
A finding is a problem in the factory, not in the change: an instruction
|
|
@@ -88,17 +90,24 @@ server join a finding to a known problem without asking you.
|
|
|
88
90
|
|
|
89
91
|
## Time lost
|
|
90
92
|
|
|
91
|
-
|
|
92
|
-
|
|
93
|
+
Every finding records the time it cost, read from two events of your session
|
|
94
|
+
or its subagents. Never estimate minutes yourself.
|
|
95
|
+
|
|
96
|
+
- Start: `--started-at <id>`, else the first tool output that shows your
|
|
97
|
+
`--error` text. Copy `--error` exactly as the output printed it.
|
|
98
|
+
- End: `--ended-at <id>`, else the newest event. Record as soon as you are
|
|
99
|
+
past the problem, and the default is right.
|
|
100
|
+
|
|
101
|
+
With no start found, nothing is stored and the recent events are listed:
|
|
93
102
|
|
|
94
103
|
```
|
|
95
|
-
e118
|
|
104
|
+
e118 14:02:11 agent: Bash: yarn test
|
|
105
|
+
a5c9fb78:e42 14:09:30 user: result: FAIL src/app.test.ts
|
|
96
106
|
```
|
|
97
107
|
|
|
98
|
-
Run it again with `--started-at
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
events still counts toward how often the problem occurs.
|
|
108
|
+
Run it again with `--started-at`. A prefixed id is a subagent's event.
|
|
109
|
+
`--find <text>` lists older events containing the text. `--untimed` is only
|
|
110
|
+
for a problem that cost no time here. Never pipe the command through `tail`.
|
|
102
111
|
|
|
103
112
|
## Linking a finding to a problem
|
|
104
113
|
|
|
@@ -129,33 +138,28 @@ outerlayer emit finding --id <short-id> --category <category> \
|
|
|
129
138
|
--title "<one sentence>" --file <path> [--line <n>] --where "<what you were doing>" \
|
|
130
139
|
[--cause "<cause>"] [--detail "<text>"] [--suggestion "<text>"] \
|
|
131
140
|
[--command "<cmd>"] [--error "<first error line>"] [--test "<name>"] [--symbol "<function>"] \
|
|
132
|
-
[--started-at <event id> --ended-at <event id>] \
|
|
141
|
+
[--started-at <event id>] [--ended-at <event id>] \
|
|
133
142
|
[--problem <id> --link-reason "<why>" | --new]
|
|
134
143
|
```
|
|
135
144
|
|
|
136
145
|
Inside a recorded session the work item is found automatically. Outside one,
|
|
137
146
|
add `--item <number>`.
|
|
138
147
|
|
|
139
|
-
Examples
|
|
148
|
+
Examples. The ones with no `--error` name their start:
|
|
140
149
|
|
|
141
150
|
```bash
|
|
142
|
-
outerlayer emit finding --id worktree-hooks --category context \
|
|
143
|
-
--title "No document says a fresh worktree has no git hooks until yarn prepare runs" \
|
|
144
|
-
--file AGENTS.md --rule-path AGENTS.md --rule-relation missing \
|
|
145
|
-
--where "first push from a new worktree"
|
|
146
|
-
|
|
147
151
|
outerlayer emit finding --id stale-path --category context \
|
|
148
152
|
--title "The build skill names a directory that no longer exists" \
|
|
149
153
|
--file .outerlayer/skills/build/SKILL.md --line 42 \
|
|
150
154
|
--rule-path .outerlayer/skills/build/SKILL.md --rule-line 42 --rule-relation broken \
|
|
151
155
|
--rule-quote "Read the plan from reports/plan.md" \
|
|
152
|
-
--where "implementation stage"
|
|
156
|
+
--where "implementation stage" --started-at e118
|
|
153
157
|
|
|
154
158
|
outerlayer emit finding --id flaky-refresh --category flaky-test \
|
|
155
159
|
--title "refresh.test.ts fails once, then passes on rerun" \
|
|
156
160
|
--file apps/tenant-dashboard/src/lib/system/pr-session-comment/__tests__/refresh.test.ts \
|
|
157
161
|
--test "refreshes the comment after a push" \
|
|
158
|
-
--where "vitest run <file> failed, then passed with no change"
|
|
162
|
+
--where "vitest run <file> failed, then passed with no change" --started-at e204
|
|
159
163
|
|
|
160
164
|
outerlayer emit finding --id gate-skip --category tooling \
|
|
161
165
|
--title "The pre-push gate prints green when a step was skipped" \
|
|
@@ -164,19 +168,10 @@ outerlayer emit finding --id gate-skip --category tooling \
|
|
|
164
168
|
--cause "the skip path returns before the summary is computed" \
|
|
165
169
|
--where "expected a failure, got exit 0"
|
|
166
170
|
|
|
167
|
-
outerlayer emit finding --id shared-db --category environment \
|
|
168
|
-
--title "A peer session reset the shared Supabase project mid-run" \
|
|
169
|
-
--file apps/tenant-dashboard/supabase/config.toml \
|
|
170
|
-
--where "needed a stable database, found it re-seeded"
|
|
171
|
-
|
|
172
171
|
outerlayer emit finding --id null-read --category defect \
|
|
173
172
|
--title "readItem throws on an item with no claim" \
|
|
174
173
|
--file src/lib/work/read.ts --line 88 --symbol readItem \
|
|
175
|
-
--where "reproduce: call readItem on a fresh item"
|
|
176
|
-
|
|
177
|
-
outerlayer emit finding --id slow-hook --category other \
|
|
178
|
-
--title "The session-start hook adds about ten seconds on every launch" \
|
|
179
|
-
--file .husky/post-checkout --where "timed with time(1)"
|
|
174
|
+
--where "reproduce: call readItem on a fresh item" --started-at a5c9fb78:e42
|
|
180
175
|
```
|
|
181
176
|
|
|
182
177
|
To record several at once, write a JSON batch and run
|
|
@@ -207,9 +202,10 @@ To record several at once, write a JSON batch and run
|
|
|
207
202
|
}
|
|
208
203
|
```
|
|
209
204
|
|
|
210
|
-
`startedAt` and `endedAt` are event ids
|
|
211
|
-
|
|
212
|
-
|
|
205
|
+
`startedAt` and `endedAt` are event ids, defaulting as in `emit finding`. A
|
|
206
|
+
finding with no start found stops the batch; `"untimed": true` is the
|
|
207
|
+
exception. `problems` with `linkReason`, and `new: true`, are for a finding
|
|
208
|
+
that needs a choice; give neither and the server decides by key
|
|
213
209
|
or lists candidates. `emit findings` stores the findings that match a key,
|
|
214
210
|
lists the ones that need a choice, and exits with code 3.
|
|
215
211
|
|
package/skill-pack/shipped.json
CHANGED
|
@@ -6,15 +6,20 @@
|
|
|
6
6
|
"78c95632b51600df0cb2e206d843e75789ccba2f80fd8dfab36d16239062b008"
|
|
7
7
|
],
|
|
8
8
|
".outerlayer/skills/build/SKILL.md": [
|
|
9
|
+
"0fe8ee00567a1e8942de27597b0a64588fd4b75abd8fb5cd4998785b3e6c7f2b",
|
|
9
10
|
"5cf9bd75fb1f984f6e6b470d1f1581dc06168abf062448e6f43711fed8f6632a",
|
|
10
11
|
"6177ea457be0d238659640e6d29807708d60d68533ae3ff93af10fb513139ced",
|
|
11
12
|
"77cab8b446fb1aa865710f7cb8356c5334301a942f58f9243766bf1acf1377ad",
|
|
12
13
|
"93953397c31d47a6f1c06edb8ae2190e1d8a3fca20c616deb33991311cee39a8",
|
|
13
14
|
"a6743050c5c387e962ad4264526d9a3c10edf36823e4b6829f200bf79a4e45e7",
|
|
14
15
|
"b0aa9b6962675f772b67a4390c15b6b0100390983d958c656a826a066399f3d0",
|
|
16
|
+
"b95986e95ea3b1ef4202f7f0c00bfcd35865d4fda033b3d6947a5bb9d33cd24c",
|
|
17
|
+
"e9d086f6b989e3a17f14d6dcaacabd438bed861076f9a620fce61accc8fce4fb",
|
|
15
18
|
"f4e1661c6f87d7ff6d23c6182530fa0a9cb87c4dc3f31e48f2be11f32ebb2c00"
|
|
16
19
|
],
|
|
17
20
|
".outerlayer/skills/build/references/agent-briefs.md": [
|
|
21
|
+
"09bfa482e1d7f8ceabd29a6e23e74641f3ff6e655126362d27a05df422c584ed",
|
|
22
|
+
"20eece295abc7ccecd289ce6d408dd3c4c038e2cbfdb3acdba069bd0ccb86496",
|
|
18
23
|
"3c875a4f287f574eea954c6daa52b17529cdeba8ec4007d78084d911350d1218",
|
|
19
24
|
"7c2a651e7c827d8e3fb9df889d3776b552eb02d315db5ace27d2baad78aab6a5"
|
|
20
25
|
],
|
|
@@ -22,19 +27,24 @@
|
|
|
22
27
|
"62db8f6d77f31ca25a9071c05429e0f639f9b2bdd7f7cb04cb14a1b0db509537"
|
|
23
28
|
],
|
|
24
29
|
".outerlayer/skills/build/references/evidence.md": [
|
|
30
|
+
"557d62885555606d64e86cc9fb16a5e2ee0f2257e6fe2aeec5a294292d57cecf",
|
|
25
31
|
"ceff5488bae31198ed4738ae1a230c0119f973ced439dac360eba6e24e1604f4",
|
|
26
32
|
"f27502610358e436e7ffb61d4fd281289e162f6de6b2c11396f17b2fa63802c9"
|
|
27
33
|
],
|
|
28
34
|
".outerlayer/skills/build/references/release.md": [
|
|
29
35
|
"0b0af40c82473cf192f697537ed5a84801a14e79bb11790d72226d7f7f49cca0",
|
|
30
36
|
"1113259bdf7d8c28edcbdb9b4c83c2f2bd4c5eaf817cf30bf428478ff91694e9",
|
|
37
|
+
"1d0e000433676a39c7ac4fbf3e92b1fe4235b10240c09f87ec0003f3c8d7956e",
|
|
31
38
|
"1f4fe97ca8f11d6681db5734f3103af5ea175a9472ff1d38b10cb463f4956a6a",
|
|
32
39
|
"4687f56bcec766f1926d58a208418f800a1727c073b5e6047b40e3aaac2bd6c9",
|
|
40
|
+
"4cfc10bc9d380e67b0ec5c243eb5f2c63f03ee3348d7956a45467620acc656fc",
|
|
33
41
|
"81a764eb317fcb4672bedd35e7b9aa68d1c0b73f82fc2dfa03e5a78758db8f14",
|
|
34
42
|
"985e02b98105b00c356014e003b2d60e9c458c3dcbeef7378274ccb84af031fc"
|
|
35
43
|
],
|
|
36
44
|
".outerlayer/skills/build/references/review-briefs.md": [
|
|
37
|
-
"2c8b436795b583a61aa6f98f48611db554f0dd52b27a9ab748a7db5f96526aec"
|
|
45
|
+
"2c8b436795b583a61aa6f98f48611db554f0dd52b27a9ab748a7db5f96526aec",
|
|
46
|
+
"8f04427895a01c1b86f1ee2caab983163201c75fafe4c0feba02e8f665089aac",
|
|
47
|
+
"a9af0ddd115496480702743e628be3206426c40563f03aa4bb1714176ff70146"
|
|
38
48
|
],
|
|
39
49
|
".outerlayer/skills/build/references/review-loop.md": [
|
|
40
50
|
"155ab732ccf4c25f000853e98a27a3d2f3a022c75979601bb71d86f07983216d",
|
|
@@ -43,19 +53,23 @@
|
|
|
43
53
|
"9d4d2e5e0307ea8c38cf885cd67d06a939b7fc2bed65f5080ca9610178949d74"
|
|
44
54
|
],
|
|
45
55
|
".outerlayer/skills/build/scripts/criterion-citations.mjs": [
|
|
46
|
-
"0902118ec216182f9d0ba0f6c7966306ad6891d8e846022123d3f86aaf175fce"
|
|
56
|
+
"0902118ec216182f9d0ba0f6c7966306ad6891d8e846022123d3f86aaf175fce",
|
|
57
|
+
"aa9446b29c7c8fa4d312b8ec54b2a2a154f52708691a7eaf61e3a1b67ae6a9ef"
|
|
47
58
|
],
|
|
48
59
|
".outerlayer/skills/build/scripts/record-criteria.mjs": [
|
|
49
60
|
"36f19e730bc220fa21622b3bb0a306999f038b8220a0a07a1efe21ec0f748729",
|
|
50
61
|
"596e9a78e62cbea040a3bf428cd54bf59687e9e89001fad719304f88d03ca2ea",
|
|
51
|
-
"64de9445087b247b0781a4e6e025ef97b1259ce1c91819bf541decc26b8f8400"
|
|
62
|
+
"64de9445087b247b0781a4e6e025ef97b1259ce1c91819bf541decc26b8f8400",
|
|
63
|
+
"f3d6ed58118209d8b169d00b4283d48f25d3cac5121d2e29364274dd36ed113a"
|
|
52
64
|
],
|
|
53
65
|
".outerlayer/skills/spec/SKILL.md": [
|
|
54
66
|
"71e81fabf353ad6117c54e061868538bf00066b78c2528f5a8364445d1def02e",
|
|
67
|
+
"82f75a53c591f94615dc27c099e94fcf95e2a09b95aceb38b9022d5f7f054cb0",
|
|
55
68
|
"9039ae30d4e836b5c5cfba4a14344e46fd13694ae9e4d88e750abce34dfcd9e6"
|
|
56
69
|
],
|
|
57
70
|
".outerlayer/skills/writing-specs/SKILL.md": [
|
|
58
71
|
"a956aac4249118a058c4327c5751472883588720950d4a96f80c7e91f454bef9",
|
|
72
|
+
"dbadb39cba5dae936e7c4b97cb852c59072e4a60e44caec01b128a045c1be090",
|
|
59
73
|
"eb8aa95f5e76a46ae9bf340989fb40e470fd750ded791ba80b5f8c5c325513e5"
|
|
60
74
|
],
|
|
61
75
|
".outerlayer/skills/writing-specs/references/agents-snippet.md": [
|
|
@@ -65,10 +79,12 @@
|
|
|
65
79
|
"b00f5970b568159ca0bfbc75c3834938749ad5e2e73a80769d88bbe3c8c26737"
|
|
66
80
|
],
|
|
67
81
|
".outerlayer/validators/acceptance-criteria.yaml": [
|
|
68
|
-
"3b2054aa1d4bd9f7441e88eec1a3bdf61b61ad00efa79736e26a5dd601d43910"
|
|
82
|
+
"3b2054aa1d4bd9f7441e88eec1a3bdf61b61ad00efa79736e26a5dd601d43910",
|
|
83
|
+
"d9bef4bf0962015c662f1bc16d86807414dfc6e095f99aa3727bc4613676ab2a"
|
|
69
84
|
],
|
|
70
85
|
".outerlayer/validators/code-review.yaml": [
|
|
71
86
|
"05041976e4d84d6256ed88995ea4fd1566abc6d3a9574863065cf855dcafcf70",
|
|
87
|
+
"40653bc6b170f28be1df410d9d8e270987184a2d04cbec588ae07f50afa59ba3",
|
|
72
88
|
"fbdf0baca0064b09e47f5984afc322d582accd142c3377c06622bc6567b0e98c"
|
|
73
89
|
]
|
|
74
90
|
}
|
|
@@ -8,6 +8,8 @@ description: >
|
|
|
8
8
|
disable-model-invocation: true
|
|
9
9
|
---
|
|
10
10
|
|
|
11
|
+
Run the CLI as `outerlayer`. If that command is not on PATH, run `npx -y @outerlayer/cli` with the same arguments. Every `outerlayer ...` command below follows this rule.
|
|
12
|
+
|
|
11
13
|
Build one issue into an evidenced pull request. `/spec` writes and gets
|
|
12
14
|
approval for the issue. This skill builds it. It never writes the spec.
|
|
13
15
|
|
|
@@ -82,7 +84,7 @@ These bind the orchestrator in every phase. Rule 5 also binds every spawned agen
|
|
|
82
84
|
report bodies. Delete both at the end of phase 6.
|
|
83
85
|
Once a pull request exists, read `outerlayer work threads --item
|
|
84
86
|
"$OUTERLAYER_WORK" --json`. Each thread with `waitingOn` of `agent` holds a
|
|
85
|
-
person's comment. Answer each before the run ends, as the `amend` skill does.
|
|
87
|
+
person's comment. Answer each before the run ends, as the `outerlayer-amend` skill does.
|
|
86
88
|
5. **A session never records a pass or fail on an artifact.** It emits
|
|
87
89
|
artifacts. A person decides pass or fail. A build records two results,
|
|
88
90
|
both verdicts of its own agents: its review's, on the `code-review`
|
|
@@ -106,6 +108,10 @@ These bind the orchestrator in every phase. Rule 5 also binds every spawned agen
|
|
|
106
108
|
state file. Past three quarters, say where the count stands in the status
|
|
107
109
|
line. A run that would exceed the budget stops and lists what is left
|
|
108
110
|
unverified. The review phase also holds a limit on agents in flight.
|
|
111
|
+
10. **Factory problems are findings.** Every agent records the problems it
|
|
112
|
+
hit outside the change with the `outerlayer-findings` skill, as its brief
|
|
113
|
+
says. The orchestrator records only the ones it hit itself. The final
|
|
114
|
+
report lists every finding by id.
|
|
109
115
|
|
|
110
116
|
## Phases
|
|
111
117
|
|
|
@@ -61,6 +61,12 @@ report with the command, and leave that step undone.
|
|
|
61
61
|
|
|
62
62
|
A session never records a pass or fail on an artifact.
|
|
63
63
|
|
|
64
|
+
A problem in the repository's instructions, tests, tooling or setup that
|
|
65
|
+
cost you time, and that the change did not cause, is a finding. Record it with
|
|
66
|
+
the `outerlayer-findings` skill as soon as you are past it, under an id that
|
|
67
|
+
starts with your stage, such as `implement-tooling-1`. End your report with a
|
|
68
|
+
"Factory problems" section that lists each id and title.
|
|
69
|
+
|
|
64
70
|
Write your full report to the path this brief names. Then return at most ten
|
|
65
71
|
lines. Anything you leave out of the file is lost to the next stage.
|
|
66
72
|
|
|
@@ -218,7 +224,7 @@ ten lines naming the CI conclusion, the mergeability and every failed check.
|
|
|
218
224
|
|
|
219
225
|
## Evidence brief
|
|
220
226
|
|
|
221
|
-
The shared rules apply, and the
|
|
227
|
+
The shared rules apply, and the outerlayer-evidence skill governs the emit
|
|
222
228
|
mechanics. Your inputs are the issue, the pull request number, the criteria
|
|
223
229
|
that declare a proof form, and the instructions-file pointer.
|
|
224
230
|
|
|
@@ -12,7 +12,7 @@ earlier phase from the state file.
|
|
|
12
12
|
The orchestrator does not run the app, drive a browser or emit an artifact
|
|
13
13
|
itself. Spawn one evidence agent in a fresh context on the Evidence brief, with
|
|
14
14
|
the issue, the pull request number, the criteria that declare a proof form, the
|
|
15
|
-
instructions-file pointer and the
|
|
15
|
+
instructions-file pointer and the outerlayer-evidence skill.
|
|
16
16
|
|
|
17
17
|
A criterion that declares `proof: screenshot` needs a screenshot bound to its
|
|
18
18
|
id. One that declares `proof: video` needs a video. A screenshot never
|
|
@@ -23,7 +23,7 @@ no telemetry, round tables or reviewer roles. Those go in the final report.
|
|
|
23
23
|
|
|
24
24
|
How to open it, and how to link it to the work item, depends on whether this is
|
|
25
25
|
a runner build or a local session. Read
|
|
26
|
-
`.outerlayer/skills/outerlayer/references/open-pull-request.md` and follow the
|
|
26
|
+
`.outerlayer/skills/outerlayer-cli/references/open-pull-request.md` and follow the
|
|
27
27
|
steps for where this build runs.
|
|
28
28
|
|
|
29
29
|
Run the reader pass on the title and body before opening, and after any later
|
|
@@ -48,16 +48,18 @@ request before going on.
|
|
|
48
48
|
|
|
49
49
|
## Record the code review
|
|
50
50
|
|
|
51
|
-
Once the pull request is linked, run `outerlayer sync`.
|
|
52
|
-
report
|
|
53
|
-
|
|
54
|
-
|
|
51
|
+
Once the pull request is linked, run `outerlayer sync`. It prints a line for
|
|
52
|
+
the review report that ends with its link. Take the link from that line. If
|
|
53
|
+
`sync` printed no line for the report, another sync already uploaded it: run
|
|
54
|
+
`outerlayer sync --link <the artifact id>`, with the id `emit artifact`
|
|
55
|
+
printed. Never build the link by hand, and never link a pull request comment.
|
|
56
|
+
Then record the review's verdict on the `code-review` check, once:
|
|
55
57
|
|
|
56
58
|
outerlayer emit code-review --item "$OUTERLAYER_WORK" --result pass --link <the report's deep link>
|
|
57
59
|
|
|
58
60
|
Record `--result fail` when the review ended with a blocking finding unfixed.
|
|
59
|
-
When
|
|
60
|
-
|
|
61
|
+
When neither command gives a link, stop and name it as a blocker in the final
|
|
62
|
+
report. Never record the result with another link.
|
|
61
63
|
|
|
62
64
|
## Judge the criteria
|
|
63
65
|
|
|
@@ -83,11 +85,11 @@ that is missing in the evidence phase.
|
|
|
83
85
|
|
|
84
86
|
## Record the criteria verdict
|
|
85
87
|
|
|
86
|
-
Once the judge's report is synced,
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
the link by hand, and never link a pull request comment.
|
|
90
|
-
judge's verdict on the `acceptance-criteria` check, once:
|
|
88
|
+
Once the judge's report is synced, take its deep link from the line `sync`
|
|
89
|
+
printed for it. If `sync` printed no line for the report, run
|
|
90
|
+
`outerlayer sync --link <the artifact id>`, with the id `emit artifact`
|
|
91
|
+
printed. Never build the link by hand, and never link a pull request comment.
|
|
92
|
+
Then record the judge's verdict on the `acceptance-criteria` check, once:
|
|
91
93
|
|
|
92
94
|
outerlayer emit acceptance-criteria --item "$OUTERLAYER_WORK" --result pass --link <the judge report's deep link>
|
|
93
95
|
|
|
@@ -38,6 +38,12 @@ git.
|
|
|
38
38
|
Never ask the user a question. If you need a ruling, state your assumption in
|
|
39
39
|
your report and continue.
|
|
40
40
|
|
|
41
|
+
A problem in the repository's instructions, tests, tooling or setup that
|
|
42
|
+
cost you time, and that the change did not cause, is a finding. Record it with
|
|
43
|
+
the `outerlayer-findings` skill as soon as you are past it, under an id that
|
|
44
|
+
starts with your stage, such as `implement-tooling-1`. End your report with a
|
|
45
|
+
"Factory problems" section that lists each id and title.
|
|
46
|
+
|
|
41
47
|
You are a cold adversarial reviewer. You know nothing about how this change
|
|
42
48
|
was built, and that is deliberate. Judge only the branch diff, the issue (its
|
|
43
49
|
criteria, when it has them, are the definition of done), and the
|