@outerlayer/cli 0.32.0 → 0.33.0-next.20261021171323

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (93) hide show
  1. package/README.md +15 -1
  2. package/dist/{agent-setup-E7CMDUR5.js → agent-setup-NSUX64RU.js} +10 -10
  3. package/dist/{artifact-link-cmd-VY6OM7S5.js → artifact-link-cmd-IGVFGHC2.js} +2 -2
  4. package/dist/{build-7QD3VJ6U.js → build-HU24C46Z.js} +3 -2
  5. package/dist/build-info.json +1 -1
  6. package/dist/{builder-REQJGZJP.js → builder-VFREWHZA.js} +5 -4
  7. package/dist/{check-COMHCLXW.js → check-3TQJDGKM.js} +29 -28
  8. package/dist/{chunk-HSUUTD4E.js → chunk-3H7NZPYG.js} +1 -1
  9. package/dist/{chunk-IWFYKNAO.js → chunk-3WW2TL7V.js} +45 -2
  10. package/dist/{chunk-SJZL5F3F.js → chunk-3Z3MPR55.js} +1 -51
  11. package/dist/{chunk-4I3ZDQFU.js → chunk-54GBOMDW.js} +2 -2
  12. package/dist/{chunk-G2RRBBOX.js → chunk-6C3ZVE62.js} +1 -1
  13. package/dist/{chunk-XKZPL3GE.js → chunk-7LP3F2QH.js} +4 -4
  14. package/dist/{chunk-JFLVUA43.js → chunk-AR6UB2BP.js} +3 -3
  15. package/dist/{chunk-Z7HAIZ6X.js → chunk-BSHUTMXV.js} +54 -5
  16. package/dist/{chunk-SXJVL7NS.js → chunk-BXA6JLHQ.js} +2 -2
  17. package/dist/{chunk-JH2AMJ4K.js → chunk-CI6PRMWZ.js} +2 -2
  18. package/dist/{chunk-NIS2PIS4.js → chunk-D73OLAYE.js} +3 -3
  19. package/dist/{emit-artifact-cmd-NCK3VCDM.js → chunk-EKMMX5A5.js} +8 -36
  20. package/dist/{chunk-V6IYYQU3.js → chunk-FE3RTGJN.js} +2 -2
  21. package/dist/{chunk-VIHQLW4L.js → chunk-G7QBSH3X.js} +9 -8
  22. package/dist/{chunk-XB7TRWI2.js → chunk-GI6LOIHS.js} +4 -4
  23. package/dist/{chunk-V36AOTBP.js → chunk-GKNF4D62.js} +331 -20
  24. package/dist/{chunk-4XPAQXJF.js → chunk-H6Y5D6J7.js} +6 -6
  25. package/dist/{chunk-IGIGNYZK.js → chunk-HPOW2VCB.js} +4 -4
  26. package/dist/{chunk-3DSC2FN3.js → chunk-JKXTG3BV.js} +2 -2
  27. package/dist/{chunk-ZUOPFE22.js → chunk-JUXATN46.js} +1 -1
  28. package/dist/{chunk-FKNOPMUD.js → chunk-KQON2T4A.js} +4 -4
  29. package/dist/{chunk-BCWVTWS7.js → chunk-KURUM765.js} +4 -4
  30. package/dist/{chunk-3PYMMGYO.js → chunk-LAS3DOTW.js} +10 -10
  31. package/dist/chunk-LK2S5XZH.js +99 -0
  32. package/dist/{chunk-5TNEVWFJ.js → chunk-LQFDTQC2.js} +2 -2
  33. package/dist/{chunk-7F2VPHP7.js → chunk-LSMF3EET.js} +9 -9
  34. package/dist/{chunk-WRW6QCI6.js → chunk-NHXJU7CM.js} +2 -2
  35. package/dist/{chunk-ZWBRHH3L.js → chunk-NYKZC6HU.js} +3 -3
  36. package/dist/{chunk-XAV6XCI2.js → chunk-OX7CHZTJ.js} +7 -7
  37. package/dist/{chunk-XTKH5VAC.js → chunk-QCDVKCHA.js} +2 -2
  38. package/dist/{chunk-U4HMGT3L.js → chunk-SOTJ2V3A.js} +5 -5
  39. package/dist/{chunk-CVGMB4N7.js → chunk-TI5Y242B.js} +13 -13
  40. package/dist/{chunk-KCB6V5XH.js → chunk-VXYPD33W.js} +5 -5
  41. package/dist/{chunk-HJUGOAM7.js → chunk-WXEPMPHK.js} +1 -1
  42. package/dist/{chunk-UAFMC3PL.js → chunk-XRQ7DABQ.js} +1 -1
  43. package/dist/{chunk-AKKVPUGK.js → chunk-YW4PEGLN.js} +1 -1
  44. package/dist/{chunk-QDDPVBIS.js → chunk-ZAJKEHIE.js} +2 -2
  45. package/dist/{chunk-2JPVI45I.js → chunk-ZZWWKBLL.js} +3 -2
  46. package/dist/{claude-launcher-IG7GKYIT.js → claude-launcher-RNMUZZ3Y.js} +5 -5
  47. package/dist/{cli-DLUADCTG.js → cli-YQ64SSV3.js} +144 -89
  48. package/dist/{command-JRWYFDNM.js → command-RFVCDSJV.js} +19 -18
  49. package/dist/{connect-cmd-K73AOVUR.js → connect-cmd-HVHPNVAJ.js} +8 -8
  50. package/dist/{container-start-4RJRBPVB.js → container-start-DP3N72CK.js} +20 -19
  51. package/dist/{context-cleanup-D5EGQHQV.js → context-cleanup-VSDT77BZ.js} +3 -3
  52. package/dist/{control-plane-launch-JCUNTTC3.js → control-plane-launch-DHMD5WBU.js} +6 -6
  53. package/dist/{dist-BE3LYGNH.js → dist-MKY2BSYN.js} +2 -2
  54. package/dist/{docker-CVRCHNYC.js → docker-6G6IF4YO.js} +5 -4
  55. package/dist/{doctor-A3A4X2HJ.js → doctor-ZE4LA7EZ.js} +21 -20
  56. package/dist/emit-artifact-cmd-YRRXCZAI.js +43 -0
  57. package/dist/{emit-cmd-PSD7AAKJ.js → emit-cmd-T7NIBSF3.js} +6 -6
  58. package/dist/{emit-criteria-cmd-GTCZWV4B.js → emit-criteria-cmd-PSQORVHS.js} +9 -9
  59. package/dist/emit-demo-cmd-RJPSISCC.js +888 -0
  60. package/dist/{emit-finding-cmd-OUG72OQA.js → emit-finding-cmd-6FVW3GGK.js} +10 -10
  61. package/dist/{emit-result-cmd-YQ5DZMMR.js → emit-result-cmd-PFQ6HSVN.js} +12 -12
  62. package/dist/{emit-step-cmd-QJXSHSQF.js → emit-step-cmd-U32Y4PZJ.js} +10 -10
  63. package/dist/{findings-cmd-DYDEHJFI.js → findings-cmd-AMYNXO3S.js} +10 -10
  64. package/dist/{fleet-readiness-JEQ5ITV6.js → fleet-readiness-7ROJ54ZF.js} +8 -8
  65. package/dist/{governing-source-JSYW4RCL.js → governing-source-DYJQCHKU.js} +13 -13
  66. package/dist/{hook-fast-UFHR6EKZ.js → hook-fast-WQQYEXO5.js} +1 -1
  67. package/dist/index.js +4 -4
  68. package/dist/{init-CSXI3OQH.js → init-CHWFDK23.js} +20 -19
  69. package/dist/{init-SYNDV44H.js → init-QDUIHSTK.js} +20 -19
  70. package/dist/{init-cmd-ALBPEG7I.js → init-cmd-STCU6RGY.js} +18 -18
  71. package/dist/{init-update-PMDRKPA2.js → init-update-OIFOUIAN.js} +17 -17
  72. package/dist/{layout-3ISIED6A.js → layout-OQ7EJUMH.js} +4 -4
  73. package/dist/{login-browser-NTVVDJF7.js → login-browser-KP7YVYTN.js} +2 -2
  74. package/dist/{loop-XDJYLT4D.js → loop-NUW7SSZY.js} +29 -28
  75. package/dist/{machine-GC4MZB5W.js → machine-BJ7TT3B7.js} +19 -18
  76. package/dist/{machine-skills-I4DB2CP3.js → machine-skills-XWWYFNOZ.js} +4 -4
  77. package/dist/{runner-identity-D3XUB36T.js → runner-identity-FL67WQIA.js} +5 -4
  78. package/dist/{runner-key-7QNJNPQ6.js → runner-key-YHAJFEGN.js} +20 -19
  79. package/dist/{session-sender-S6KG6VOM.js → session-sender-PHQ6PJVD.js} +13 -13
  80. package/dist/{spec-cmd-4RD3A55B.js → spec-cmd-SAMHN5FU.js} +10 -10
  81. package/dist/{starter-pack-2WFNRGFA.js → starter-pack-6O7F6P7C.js} +5 -5
  82. package/dist/{status-ZR2N44KU.js → status-QWLX2CCV.js} +23 -22
  83. package/dist/{sync-cmd-NISS7HJJ.js → sync-cmd-O6UIF4QJ.js} +12 -12
  84. package/dist/{watch-VSTJUIRH.js → watch-5HMOSQ4Z.js} +12 -12
  85. package/dist/{work-claim-cmd-27OJUZ56.js → work-claim-cmd-6W7BW4O6.js} +12 -12
  86. package/dist/{work-cmd-B7YCAK5M.js → work-cmd-3G26E3NL.js} +10 -10
  87. package/dist/{work-comment-cmd-2X55NLNL.js → work-comment-cmd-S6EGHGHL.js} +10 -10
  88. package/dist/{work-logs-cmd-2CE5B2DP.js → work-logs-cmd-RQILRNHS.js} +10 -10
  89. package/dist/{work-open-pr-cmd-Q3HZJPSD.js → work-open-pr-cmd-5CDP6KOF.js} +11 -11
  90. package/dist/{work-pr-cmd-MT246E2A.js → work-pr-cmd-D3PJJQOX.js} +10 -10
  91. package/dist/{work-stop-cmd-CWNLRQKE.js → work-stop-cmd-AGZWXGRP.js} +10 -10
  92. package/package.json +1 -1
  93. package/skill-pack/maintained/outerlayer-evidence/SKILL.md +39 -0
@@ -1,12 +1,12 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire } from 'node:module';
3
- export { WorkCommandError, environmentFacts, findLiveItemForIssue, getJson, parsePositiveInt, patchJson, postJson, resolveCredentials, runWorkBuild, runWorkLinkSession, runWorkList, runWorkRemove, runWorkStatus } from './chunk-U4HMGT3L.js';
4
- import './chunk-3DSC2FN3.js';
5
- import './chunk-IGIGNYZK.js';
6
- import './chunk-HSUUTD4E.js';
7
- import './chunk-V36AOTBP.js';
8
- import './chunk-QDDPVBIS.js';
9
- import './chunk-G2RRBBOX.js';
3
+ export { WorkCommandError, environmentFacts, findLiveItemForIssue, getJson, parsePositiveInt, patchJson, postJson, resolveCredentials, runWorkBuild, runWorkLinkSession, runWorkList, runWorkRemove, runWorkStatus } from './chunk-SOTJ2V3A.js';
4
+ import './chunk-JKXTG3BV.js';
5
+ import './chunk-HPOW2VCB.js';
6
+ import './chunk-3H7NZPYG.js';
7
+ import './chunk-GKNF4D62.js';
8
+ import './chunk-ZAJKEHIE.js';
9
+ import './chunk-6C3ZVE62.js';
10
10
  import './chunk-G2JWZDFA.js';
11
11
  import './chunk-ANPNT6PM.js';
12
12
  import './chunk-F3EF56LQ.js';
@@ -15,14 +15,14 @@ import './chunk-APSYTJ6I.js';
15
15
  import './chunk-KP6R7CV3.js';
16
16
  import './chunk-HDSDUTX4.js';
17
17
  import './chunk-BJ3KTMDH.js';
18
- import './chunk-AKKVPUGK.js';
18
+ import './chunk-YW4PEGLN.js';
19
19
  import './chunk-5BHIBJDA.js';
20
20
  import './chunk-CDDED64E.js';
21
21
  import './chunk-RA3O54FC.js';
22
22
  import './chunk-WZBHBH3J.js';
23
23
  import './chunk-CRB3POP4.js';
24
- import './chunk-ZUOPFE22.js';
25
- import './chunk-IWFYKNAO.js';
24
+ import './chunk-JUXATN46.js';
25
+ import './chunk-3WW2TL7V.js';
26
26
  import './chunk-VNVZDWO3.js';
27
27
  import './chunk-XD4ZCMA4.js';
28
28
  import './chunk-MESOOLF4.js';
@@ -1,12 +1,12 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire } from 'node:module';
3
- import { resolveCredentials, postJson, getJson } from './chunk-U4HMGT3L.js';
4
- import { detectActiveSession } from './chunk-3DSC2FN3.js';
5
- import './chunk-IGIGNYZK.js';
6
- import { sanitizeTerminal } from './chunk-HSUUTD4E.js';
7
- import { resolveRepoIdentity } from './chunk-V36AOTBP.js';
8
- import './chunk-QDDPVBIS.js';
9
- import './chunk-G2RRBBOX.js';
3
+ import { resolveCredentials, postJson, getJson } from './chunk-SOTJ2V3A.js';
4
+ import { detectActiveSession } from './chunk-JKXTG3BV.js';
5
+ import './chunk-HPOW2VCB.js';
6
+ import { sanitizeTerminal } from './chunk-3H7NZPYG.js';
7
+ import { resolveRepoIdentity } from './chunk-GKNF4D62.js';
8
+ import './chunk-ZAJKEHIE.js';
9
+ import './chunk-6C3ZVE62.js';
10
10
  import './chunk-G2JWZDFA.js';
11
11
  import { C } from './chunk-ANPNT6PM.js';
12
12
  import { defaultFetch } from './chunk-F3EF56LQ.js';
@@ -15,14 +15,14 @@ import './chunk-APSYTJ6I.js';
15
15
  import './chunk-KP6R7CV3.js';
16
16
  import './chunk-HDSDUTX4.js';
17
17
  import './chunk-BJ3KTMDH.js';
18
- import './chunk-AKKVPUGK.js';
18
+ import './chunk-YW4PEGLN.js';
19
19
  import './chunk-5BHIBJDA.js';
20
20
  import './chunk-CDDED64E.js';
21
21
  import './chunk-RA3O54FC.js';
22
22
  import { parseTrackerNumber, trackerNumberError } from './chunk-WZBHBH3J.js';
23
23
  import './chunk-CRB3POP4.js';
24
- import './chunk-ZUOPFE22.js';
25
- import './chunk-IWFYKNAO.js';
24
+ import './chunk-JUXATN46.js';
25
+ import './chunk-3WW2TL7V.js';
26
26
  import { homeFromEnv } from './chunk-VNVZDWO3.js';
27
27
  import './chunk-XD4ZCMA4.js';
28
28
  import './chunk-MESOOLF4.js';
@@ -1,12 +1,12 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire } from 'node:module';
3
- import { resolveCredentials, getJson } from './chunk-U4HMGT3L.js';
4
- import './chunk-3DSC2FN3.js';
5
- import './chunk-IGIGNYZK.js';
6
- import './chunk-HSUUTD4E.js';
7
- import './chunk-V36AOTBP.js';
8
- import './chunk-QDDPVBIS.js';
9
- import './chunk-G2RRBBOX.js';
3
+ import { resolveCredentials, getJson } from './chunk-SOTJ2V3A.js';
4
+ import './chunk-JKXTG3BV.js';
5
+ import './chunk-HPOW2VCB.js';
6
+ import './chunk-3H7NZPYG.js';
7
+ import './chunk-GKNF4D62.js';
8
+ import './chunk-ZAJKEHIE.js';
9
+ import './chunk-6C3ZVE62.js';
10
10
  import './chunk-G2JWZDFA.js';
11
11
  import './chunk-ANPNT6PM.js';
12
12
  import { defaultFetch } from './chunk-F3EF56LQ.js';
@@ -15,14 +15,14 @@ import './chunk-APSYTJ6I.js';
15
15
  import './chunk-KP6R7CV3.js';
16
16
  import './chunk-HDSDUTX4.js';
17
17
  import './chunk-BJ3KTMDH.js';
18
- import './chunk-AKKVPUGK.js';
18
+ import './chunk-YW4PEGLN.js';
19
19
  import './chunk-5BHIBJDA.js';
20
20
  import './chunk-CDDED64E.js';
21
21
  import './chunk-RA3O54FC.js';
22
22
  import { parseTrackerNumber, trackerNumberError } from './chunk-WZBHBH3J.js';
23
23
  import './chunk-CRB3POP4.js';
24
- import './chunk-ZUOPFE22.js';
25
- import './chunk-IWFYKNAO.js';
24
+ import './chunk-JUXATN46.js';
25
+ import './chunk-3WW2TL7V.js';
26
26
  import './chunk-VNVZDWO3.js';
27
27
  import './chunk-XD4ZCMA4.js';
28
28
  import './chunk-MESOOLF4.js';
@@ -1,13 +1,13 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire } from 'node:module';
3
- import { itemLabel, runWorkPr, WorkPrCommandError } from './chunk-4I3ZDQFU.js';
4
- import { resolveCredentials } from './chunk-U4HMGT3L.js';
5
- import './chunk-3DSC2FN3.js';
6
- import './chunk-IGIGNYZK.js';
7
- import './chunk-HSUUTD4E.js';
8
- import './chunk-V36AOTBP.js';
9
- import './chunk-QDDPVBIS.js';
10
- import './chunk-G2RRBBOX.js';
3
+ import { itemLabel, runWorkPr, WorkPrCommandError } from './chunk-54GBOMDW.js';
4
+ import { resolveCredentials } from './chunk-SOTJ2V3A.js';
5
+ import './chunk-JKXTG3BV.js';
6
+ import './chunk-HPOW2VCB.js';
7
+ import './chunk-3H7NZPYG.js';
8
+ import './chunk-GKNF4D62.js';
9
+ import './chunk-ZAJKEHIE.js';
10
+ import './chunk-6C3ZVE62.js';
11
11
  import './chunk-G2JWZDFA.js';
12
12
  import { C } from './chunk-ANPNT6PM.js';
13
13
  import { defaultFetch } from './chunk-F3EF56LQ.js';
@@ -16,15 +16,15 @@ import './chunk-APSYTJ6I.js';
16
16
  import './chunk-KP6R7CV3.js';
17
17
  import './chunk-HDSDUTX4.js';
18
18
  import './chunk-BJ3KTMDH.js';
19
- import './chunk-AKKVPUGK.js';
19
+ import './chunk-YW4PEGLN.js';
20
20
  import './chunk-5BHIBJDA.js';
21
21
  import './chunk-CDDED64E.js';
22
22
  import './chunk-RA3O54FC.js';
23
23
  import { parseWorkItemEnv } from './chunk-T2Q7ISPE.js';
24
24
  import './chunk-WZBHBH3J.js';
25
25
  import './chunk-CRB3POP4.js';
26
- import './chunk-ZUOPFE22.js';
27
- import './chunk-IWFYKNAO.js';
26
+ import './chunk-JUXATN46.js';
27
+ import './chunk-3WW2TL7V.js';
28
28
  import { homeFromEnv } from './chunk-VNVZDWO3.js';
29
29
  import './chunk-XD4ZCMA4.js';
30
30
  import './chunk-MESOOLF4.js';
@@ -1,12 +1,12 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire } from 'node:module';
3
- export { WorkPrCommandError, itemLabel, runWorkPr } from './chunk-4I3ZDQFU.js';
4
- import './chunk-3DSC2FN3.js';
5
- import './chunk-IGIGNYZK.js';
6
- import './chunk-HSUUTD4E.js';
7
- import './chunk-V36AOTBP.js';
8
- import './chunk-QDDPVBIS.js';
9
- import './chunk-G2RRBBOX.js';
3
+ export { WorkPrCommandError, itemLabel, runWorkPr } from './chunk-54GBOMDW.js';
4
+ import './chunk-JKXTG3BV.js';
5
+ import './chunk-HPOW2VCB.js';
6
+ import './chunk-3H7NZPYG.js';
7
+ import './chunk-GKNF4D62.js';
8
+ import './chunk-ZAJKEHIE.js';
9
+ import './chunk-6C3ZVE62.js';
10
10
  import './chunk-G2JWZDFA.js';
11
11
  import './chunk-ANPNT6PM.js';
12
12
  import './chunk-F3EF56LQ.js';
@@ -15,15 +15,15 @@ import './chunk-APSYTJ6I.js';
15
15
  import './chunk-KP6R7CV3.js';
16
16
  import './chunk-HDSDUTX4.js';
17
17
  import './chunk-BJ3KTMDH.js';
18
- import './chunk-AKKVPUGK.js';
18
+ import './chunk-YW4PEGLN.js';
19
19
  import './chunk-5BHIBJDA.js';
20
20
  import './chunk-CDDED64E.js';
21
21
  import './chunk-RA3O54FC.js';
22
22
  import './chunk-T2Q7ISPE.js';
23
23
  import './chunk-WZBHBH3J.js';
24
24
  import './chunk-CRB3POP4.js';
25
- import './chunk-ZUOPFE22.js';
26
- import './chunk-IWFYKNAO.js';
25
+ import './chunk-JUXATN46.js';
26
+ import './chunk-3WW2TL7V.js';
27
27
  import './chunk-VNVZDWO3.js';
28
28
  import './chunk-XD4ZCMA4.js';
29
29
  import './chunk-MESOOLF4.js';
@@ -1,12 +1,12 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire } from 'node:module';
3
- import { resolveCredentials, postJson, WorkCommandError } from './chunk-U4HMGT3L.js';
4
- import './chunk-3DSC2FN3.js';
5
- import './chunk-IGIGNYZK.js';
6
- import './chunk-HSUUTD4E.js';
7
- import './chunk-V36AOTBP.js';
8
- import './chunk-QDDPVBIS.js';
9
- import './chunk-G2RRBBOX.js';
3
+ import { resolveCredentials, postJson, WorkCommandError } from './chunk-SOTJ2V3A.js';
4
+ import './chunk-JKXTG3BV.js';
5
+ import './chunk-HPOW2VCB.js';
6
+ import './chunk-3H7NZPYG.js';
7
+ import './chunk-GKNF4D62.js';
8
+ import './chunk-ZAJKEHIE.js';
9
+ import './chunk-6C3ZVE62.js';
10
10
  import './chunk-G2JWZDFA.js';
11
11
  import './chunk-ANPNT6PM.js';
12
12
  import { defaultFetch } from './chunk-F3EF56LQ.js';
@@ -15,14 +15,14 @@ import './chunk-APSYTJ6I.js';
15
15
  import './chunk-KP6R7CV3.js';
16
16
  import './chunk-HDSDUTX4.js';
17
17
  import './chunk-BJ3KTMDH.js';
18
- import './chunk-AKKVPUGK.js';
18
+ import './chunk-YW4PEGLN.js';
19
19
  import './chunk-5BHIBJDA.js';
20
20
  import './chunk-CDDED64E.js';
21
21
  import './chunk-RA3O54FC.js';
22
22
  import { parseTrackerNumber, trackerNumberError } from './chunk-WZBHBH3J.js';
23
23
  import './chunk-CRB3POP4.js';
24
- import './chunk-ZUOPFE22.js';
25
- import './chunk-IWFYKNAO.js';
24
+ import './chunk-JUXATN46.js';
25
+ import './chunk-3WW2TL7V.js';
26
26
  import './chunk-VNVZDWO3.js';
27
27
  import './chunk-XD4ZCMA4.js';
28
28
  import './chunk-MESOOLF4.js';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@outerlayer/cli",
3
- "version": "0.32.0",
3
+ "version": "0.33.0-next.20261021171323",
4
4
  "description": "OuterLayer CLI — commands: init, claude, connect, doctor, login, logout, sync, daemon (alias: watch), emit, findings, work, spec, runner, hooks, mcp, 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.",
@@ -78,6 +78,45 @@ The PR comment's Evidence section shows the id next to the artifact, and the
78
78
  dashboard's Criteria tab lists the artifact on that criterion's row. An id
79
79
  the recorded list does not hold gets no row.
80
80
 
81
+ ## Record a demo
82
+
83
+ For a criterion whose behavior shows on screen, record a demo instead of a
84
+ lone screenshot. A demo has one chapter for each criterion. Each chapter is
85
+ that criterion's video proof, with a spoken line that says what happens and
86
+ a list of the checks that ran.
87
+
88
+ Write a Playwright test with `@outerlayer/playwright`, one `demo.chapter`
89
+ for each criterion:
90
+
91
+ import { expect, test } from "@outerlayer/playwright";
92
+
93
+ test("a member signs in", async ({ page, demo }) => {
94
+ await page.goto("/login");
95
+ await demo.chapter("LOGIN-01", "Sign in", "The member signs in and lands on the dashboard.", async () => {
96
+ await page.getByRole("button", { name: "Sign in" }).click();
97
+ await expect(page.getByRole("heading", { name: "Dashboard" })).toBeVisible();
98
+ });
99
+ });
100
+
101
+ Install it with `npm install --save-dev @outerlayer/playwright`. Use the
102
+ recorded criterion id as the first argument, or `null` for an opening scene.
103
+ Keep each narration line short enough to say in the chapter's time. Put the
104
+ `expect` calls that prove the criterion inside the chapter, because each one
105
+ is recorded as a check.
106
+
107
+ Run the test. It writes `demo/manifest.json` and `demo/video.webm` in the
108
+ test's output folder. Then emit the demo:
109
+
110
+ outerlayer emit demo test-results/<test folder>/demo/manifest.json
111
+
112
+ A chapter whose checks all passed is bound to its criterion. A chapter with
113
+ a failed check is stored unbound, and the command exits 1: fix the app and
114
+ record again. The command needs `ffmpeg` and `espeak-ng` on PATH. Pass
115
+ `--no-narration` to store silent clips when you cannot install `espeak-ng`.
116
+ It refuses before it uploads anything when a chapter is out of order, a
117
+ criterion id is not recorded, a line is too long for its chapter, or a clip
118
+ is over 8 MiB. In a runner build everything it needs is installed.
119
+
81
120
  ## The noise rule
82
121
 
83
122
  Satisfy the declared proofs; don't document everything. One exhibit per