@t275005746/gse 0.1.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.
Files changed (207) hide show
  1. package/.github/ISSUE_TEMPLATE/bug_report.yml +42 -0
  2. package/.github/ISSUE_TEMPLATE/change_request.yml +50 -0
  3. package/.github/ISSUE_TEMPLATE/config.yml +5 -0
  4. package/.github/PULL_REQUEST_TEMPLATE.md +38 -0
  5. package/.github/workflows/validate-gse.yml +33 -0
  6. package/.gse/README.md +18 -0
  7. package/.gse/gse-development-protocol.md +50 -0
  8. package/.gse/project-profile.md +29 -0
  9. package/.gse/quality-gates.md +25 -0
  10. package/.gse/releases/public-channel-publication-pending.md +49 -0
  11. package/.gse/releases/public-ci-run-pending.md +53 -0
  12. package/.gse/releases/public-release-owner-required.md +65 -0
  13. package/.gse/releases/public-repository-settings-owner-required.md +59 -0
  14. package/.gse/releases/public-security-contact-owner-required.md +45 -0
  15. package/.gse/state.json +27 -0
  16. package/CHANGELOG.md +24 -0
  17. package/CONTRIBUTING.md +64 -0
  18. package/LICENSE +21 -0
  19. package/README.md +236 -0
  20. package/README.zh-CN.md +236 -0
  21. package/SECURITY.md +41 -0
  22. package/SKILL.md +148 -0
  23. package/SUPPORT.md +38 -0
  24. package/agents/openai.yaml +4 -0
  25. package/assets/marketplace/README.md +7 -0
  26. package/assets/marketplace/gse-listing.json +75 -0
  27. package/assets/templates/acceptance-execution-packet.md +73 -0
  28. package/assets/templates/adr.md +14 -0
  29. package/assets/templates/change-brief.md +16 -0
  30. package/assets/templates/design.md +18 -0
  31. package/assets/templates/dispatch-packet.md +104 -0
  32. package/assets/templates/evidence.md +14 -0
  33. package/assets/templates/execution-quality-pack.md +65 -0
  34. package/assets/templates/goal-map.md +21 -0
  35. package/assets/templates/host-adapter.md +48 -0
  36. package/assets/templates/host-ui-invocation-record.md +42 -0
  37. package/assets/templates/incident-review.md +60 -0
  38. package/assets/templates/public-channel-publication-record.md +49 -0
  39. package/assets/templates/public-ci-run-record.md +53 -0
  40. package/assets/templates/public-release-record.md +65 -0
  41. package/assets/templates/public-repository-settings-record.md +59 -0
  42. package/assets/templates/public-security-contact-record.md +45 -0
  43. package/assets/templates/release-trust-record.md +32 -0
  44. package/assets/templates/review.md +18 -0
  45. package/assets/templates/spec.md +16 -0
  46. package/assets/templates/target-adoption-evidence.md +29 -0
  47. package/assets/templates/tasks.md +17 -0
  48. package/assets/templates/update-release-acceptance-record.md +58 -0
  49. package/examples/README.md +22 -0
  50. package/examples/agent-runtime-host/.claude/gse-adapter.md +6 -0
  51. package/examples/agent-runtime-host/.codex/gse-adapter.md +7 -0
  52. package/examples/agent-runtime-host/.gse/goal-map.md +7 -0
  53. package/examples/agent-runtime-host/.gse/project-profile.md +27 -0
  54. package/examples/agent-runtime-host/.gse/tooling.md +5 -0
  55. package/examples/agent-runtime-host/.mcp.json +9 -0
  56. package/examples/agent-runtime-host/AGENTS.md +5 -0
  57. package/examples/agent-runtime-host/README.md +10 -0
  58. package/examples/agent-runtime-host/docs/model-routing.md +5 -0
  59. package/examples/cli-tool/.gse/project-profile.md +21 -0
  60. package/examples/cli-tool/AGENTS.md +5 -0
  61. package/examples/cli-tool/README.md +12 -0
  62. package/examples/cli-tool/package.json +21 -0
  63. package/examples/small-app/.env.example +2 -0
  64. package/examples/small-app/.github/workflows/ci.yml +8 -0
  65. package/examples/small-app/AGENTS.md +5 -0
  66. package/examples/small-app/README.md +12 -0
  67. package/examples/small-app/package.json +26 -0
  68. package/examples/small-app/playwright.config.ts +4 -0
  69. package/package.json +53 -0
  70. package/references/adoption-recipes.md +171 -0
  71. package/references/agent-roles.md +49 -0
  72. package/references/architecture-health.md +101 -0
  73. package/references/benchmark-audit.md +73 -0
  74. package/references/commands.md +295 -0
  75. package/references/community-channels.md +46 -0
  76. package/references/compatibility.md +70 -0
  77. package/references/design-basis.md +38 -0
  78. package/references/domain-model.md +129 -0
  79. package/references/domain-quality-gates.md +75 -0
  80. package/references/drift-audit.md +81 -0
  81. package/references/evidence-taxonomy.md +123 -0
  82. package/references/file-ownership.md +107 -0
  83. package/references/final-readiness.md +84 -0
  84. package/references/forward-test.md +133 -0
  85. package/references/goal-map.md +36 -0
  86. package/references/host-adapters.md +119 -0
  87. package/references/learning-system.md +35 -0
  88. package/references/marketplace-discovery.md +46 -0
  89. package/references/model-routing.md +103 -0
  90. package/references/open-source-defaults.md +39 -0
  91. package/references/operating-model.md +52 -0
  92. package/references/packaging.md +277 -0
  93. package/references/project-agent-workspace.md +89 -0
  94. package/references/project-bootstrap.md +122 -0
  95. package/references/project-profile.md +57 -0
  96. package/references/public-release.md +174 -0
  97. package/references/quality-gates.md +100 -0
  98. package/references/recovery.md +176 -0
  99. package/references/release-trust.md +43 -0
  100. package/references/release.md +126 -0
  101. package/references/review.md +141 -0
  102. package/references/router.md +90 -0
  103. package/references/spec-workflow.md +66 -0
  104. package/references/task-levels.md +81 -0
  105. package/references/tool-adapters.md +73 -0
  106. package/scripts/audit-acceptance-execution-packet.mjs +133 -0
  107. package/scripts/audit-adoption-recipes.mjs +99 -0
  108. package/scripts/audit-adoption.mjs +154 -0
  109. package/scripts/audit-change-lifecycle.mjs +77 -0
  110. package/scripts/audit-change-system.mjs +134 -0
  111. package/scripts/audit-ci-readiness.mjs +107 -0
  112. package/scripts/audit-close-gate.mjs +323 -0
  113. package/scripts/audit-command-adapters.mjs +91 -0
  114. package/scripts/audit-command-execution.mjs +210 -0
  115. package/scripts/audit-commands.mjs +117 -0
  116. package/scripts/audit-compatibility.mjs +149 -0
  117. package/scripts/audit-completion-readiness.mjs +292 -0
  118. package/scripts/audit-distribution.mjs +251 -0
  119. package/scripts/audit-domain-quality-gates.mjs +108 -0
  120. package/scripts/audit-evidence-placeholders.mjs +126 -0
  121. package/scripts/audit-final-acceptance-packet.mjs +148 -0
  122. package/scripts/audit-final-form-progress-report.mjs +161 -0
  123. package/scripts/audit-final-form-stale-copy.mjs +221 -0
  124. package/scripts/audit-final-readiness-promotion.mjs +255 -0
  125. package/scripts/audit-final-readiness.mjs +226 -0
  126. package/scripts/audit-fixtures.mjs +154 -0
  127. package/scripts/audit-fresh-session-readiness.mjs +177 -0
  128. package/scripts/audit-gse.mjs +275 -0
  129. package/scripts/audit-host-adapters.mjs +119 -0
  130. package/scripts/audit-host-runtime-evidence-handoff.mjs +159 -0
  131. package/scripts/audit-host-runtime-invocation-drill.mjs +240 -0
  132. package/scripts/audit-host-runtime-invocations.mjs +254 -0
  133. package/scripts/audit-host-ui-invocation.mjs +132 -0
  134. package/scripts/audit-learning-system.mjs +103 -0
  135. package/scripts/audit-local-final-form-completion.mjs +131 -0
  136. package/scripts/audit-marketplace-discovery.mjs +122 -0
  137. package/scripts/audit-npm-package-metadata.mjs +155 -0
  138. package/scripts/audit-npm-publish-dry-run.mjs +169 -0
  139. package/scripts/audit-npm-tarball-install.mjs +191 -0
  140. package/scripts/audit-open-source-defaults.mjs +92 -0
  141. package/scripts/audit-open-source-readiness.mjs +97 -0
  142. package/scripts/audit-owner-external-gate-kit.mjs +218 -0
  143. package/scripts/audit-project.mjs +323 -0
  144. package/scripts/audit-public-acceptance-command-dry-run-drill.mjs +203 -0
  145. package/scripts/audit-public-acceptance-handoff.mjs +142 -0
  146. package/scripts/audit-public-acceptance-readiness.mjs +224 -0
  147. package/scripts/audit-public-channel-publication.mjs +248 -0
  148. package/scripts/audit-public-ci-run.mjs +184 -0
  149. package/scripts/audit-public-collaboration-templates.mjs +98 -0
  150. package/scripts/audit-public-external-gate-probe.mjs +206 -0
  151. package/scripts/audit-public-release-checklist.mjs +133 -0
  152. package/scripts/audit-public-release-decision.mjs +201 -0
  153. package/scripts/audit-public-release-metadata.mjs +176 -0
  154. package/scripts/audit-public-repository-settings.mjs +237 -0
  155. package/scripts/audit-public-security-contact.mjs +171 -0
  156. package/scripts/audit-readme-docs.mjs +185 -0
  157. package/scripts/audit-recovery-readiness.mjs +98 -0
  158. package/scripts/audit-release-bundle.mjs +251 -0
  159. package/scripts/audit-release-owner-action-plan-drill.mjs +277 -0
  160. package/scripts/audit-release-owner-action-plan.mjs +164 -0
  161. package/scripts/audit-release-readiness.mjs +106 -0
  162. package/scripts/audit-release-status-manifest.mjs +165 -0
  163. package/scripts/audit-release-trust.mjs +62 -0
  164. package/scripts/audit-remote-distribution.mjs +266 -0
  165. package/scripts/audit-roadmap-consistency.mjs +235 -0
  166. package/scripts/audit-signing.mjs +147 -0
  167. package/scripts/audit-state-freshness.mjs +113 -0
  168. package/scripts/audit-target-adoption-evidence.mjs +117 -0
  169. package/scripts/audit-target-project.mjs +507 -0
  170. package/scripts/audit-update-release-acceptance.mjs +136 -0
  171. package/scripts/audit-v1-target-validation.mjs +269 -0
  172. package/scripts/audit-validation-profiles.mjs +125 -0
  173. package/scripts/close-change.mjs +116 -0
  174. package/scripts/discover-project-profile.mjs +307 -0
  175. package/scripts/forward-test-gse.mjs +146 -0
  176. package/scripts/generate-command-adapter.mjs +231 -0
  177. package/scripts/generate-final-acceptance-packet.mjs +181 -0
  178. package/scripts/generate-final-form-progress-report.mjs +205 -0
  179. package/scripts/generate-host-adapter.mjs +73 -0
  180. package/scripts/generate-host-runtime-evidence-handoff.mjs +206 -0
  181. package/scripts/generate-owner-external-gate-kit.mjs +295 -0
  182. package/scripts/generate-public-acceptance-handoff.mjs +168 -0
  183. package/scripts/generate-public-release-checklist.mjs +207 -0
  184. package/scripts/generate-release-bundle.mjs +505 -0
  185. package/scripts/generate-release-owner-action-plan.mjs +172 -0
  186. package/scripts/generate-release-status-manifest.mjs +200 -0
  187. package/scripts/generate-session-prompt.mjs +188 -0
  188. package/scripts/gse.mjs +67 -0
  189. package/scripts/init-change.mjs +265 -0
  190. package/scripts/init-project.mjs +785 -0
  191. package/scripts/install-gse.mjs +234 -0
  192. package/scripts/lib/evidence-placeholders.mjs +28 -0
  193. package/scripts/package-gse.mjs +174 -0
  194. package/scripts/probe-public-external-gates.mjs +167 -0
  195. package/scripts/record-host-invocation.mjs +151 -0
  196. package/scripts/record-learning.mjs +137 -0
  197. package/scripts/record-public-channel-publication.mjs +178 -0
  198. package/scripts/record-public-ci-run.mjs +180 -0
  199. package/scripts/record-public-release.mjs +175 -0
  200. package/scripts/record-public-repository-settings.mjs +209 -0
  201. package/scripts/record-public-security-contact.mjs +157 -0
  202. package/scripts/run-gse-command.mjs +538 -0
  203. package/scripts/run-validation-profile.mjs +146 -0
  204. package/scripts/sign-gse-package.mjs +83 -0
  205. package/scripts/update-project-state.mjs +223 -0
  206. package/scripts/validate-gse.mjs +1168 -0
  207. package/scripts/verify-gse-package.mjs +85 -0
@@ -0,0 +1,1168 @@
1
+ #!/usr/bin/env node
2
+ import fs from 'node:fs'
3
+ import path from 'node:path'
4
+ import { spawnSync } from 'node:child_process'
5
+
6
+ const args = process.argv.slice(2)
7
+
8
+ function readArg(name, fallback = null) {
9
+ const index = args.indexOf(name)
10
+ if (index === -1) return fallback
11
+ return args[index + 1] ?? fallback
12
+ }
13
+
14
+ const root = path.resolve(readArg('--root', path.join(import.meta.dirname, '..')))
15
+ const jsonOnly = args.includes('--json')
16
+ const skipSkillValidator = args.includes('--skip-skill-validator')
17
+ const skipDistribution = args.includes('--skip-distribution')
18
+ const skipCompletionReadiness = args.includes('--skip-completion-readiness')
19
+ const skipReleaseBundle = args.includes('--skip-release-bundle')
20
+ const skipFinalFormStaleCopy = args.includes('--skip-final-form-stale-copy')
21
+ const skipLocalFinalFormCompletion = args.includes('--skip-local-final-form-completion')
22
+ const distributionProfile = readArg('--distribution-profile', 'full')
23
+ if (!['smoke', 'full'].includes(distributionProfile)) {
24
+ console.error('Unsupported --distribution-profile. Expected smoke or full.')
25
+ process.exit(1)
26
+ }
27
+ const skillCreatorValidator = readArg(
28
+ '--skill-validator',
29
+ path.resolve(root, '..', '.system', 'skill-creator', 'scripts', 'quick_validate.py'),
30
+ )
31
+
32
+ const validationStartedMs = Date.now()
33
+ const commandDurations = new Map()
34
+
35
+ function run(command, commandArgs, options = {}) {
36
+ const startedMs = Date.now()
37
+ const startedAt = new Date().toISOString()
38
+ const commandLine = [command, ...commandArgs].join(' ')
39
+ const result = spawnSync(command, commandArgs, {
40
+ cwd: root,
41
+ encoding: 'utf8',
42
+ windowsHide: true,
43
+ ...options,
44
+ })
45
+ const durationMs = Date.now() - startedMs
46
+ commandDurations.set(commandLine, durationMs)
47
+ return {
48
+ command: commandLine,
49
+ status: result.status ?? 1,
50
+ signal: result.signal ?? null,
51
+ stdout: (result.stdout ?? '').trim(),
52
+ stderr: (result.stderr ?? '').trim(),
53
+ startedAt,
54
+ finishedAt: new Date().toISOString(),
55
+ durationMs,
56
+ }
57
+ }
58
+
59
+ function parseJson(stdout) {
60
+ try {
61
+ return JSON.parse(stdout)
62
+ } catch {
63
+ return null
64
+ }
65
+ }
66
+
67
+ function checkBom() {
68
+ const roots = ['SKILL.md', 'references', 'assets', '.gse', '.learnings', 'examples', 'agents', 'scripts']
69
+ const extensions = new Set(['.md', '.yaml', '.yml', '.mjs'])
70
+ const bad = []
71
+ let scanned = 0
72
+
73
+ function visit(itemPath) {
74
+ if (!fs.existsSync(itemPath)) return
75
+ const stat = fs.statSync(itemPath)
76
+ if (stat.isDirectory()) {
77
+ for (const child of fs.readdirSync(itemPath)) visit(path.join(itemPath, child))
78
+ return
79
+ }
80
+ if (!stat.isFile()) return
81
+ if (!extensions.has(path.extname(itemPath)) && path.basename(itemPath) !== 'SKILL.md') return
82
+ scanned += 1
83
+ const bytes = fs.readFileSync(itemPath)
84
+ if (bytes.length >= 3 && bytes[0] === 0xef && bytes[1] === 0xbb && bytes[2] === 0xbf) {
85
+ bad.push(path.relative(root, itemPath).replace(/\\/g, '/'))
86
+ }
87
+ }
88
+
89
+ for (const relativePath of roots) visit(path.join(root, relativePath))
90
+ return {
91
+ scanned,
92
+ status: bad.length === 0 ? 'passed' : 'failed',
93
+ bad,
94
+ }
95
+ }
96
+
97
+ function compactAuditGse(runResult) {
98
+ const data = parseJson(runResult.stdout)
99
+ if (!data) return null
100
+ return {
101
+ score: data.totals?.score,
102
+ present: data.totals?.present,
103
+ total: data.totals?.total,
104
+ strong: data.totals?.strong,
105
+ areas: data.areas?.length,
106
+ }
107
+ }
108
+
109
+ function compactAuditProject(runResult) {
110
+ const data = parseJson(runResult.stdout)
111
+ if (!data) return null
112
+ return {
113
+ status: data.summary?.status,
114
+ modes: data.summary ? data.summary.passed + '/' + data.summary.total : null,
115
+ bootstrapScaffold: data.workflows?.bootstrapScaffold,
116
+ rerunSafety: data.workflows?.rerunSafety,
117
+ autoModeSelection: data.workflows?.autoModeSelection,
118
+ }
119
+ }
120
+
121
+ function compactAuditFixtures(runResult) {
122
+ const data = parseJson(runResult.stdout)
123
+ if (!data) return null
124
+ return {
125
+ status: data.summary?.status,
126
+ checks: data.summary ? data.summary.passed + '/' + data.summary.total : null,
127
+ projectProfileDiscovery: data.workflows?.projectProfileDiscovery,
128
+ hostAdapterAndDrift: data.workflows?.hostAdapterAndDrift,
129
+ }
130
+ }
131
+
132
+ const checks = []
133
+
134
+ const auditGse = run(process.execPath, [path.join(root, 'scripts', 'audit-gse.mjs'), '--root', root, '--json'])
135
+ checks.push({
136
+ id: 'validate-01',
137
+ label: 'structural self-audit',
138
+ status: auditGse.status === 0 ? 'passed' : 'failed',
139
+ command: auditGse.command,
140
+ summary: compactAuditGse(auditGse),
141
+ stderr: auditGse.stderr,
142
+ })
143
+
144
+ const auditProject = run(process.execPath, [path.join(root, 'scripts', 'audit-project.mjs'), '--root', root, '--json'])
145
+ checks.push({
146
+ id: 'validate-02',
147
+ label: 'project bootstrap smoke',
148
+ status: auditProject.status === 0 ? 'passed' : 'failed',
149
+ command: auditProject.command,
150
+ summary: compactAuditProject(auditProject),
151
+ stderr: auditProject.stderr,
152
+ })
153
+
154
+ const auditFixtures = run(process.execPath, [path.join(root, 'scripts', 'audit-fixtures.mjs'), '--root', root, '--json'])
155
+ checks.push({
156
+ id: 'validate-03',
157
+ label: 'fixture adoption smoke',
158
+ status: auditFixtures.status === 0 ? 'passed' : 'failed',
159
+ command: auditFixtures.command,
160
+ summary: compactAuditFixtures(auditFixtures),
161
+ stderr: auditFixtures.stderr,
162
+ })
163
+
164
+ let validatorSummary = { status: 'skipped', reason: 'skipped by --skip-skill-validator' }
165
+ if (!skipSkillValidator) {
166
+ if (!fs.existsSync(skillCreatorValidator)) {
167
+ validatorSummary = { status: 'skipped', reason: 'skill validator not found', path: skillCreatorValidator }
168
+ } else {
169
+ const pyProbe = run('py', ['-c', 'print(123)'])
170
+ if (pyProbe.status !== 0) {
171
+ validatorSummary = { status: 'skipped', reason: 'py is unavailable or failed', probeStatus: pyProbe.status, stderr: pyProbe.stderr }
172
+ } else {
173
+ const validator = run('py', [skillCreatorValidator, root])
174
+ validatorSummary = {
175
+ status: validator.status === 0 ? 'passed' : 'failed',
176
+ command: validator.command,
177
+ stdout: validator.stdout,
178
+ stderr: validator.stderr,
179
+ }
180
+ }
181
+ }
182
+ }
183
+ const auditAdoption = run(process.execPath, [path.join(root, 'scripts', 'audit-adoption.mjs'), '--root', root, '--json'])
184
+ const adoptionData = parseJson(auditAdoption.stdout)
185
+ checks.push({
186
+ id: 'validate-04',
187
+ label: 'existing repo adoption smoke',
188
+ status: auditAdoption.status === 0 ? 'passed' : 'failed',
189
+ command: auditAdoption.command,
190
+ summary: adoptionData
191
+ ? { status: adoptionData.summary?.status, checks: adoptionData.summary ? adoptionData.summary.passed + '/' + adoptionData.summary.total : null, existingRepoDiscovery: adoptionData.workflows?.existingRepoDiscovery, nonOverwriteSafety: adoptionData.workflows?.nonOverwriteSafety }
192
+ : null,
193
+ stderr: auditAdoption.stderr,
194
+ })
195
+ const auditHostAdapters = run(process.execPath, [path.join(root, 'scripts', 'audit-host-adapters.mjs'), '--root', root, '--json'])
196
+ const hostAdapterData = parseJson(auditHostAdapters.stdout)
197
+ checks.push({
198
+ id: 'validate-05',
199
+ label: 'host adapter generation smoke',
200
+ status: auditHostAdapters.status === 0 ? 'passed' : 'failed',
201
+ command: auditHostAdapters.command,
202
+ summary: hostAdapterData
203
+ ? { status: hostAdapterData.summary?.status, checks: hostAdapterData.summary ? hostAdapterData.summary.passed + '/' + hostAdapterData.summary.total : null, hostAdapterGeneration: hostAdapterData.workflows?.hostAdapterGeneration }
204
+ : null,
205
+ stderr: auditHostAdapters.stderr,
206
+ })
207
+ const auditCompatibility = run(process.execPath, [path.join(root, 'scripts', 'audit-compatibility.mjs'), '--root', root, '--json'])
208
+ const compatibilityData = parseJson(auditCompatibility.stdout)
209
+ checks.push({
210
+ id: 'validate-06',
211
+ label: 'compatibility matrix audit',
212
+ status: auditCompatibility.status === 0 ? 'passed' : 'failed',
213
+ command: auditCompatibility.command,
214
+ summary: compatibilityData
215
+ ? { status: compatibilityData.summary?.status, checks: compatibilityData.summary ? compatibilityData.summary.passed + '/' + compatibilityData.summary.total : null, compatibilityMatrix: compatibilityData.workflows?.compatibilityMatrix }
216
+ : null,
217
+ stderr: auditCompatibility.stderr,
218
+ })
219
+ const forwardTestGse = run(process.execPath, [path.join(root, 'scripts', 'forward-test-gse.mjs'), '--root', root, '--json'])
220
+ const forwardTestData = parseJson(forwardTestGse.stdout)
221
+ checks.push({
222
+ id: 'validate-07',
223
+ label: 'documented fixture forward test',
224
+ status: forwardTestGse.status === 0 ? 'passed' : 'failed',
225
+ command: forwardTestGse.command,
226
+ summary: forwardTestData
227
+ ? { status: forwardTestData.summary?.status, checks: forwardTestData.summary ? forwardTestData.summary.passed + '/' + forwardTestData.summary.total : null, evidenceStatus: forwardTestData.evidenceStatus, acceptedBy: forwardTestData.acceptedBy }
228
+ : null,
229
+ stderr: forwardTestGse.stderr,
230
+ })
231
+ const freshSessionReadiness = run(process.execPath, [path.join(root, 'scripts', 'audit-fresh-session-readiness.mjs'), '--root', root, '--json'])
232
+ const freshSessionData = parseJson(freshSessionReadiness.stdout)
233
+ checks.push({
234
+ id: 'validate-08',
235
+ label: 'fresh-session readiness probe',
236
+ status: freshSessionReadiness.status === 0 ? 'passed' : 'failed',
237
+ command: freshSessionReadiness.command,
238
+ summary: freshSessionData
239
+ ? { status: freshSessionData.summary?.status, checks: freshSessionData.summary ? freshSessionData.summary.passed + '/' + freshSessionData.summary.total : null, freshSessionReadiness: freshSessionData.workflows?.freshSessionReadiness, freshSessionAcceptance: freshSessionData.workflows?.freshSessionAcceptance }
240
+ : null,
241
+ stderr: freshSessionReadiness.stderr,
242
+ })
243
+ const releaseReadiness = run(process.execPath, [path.join(root, 'scripts', 'audit-release-readiness.mjs'), '--root', root, '--json'])
244
+ const releaseData = parseJson(releaseReadiness.stdout)
245
+ checks.push({
246
+ id: 'validate-09',
247
+ label: 'release packaging readiness audit',
248
+ status: releaseReadiness.status === 0 ? 'passed' : 'failed',
249
+ command: releaseReadiness.command,
250
+ summary: releaseData
251
+ ? { status: releaseData.summary?.status, checks: releaseData.summary ? releaseData.summary.passed + '/' + releaseData.summary.total : null, releasePackagingReadiness: releaseData.workflows?.releasePackagingReadiness, releaseReadiness: releaseData.releaseReadiness, acceptedBy: releaseData.acceptedBy }
252
+ : null,
253
+ stderr: releaseReadiness.stderr,
254
+ })
255
+ const npmPackageMetadata = run(process.execPath, [path.join(root, 'scripts', 'audit-npm-package-metadata.mjs'), '--root', root, '--json'])
256
+ const npmPackageData = parseJson(npmPackageMetadata.stdout)
257
+ checks.push({
258
+ id: 'validate-09a',
259
+ label: 'Node package metadata and npm pack dry-run audit',
260
+ status: npmPackageMetadata.status === 0 ? 'passed' : 'failed',
261
+ command: npmPackageMetadata.command,
262
+ summary: npmPackageData
263
+ ? { status: npmPackageData.summary?.status, checks: npmPackageData.summary ? npmPackageData.summary.passed + '/' + npmPackageData.summary.total : null, npmPackageMetadata: npmPackageData.workflows?.npmPackageMetadata, npmPackDryRun: npmPackageData.workflows?.npmPackDryRun }
264
+ : null,
265
+ stderr: npmPackageMetadata.stderr,
266
+ })
267
+ const npmTarballInstall = run(process.execPath, [path.join(root, 'scripts', 'audit-npm-tarball-install.mjs'), '--root', root, '--json'])
268
+ const npmTarballInstallData = parseJson(npmTarballInstall.stdout)
269
+ checks.push({
270
+ id: 'validate-09a2',
271
+ label: 'Node package tarball install audit',
272
+ status: npmTarballInstall.status === 0 ? 'passed' : 'failed',
273
+ command: npmTarballInstall.command,
274
+ summary: npmTarballInstallData
275
+ ? { status: npmTarballInstallData.summary?.status, checks: npmTarballInstallData.summary ? npmTarballInstallData.summary.passed + '/' + npmTarballInstallData.summary.total : null, npmTarballInstall: npmTarballInstallData.workflows?.npmTarballInstall, installedBin: npmTarballInstallData.workflows?.installedBin }
276
+ : null,
277
+ stderr: npmTarballInstall.stderr,
278
+ })
279
+ const npmPublishDryRun = run(process.execPath, [path.join(root, 'scripts', 'audit-npm-publish-dry-run.mjs'), '--root', root, '--json'])
280
+ const npmPublishDryRunData = parseJson(npmPublishDryRun.stdout)
281
+ checks.push({
282
+ id: 'validate-09a3',
283
+ label: 'Node package publish dry-run audit',
284
+ status: npmPublishDryRun.status === 0 ? 'passed' : 'failed',
285
+ command: npmPublishDryRun.command,
286
+ summary: npmPublishDryRunData
287
+ ? { status: npmPublishDryRunData.summary?.status, checks: npmPublishDryRunData.summary ? npmPublishDryRunData.summary.passed + '/' + npmPublishDryRunData.summary.total : null, npmPublishDryRun: npmPublishDryRunData.workflows?.npmPublishDryRun, registryPublication: npmPublishDryRunData.workflows?.registryPublication }
288
+ : null,
289
+ stderr: npmPublishDryRun.stderr,
290
+ })
291
+ const releaseTrust = run(process.execPath, [path.join(root, 'scripts', 'audit-release-trust.mjs'), '--root', root, '--json'])
292
+ const releaseTrustData = parseJson(releaseTrust.stdout)
293
+ checks.push({
294
+ id: 'validate-09b',
295
+ label: 'release trust and key custody policy audit',
296
+ status: releaseTrust.status === 0 ? 'passed' : 'failed',
297
+ command: releaseTrust.command,
298
+ summary: releaseTrustData
299
+ ? { status: releaseTrustData.summary?.status, checks: releaseTrustData.summary ? releaseTrustData.summary.passed + '/' + releaseTrustData.summary.total : null, releaseTrustPolicy: releaseTrustData.workflows?.releaseTrustPolicy }
300
+ : null,
301
+ stderr: releaseTrust.stderr,
302
+ })
303
+ const publicReleaseMetadata = run(process.execPath, [path.join(root, 'scripts', 'audit-public-release-metadata.mjs'), '--root', root, '--json'])
304
+ const publicReleaseData = parseJson(publicReleaseMetadata.stdout)
305
+ checks.push({
306
+ id: 'validate-09d',
307
+ label: 'public release metadata audit',
308
+ status: publicReleaseMetadata.status === 0 ? 'passed' : 'failed',
309
+ command: publicReleaseMetadata.command,
310
+ summary: publicReleaseData
311
+ ? { status: publicReleaseData.summary?.status, checks: publicReleaseData.summary ? publicReleaseData.summary.passed + '/' + publicReleaseData.summary.total : null, publicReleaseMetadata: publicReleaseData.workflows?.publicReleaseMetadata, publicReleaseAcceptance: publicReleaseData.workflows?.publicReleaseAcceptance }
312
+ : null,
313
+ stderr: publicReleaseMetadata.stderr,
314
+ })
315
+ const openSourceDefaults = run(process.execPath, [path.join(root, 'scripts', 'audit-open-source-defaults.mjs'), '--root', root, '--json'])
316
+ const openSourceDefaultsData = parseJson(openSourceDefaults.stdout)
317
+ checks.push({
318
+ id: 'validate-09d2',
319
+ label: 'open-source defaults audit',
320
+ status: openSourceDefaults.status === 0 ? 'passed' : 'failed',
321
+ command: openSourceDefaults.command,
322
+ summary: openSourceDefaultsData
323
+ ? { status: openSourceDefaultsData.summary?.status, checks: openSourceDefaultsData.summary ? openSourceDefaultsData.summary.passed + '/' + openSourceDefaultsData.summary.total : null, openSourceDefaults: openSourceDefaultsData.workflows?.openSourceDefaults, licenseDecision: openSourceDefaultsData.workflows?.licenseDecision }
324
+ : null,
325
+ stderr: openSourceDefaults.stderr,
326
+ })
327
+ const publicReleaseRecord = run(process.execPath, [path.join(root, 'scripts', 'record-public-release.mjs'), '--root', root, '--license-status', 'owner-required', '--dry-run', '--json'])
328
+ const publicReleaseRecordData = parseJson(publicReleaseRecord.stdout)
329
+ checks.push({
330
+ id: 'validate-09e',
331
+ label: 'public release record command dry-run',
332
+ status: publicReleaseRecord.status === 0 && publicReleaseRecordData?.status === 'ready' ? 'passed' : 'failed',
333
+ command: publicReleaseRecord.command,
334
+ summary: publicReleaseRecordData
335
+ ? { status: publicReleaseRecordData.status, licenseStatus: publicReleaseRecordData.licenseStatus, evidenceStatus: publicReleaseRecordData.evidenceStatus }
336
+ : null,
337
+ stderr: publicReleaseRecord.stderr,
338
+ })
339
+ const publicReleaseDecision = run(process.execPath, [path.join(root, 'scripts', 'audit-public-release-decision.mjs'), '--root', root, '--json'])
340
+ const publicReleaseDecisionData = parseJson(publicReleaseDecision.stdout)
341
+ checks.push({
342
+ id: 'validate-09h',
343
+ label: 'public release decision lifecycle audit',
344
+ status: publicReleaseDecision.status === 0 ? 'passed' : 'failed',
345
+ command: publicReleaseDecision.command,
346
+ summary: publicReleaseDecisionData
347
+ ? { status: publicReleaseDecisionData.summary?.status, checks: publicReleaseDecisionData.summary ? publicReleaseDecisionData.summary.passed + '/' + publicReleaseDecisionData.summary.total : null, publicReleaseDecisionLifecycle: publicReleaseDecisionData.workflows?.publicReleaseDecisionLifecycle }
348
+ : null,
349
+ stderr: publicReleaseDecision.stderr,
350
+ })
351
+ const evidencePlaceholders = run(process.execPath, [path.join(root, 'scripts', 'audit-evidence-placeholders.mjs'), '--root', root, '--json'])
352
+ const evidencePlaceholdersData = parseJson(evidencePlaceholders.stdout)
353
+ checks.push({
354
+ id: 'validate-09o',
355
+ label: 'public evidence placeholder helper audit',
356
+ status: evidencePlaceholders.status === 0 ? 'passed' : 'failed',
357
+ command: evidencePlaceholders.command,
358
+ summary: evidencePlaceholdersData
359
+ ? { status: evidencePlaceholdersData.summary?.status, checks: evidencePlaceholdersData.summary ? evidencePlaceholdersData.summary.passed + '/' + evidencePlaceholdersData.summary.total : null, evidencePlaceholderHelper: evidencePlaceholdersData.workflows?.evidencePlaceholderHelper }
360
+ : null,
361
+ stderr: evidencePlaceholders.stderr,
362
+ })
363
+ const publicCiRun = run(process.execPath, [path.join(root, 'scripts', 'audit-public-ci-run.mjs'), '--root', root, '--json'])
364
+ const publicCiRunData = parseJson(publicCiRun.stdout)
365
+ checks.push({
366
+ id: 'validate-09n',
367
+ label: 'public CI run record audit',
368
+ status: publicCiRun.status === 0 ? 'passed' : 'failed',
369
+ command: publicCiRun.command,
370
+ summary: publicCiRunData
371
+ ? { status: publicCiRunData.summary?.status, checks: publicCiRunData.summary ? publicCiRunData.summary.passed + '/' + publicCiRunData.summary.total : null, recordCommand: 'record-public-ci-run.mjs', publicCiRunRecord: publicCiRunData.workflows?.publicCiRunRecord, acceptedPublicCiRun: publicCiRunData.workflows?.acceptedPublicCiRun }
372
+ : null,
373
+ stderr: publicCiRun.stderr,
374
+ })
375
+ const publicSecurityContact = run(process.execPath, [path.join(root, 'scripts', 'audit-public-security-contact.mjs'), '--root', root, '--json'])
376
+ const publicSecurityContactData = parseJson(publicSecurityContact.stdout)
377
+ checks.push({
378
+ id: 'validate-09l',
379
+ label: 'public security contact record audit',
380
+ status: publicSecurityContact.status === 0 ? 'passed' : 'failed',
381
+ command: publicSecurityContact.command,
382
+ summary: publicSecurityContactData
383
+ ? { status: publicSecurityContactData.summary?.status, checks: publicSecurityContactData.summary ? publicSecurityContactData.summary.passed + '/' + publicSecurityContactData.summary.total : null, recordCommand: 'record-public-security-contact.mjs', publicSecurityContact: publicSecurityContactData.workflows?.publicSecurityContact, acceptedSecurityContact: publicSecurityContactData.workflows?.acceptedSecurityContact }
384
+ : null,
385
+ stderr: publicSecurityContact.stderr,
386
+ })
387
+ const publicRepositorySettings = run(process.execPath, [path.join(root, 'scripts', 'audit-public-repository-settings.mjs'), '--root', root, '--json'])
388
+ const publicRepositorySettingsData = parseJson(publicRepositorySettings.stdout)
389
+ checks.push({
390
+ id: 'validate-09k',
391
+ label: 'public repository settings record audit',
392
+ status: publicRepositorySettings.status === 0 ? 'passed' : 'failed',
393
+ command: publicRepositorySettings.command,
394
+ summary: publicRepositorySettingsData
395
+ ? { status: publicRepositorySettingsData.summary?.status, checks: publicRepositorySettingsData.summary ? publicRepositorySettingsData.summary.passed + '/' + publicRepositorySettingsData.summary.total : null, recordCommand: 'record-public-repository-settings.mjs', publicRepositorySettings: publicRepositorySettingsData.workflows?.publicRepositorySettings, acceptedRepositorySettings: publicRepositorySettingsData.workflows?.acceptedRepositorySettings }
396
+ : null,
397
+ stderr: publicRepositorySettings.stderr,
398
+ })
399
+ const publicChannelPublication = run(process.execPath, [path.join(root, 'scripts', 'audit-public-channel-publication.mjs'), '--root', root, '--json'])
400
+ const publicChannelPublicationData = parseJson(publicChannelPublication.stdout)
401
+ checks.push({
402
+ id: 'validate-09m',
403
+ label: 'public channel publication record audit',
404
+ status: publicChannelPublication.status === 0 ? 'passed' : 'failed',
405
+ command: publicChannelPublication.command,
406
+ summary: publicChannelPublicationData
407
+ ? { status: publicChannelPublicationData.summary?.status, checks: publicChannelPublicationData.summary ? publicChannelPublicationData.summary.passed + '/' + publicChannelPublicationData.summary.total : null, recordCommand: 'record-public-channel-publication.mjs', publicChannelPublication: publicChannelPublicationData.workflows?.publicChannelPublication, acceptedRegistryPublication: publicChannelPublicationData.workflows?.acceptedRegistryPublication, acceptedMarketplaceApproval: publicChannelPublicationData.workflows?.acceptedMarketplaceApproval }
408
+ : null,
409
+ stderr: publicChannelPublication.stderr,
410
+ })
411
+ if (skipReleaseBundle) {
412
+ checks.push({
413
+ id: 'validate-09f',
414
+ label: 'release bundle generation audit',
415
+ status: 'skipped',
416
+ command: null,
417
+ summary: { status: 'skipped', reason: 'skipped by --skip-release-bundle', generator: 'scripts/generate-release-bundle.mjs' },
418
+ stderr: '',
419
+ })
420
+ } else {
421
+ const releaseBundle = run(process.execPath, [path.join(root, 'scripts', 'audit-release-bundle.mjs'), '--root', root, '--json'])
422
+ const releaseBundleData = parseJson(releaseBundle.stdout)
423
+ checks.push({
424
+ id: 'validate-09f',
425
+ label: 'release bundle generation audit',
426
+ status: releaseBundle.status === 0 ? 'passed' : 'failed',
427
+ command: releaseBundle.command,
428
+ summary: releaseBundleData
429
+ ? { status: releaseBundleData.summary?.status, checks: releaseBundleData.summary ? releaseBundleData.summary.passed + '/' + releaseBundleData.summary.total : null, releaseBundle: releaseBundleData.workflows?.releaseBundle }
430
+ : null,
431
+ stderr: releaseBundle.stderr,
432
+ })
433
+ }
434
+ const openSourceReadiness = run(process.execPath, [path.join(root, 'scripts', 'audit-open-source-readiness.mjs'), '--root', root, '--json'])
435
+ const openSourceData = parseJson(openSourceReadiness.stdout)
436
+ checks.push({
437
+ id: 'validate-09g',
438
+ label: 'open-source repository readiness audit',
439
+ status: openSourceReadiness.status === 0 ? 'passed' : 'failed',
440
+ command: openSourceReadiness.command,
441
+ summary: openSourceData
442
+ ? { status: openSourceData.summary?.status, checks: openSourceData.summary ? openSourceData.summary.passed + '/' + openSourceData.summary.total : null, openSourceReadiness: openSourceData.workflows?.openSourceReadiness }
443
+ : null,
444
+ stderr: openSourceReadiness.stderr,
445
+ })
446
+ const ciReadiness = run(process.execPath, [path.join(root, 'scripts', 'audit-ci-readiness.mjs'), '--root', root, '--json'])
447
+ const ciData = parseJson(ciReadiness.stdout)
448
+ checks.push({
449
+ id: 'validate-09i',
450
+ label: 'CI workflow readiness audit',
451
+ status: ciReadiness.status === 0 ? 'passed' : 'failed',
452
+ command: ciReadiness.command,
453
+ summary: ciData
454
+ ? { status: ciData.summary?.status, checks: ciData.summary ? ciData.summary.passed + '/' + ciData.summary.total : null, ciWorkflowTemplate: ciData.workflows?.ciWorkflowTemplate, publicCiRun: ciData.workflows?.publicCiRun }
455
+ : null,
456
+ stderr: ciReadiness.stderr,
457
+ })
458
+ const publicCollaborationTemplates = run(process.execPath, [path.join(root, 'scripts', 'audit-public-collaboration-templates.mjs'), '--root', root, '--json'])
459
+ const publicCollaborationData = parseJson(publicCollaborationTemplates.stdout)
460
+ checks.push({
461
+ id: 'validate-09j',
462
+ label: 'public collaboration template audit',
463
+ status: publicCollaborationTemplates.status === 0 ? 'passed' : 'failed',
464
+ command: publicCollaborationTemplates.command,
465
+ summary: publicCollaborationData
466
+ ? { status: publicCollaborationData.summary?.status, checks: publicCollaborationData.summary ? publicCollaborationData.summary.passed + '/' + publicCollaborationData.summary.total : null, publicCollaborationTemplates: publicCollaborationData.workflows?.publicCollaborationTemplates }
467
+ : null,
468
+ stderr: publicCollaborationTemplates.stderr,
469
+ })
470
+ const marketplaceDiscovery = run(process.execPath, [path.join(root, 'scripts', 'audit-marketplace-discovery.mjs'), '--root', root, '--json'])
471
+ const marketplaceDiscoveryData = parseJson(marketplaceDiscovery.stdout)
472
+ checks.push({
473
+ id: 'validate-09c',
474
+ label: 'marketplace discovery metadata audit',
475
+ status: marketplaceDiscovery.status === 0 ? 'passed' : 'failed',
476
+ command: marketplaceDiscovery.command,
477
+ summary: marketplaceDiscoveryData
478
+ ? { status: marketplaceDiscoveryData.summary?.status, checks: marketplaceDiscoveryData.summary ? marketplaceDiscoveryData.summary.passed + '/' + marketplaceDiscoveryData.summary.total : null, marketplaceDiscovery: marketplaceDiscoveryData.workflows?.marketplaceDiscovery }
479
+ : null,
480
+ stderr: marketplaceDiscovery.stderr,
481
+ })
482
+ if (skipDistribution) {
483
+ checks.push({
484
+ id: 'validate-10',
485
+ label: 'local package and install distribution audit',
486
+ status: 'skipped',
487
+ command: null,
488
+ summary: { status: 'skipped', reason: 'skipped by --skip-distribution' },
489
+ stderr: '',
490
+ })
491
+ checks.push({
492
+ id: 'validate-10b',
493
+ label: 'remote URL distribution and integrity audit',
494
+ status: 'skipped',
495
+ command: null,
496
+ summary: { status: 'skipped', reason: 'skipped by --skip-distribution' },
497
+ stderr: '',
498
+ })
499
+ checks.push({
500
+ id: 'validate-10c',
501
+ label: 'package signing and verification audit',
502
+ status: 'skipped',
503
+ command: null,
504
+ summary: { status: 'skipped', reason: 'skipped by --skip-distribution' },
505
+ stderr: '',
506
+ })
507
+ } else {
508
+ const distributionReadiness = run(process.execPath, [path.join(root, 'scripts', 'audit-distribution.mjs'), '--root', root, '--profile', distributionProfile, '--json'])
509
+ const distributionData = parseJson(distributionReadiness.stdout)
510
+ checks.push({
511
+ id: 'validate-10',
512
+ label: 'local package and install distribution audit',
513
+ status: distributionReadiness.status === 0 ? 'passed' : 'failed',
514
+ command: distributionReadiness.command,
515
+ summary: distributionData
516
+ ? { status: distributionData.summary?.status, profile: distributionData.profile, checks: distributionData.summary ? distributionData.summary.passed + ' passed, ' + distributionData.summary.failed + ' failed, ' + distributionData.summary.skipped + ' skipped, ' + distributionData.summary.total + ' total' : null, localPackage: distributionData.workflows?.localPackage, localInstall: distributionData.workflows?.localInstall, installedValidation: distributionData.workflows?.installedValidation }
517
+ : null,
518
+ stderr: distributionReadiness.stderr,
519
+ })
520
+ const remoteDistribution = run(process.execPath, [path.join(root, 'scripts', 'audit-remote-distribution.mjs'), '--root', root, '--profile', distributionProfile, '--json'])
521
+ const remoteDistributionData = parseJson(remoteDistribution.stdout)
522
+ checks.push({
523
+ id: 'validate-10b',
524
+ label: 'remote URL distribution and integrity audit',
525
+ status: remoteDistribution.status === 0 ? 'passed' : 'failed',
526
+ command: remoteDistribution.command,
527
+ summary: remoteDistributionData
528
+ ? { status: remoteDistributionData.summary?.status, profile: remoteDistributionData.profile, checks: remoteDistributionData.summary ? remoteDistributionData.summary.passed + ' passed, ' + remoteDistributionData.summary.failed + ' failed, ' + remoteDistributionData.summary.skipped + ' skipped, ' + remoteDistributionData.summary.total + ' total' : null, remoteInstall: remoteDistributionData.workflows?.remoteInstall, integrityGate: remoteDistributionData.workflows?.integrityGate, installedValidation: remoteDistributionData.workflows?.installedValidation }
529
+ : null,
530
+ stderr: remoteDistribution.stderr,
531
+ })
532
+ const signingReadiness = run(process.execPath, [path.join(root, 'scripts', 'audit-signing.mjs'), '--root', root, '--json'])
533
+ const signingData = parseJson(signingReadiness.stdout)
534
+ checks.push({
535
+ id: 'validate-10c',
536
+ label: 'package signing and verification audit',
537
+ status: signingReadiness.status === 0 ? 'passed' : 'failed',
538
+ command: signingReadiness.command,
539
+ summary: signingData
540
+ ? { status: signingData.summary?.status, checks: signingData.summary ? signingData.summary.passed + '/' + signingData.summary.total : null, packageSigning: signingData.workflows?.packageSigning, signatureVerification: signingData.workflows?.signatureVerification, signedInstall: signingData.workflows?.signedInstall, tamperRejection: signingData.workflows?.tamperRejection }
541
+ : null,
542
+ stderr: signingReadiness.stderr,
543
+ })
544
+ }
545
+ const updateReleaseAcceptance = run(process.execPath, [path.join(root, 'scripts', 'audit-update-release-acceptance.mjs'), '--root', root, '--json'])
546
+ const updateReleaseData = parseJson(updateReleaseAcceptance.stdout)
547
+ checks.push({
548
+ id: 'validate-11',
549
+ label: 'update/release acceptance record audit',
550
+ status: updateReleaseAcceptance.status === 0 ? 'passed' : 'failed',
551
+ command: updateReleaseAcceptance.command,
552
+ summary: updateReleaseData
553
+ ? { status: updateReleaseData.summary?.status, checks: updateReleaseData.summary ? updateReleaseData.summary.passed + '/' + updateReleaseData.summary.total : null, updateReleaseAcceptance: updateReleaseData.workflows?.updateReleaseAcceptance }
554
+ : null,
555
+ stderr: updateReleaseAcceptance.stderr,
556
+ })
557
+ const targetAdoptionEvidence = run(process.execPath, [path.join(root, 'scripts', 'audit-target-adoption-evidence.mjs'), '--root', root, '--json'])
558
+ const targetAdoptionData = parseJson(targetAdoptionEvidence.stdout)
559
+ checks.push({
560
+ id: 'validate-12',
561
+ label: 'target adoption evidence audit',
562
+ status: targetAdoptionEvidence.status === 0 ? 'passed' : 'failed',
563
+ command: targetAdoptionEvidence.command,
564
+ summary: targetAdoptionData
565
+ ? { status: targetAdoptionData.summary?.status, checks: targetAdoptionData.summary ? targetAdoptionData.summary.passed + '/' + targetAdoptionData.summary.total : null, targetAdoptionEvidence: targetAdoptionData.workflows?.targetAdoptionEvidence }
566
+ : null,
567
+ stderr: targetAdoptionEvidence.stderr,
568
+ })
569
+ const acceptanceExecutionPacket = run(process.execPath, [path.join(root, 'scripts', 'audit-acceptance-execution-packet.mjs'), '--root', root, '--json'])
570
+ const acceptancePacketData = parseJson(acceptanceExecutionPacket.stdout)
571
+ checks.push({
572
+ id: 'validate-13',
573
+ label: 'acceptance execution packet audit',
574
+ status: acceptanceExecutionPacket.status === 0 ? 'passed' : 'failed',
575
+ command: acceptanceExecutionPacket.command,
576
+ summary: acceptancePacketData
577
+ ? { status: acceptancePacketData.summary?.status, checks: acceptancePacketData.summary ? acceptancePacketData.summary.passed + '/' + acceptancePacketData.summary.total : null, acceptanceExecutionPacket: acceptancePacketData.workflows?.acceptanceExecutionPacket, acceptedBy: acceptancePacketData.acceptedBy }
578
+ : null,
579
+ stderr: acceptanceExecutionPacket.stderr,
580
+ })
581
+ const roadmapConsistency = run(process.execPath, [path.join(root, 'scripts', 'audit-roadmap-consistency.mjs'), '--root', root, '--json'])
582
+ const roadmapConsistencyData = parseJson(roadmapConsistency.stdout)
583
+ checks.push({
584
+ id: 'validate-14',
585
+ label: 'roadmap consistency audit',
586
+ status: roadmapConsistency.status === 0 ? 'passed' : 'failed',
587
+ command: roadmapConsistency.command,
588
+ summary: roadmapConsistencyData
589
+ ? { status: roadmapConsistencyData.summary?.status, checks: roadmapConsistencyData.summary ? roadmapConsistencyData.summary.passed + '/' + roadmapConsistencyData.summary.total : null, roadmapConsistency: roadmapConsistencyData.workflows?.roadmapConsistency }
590
+ : null,
591
+ stderr: roadmapConsistency.stderr,
592
+ })
593
+ if (skipCompletionReadiness) {
594
+ checks.push({
595
+ id: 'validate-15',
596
+ label: 'completion readiness audit',
597
+ status: 'skipped',
598
+ command: null,
599
+ summary: { status: 'skipped', reason: 'skipped by --skip-completion-readiness' },
600
+ stderr: '',
601
+ })
602
+ } else {
603
+ const completionReadiness = run(process.execPath, [path.join(root, 'scripts', 'audit-completion-readiness.mjs'), '--root', root, '--json'])
604
+ const completionReadinessData = parseJson(completionReadiness.stdout)
605
+ checks.push({
606
+ id: 'validate-15',
607
+ label: 'completion readiness audit',
608
+ status: completionReadiness.status === 0 ? 'passed' : 'failed',
609
+ command: completionReadiness.command,
610
+ summary: completionReadinessData
611
+ ? { status: completionReadinessData.summary?.status, checks: completionReadinessData.summary ? completionReadinessData.summary.passed + '/' + completionReadinessData.summary.total : null, completionReadiness: completionReadinessData.workflows?.completionReadiness, completionStatus: completionReadinessData.completionStatus }
612
+ : null,
613
+ stderr: completionReadiness.stderr,
614
+ })
615
+ }
616
+ const recoveryReadiness = run(process.execPath, [path.join(root, 'scripts', 'audit-recovery-readiness.mjs'), '--root', root, '--json'])
617
+ const recoveryData = parseJson(recoveryReadiness.stdout)
618
+ checks.push({
619
+ id: 'validate-16',
620
+ label: 'recovery readiness audit',
621
+ status: recoveryReadiness.status === 0 ? 'passed' : 'failed',
622
+ command: recoveryReadiness.command,
623
+ summary: recoveryData
624
+ ? { status: recoveryData.summary?.status, checks: recoveryData.summary ? recoveryData.summary.passed + '/' + recoveryData.summary.total : null, recoveryReadiness: recoveryData.workflows?.recoveryReadiness }
625
+ : null,
626
+ stderr: recoveryReadiness.stderr,
627
+ })
628
+ const domainQualityGates = run(process.execPath, [path.join(root, 'scripts', 'audit-domain-quality-gates.mjs'), '--root', root, '--json'])
629
+ const domainQualityData = parseJson(domainQualityGates.stdout)
630
+ checks.push({
631
+ id: 'validate-17',
632
+ label: 'domain quality gates audit',
633
+ status: domainQualityGates.status === 0 ? 'passed' : 'failed',
634
+ command: domainQualityGates.command,
635
+ summary: domainQualityData
636
+ ? { status: domainQualityData.summary?.status, checks: domainQualityData.summary ? domainQualityData.summary.passed + '/' + domainQualityData.summary.total : null, domainQualityGates: domainQualityData.workflows?.domainQualityGates }
637
+ : null,
638
+ stderr: domainQualityGates.stderr,
639
+ })
640
+ const adoptionRecipes = run(process.execPath, [path.join(root, 'scripts', 'audit-adoption-recipes.mjs'), '--root', root, '--json'])
641
+ const adoptionRecipeData = parseJson(adoptionRecipes.stdout)
642
+ checks.push({
643
+ id: 'validate-18',
644
+ label: 'adoption recipes audit',
645
+ status: adoptionRecipes.status === 0 ? 'passed' : 'failed',
646
+ command: adoptionRecipes.command,
647
+ summary: adoptionRecipeData
648
+ ? { status: adoptionRecipeData.summary?.status, checks: adoptionRecipeData.summary ? adoptionRecipeData.summary.passed + '/' + adoptionRecipeData.summary.total : null, adoptionRecipes: adoptionRecipeData.workflows?.adoptionRecipes }
649
+ : null,
650
+ stderr: adoptionRecipes.stderr,
651
+ })
652
+ const changeSystem = run(process.execPath, [path.join(root, 'scripts', 'audit-change-system.mjs'), '--root', root, '--json'])
653
+ const changeSystemData = parseJson(changeSystem.stdout)
654
+ checks.push({
655
+ id: 'validate-19',
656
+ label: 'change spec and execution pack audit',
657
+ status: changeSystem.status === 0 ? 'passed' : 'failed',
658
+ command: changeSystem.command,
659
+ summary: changeSystemData
660
+ ? { status: changeSystemData.summary?.status, checks: changeSystemData.summary ? changeSystemData.summary.passed + '/' + changeSystemData.summary.total : null, changeSpecPack: changeSystemData.workflows?.changeSpecPack, executionQualityPack: changeSystemData.workflows?.executionQualityPack }
661
+ : null,
662
+ stderr: changeSystem.stderr,
663
+ })
664
+ const changeLifecycle = run(process.execPath, [path.join(root, 'scripts', 'audit-change-lifecycle.mjs'), '--root', root, '--json'])
665
+ const changeLifecycleData = parseJson(changeLifecycle.stdout)
666
+ checks.push({
667
+ id: 'validate-20',
668
+ label: 'change close/archive lifecycle audit',
669
+ status: changeLifecycle.status === 0 ? 'passed' : 'failed',
670
+ command: changeLifecycle.command,
671
+ summary: changeLifecycleData
672
+ ? { status: changeLifecycleData.summary?.status, checks: changeLifecycleData.summary ? changeLifecycleData.summary.passed + '/' + changeLifecycleData.summary.total : null, changeArchiveLifecycle: changeLifecycleData.workflows?.changeArchiveLifecycle }
673
+ : null,
674
+ stderr: changeLifecycle.stderr,
675
+ })
676
+ const commandAdapters = run(process.execPath, [path.join(root, 'scripts', 'audit-command-adapters.mjs'), '--root', root, '--json'])
677
+ const commandAdaptersData = parseJson(commandAdapters.stdout)
678
+ checks.push({
679
+ id: 'validate-21',
680
+ label: 'host command adapter audit',
681
+ status: commandAdapters.status === 0 ? 'passed' : 'failed',
682
+ command: commandAdapters.command,
683
+ summary: commandAdaptersData
684
+ ? { status: commandAdaptersData.summary?.status, checks: commandAdaptersData.summary ? commandAdaptersData.summary.passed + '/' + commandAdaptersData.summary.total : null, claudeNativeSlashCommandAdapter: commandAdaptersData.workflows?.claudeNativeSlashCommandAdapter, codexCommandPointerAdapter: commandAdaptersData.workflows?.codexCommandPointerAdapter, portableHostPointerAdapters: commandAdaptersData.workflows?.portableHostPointerAdapters }
685
+ : null,
686
+ stderr: commandAdapters.stderr,
687
+ })
688
+ const commandExecution = run(process.execPath, [path.join(root, 'scripts', 'audit-command-execution.mjs'), '--root', root, '--json'])
689
+ const commandExecutionData = parseJson(commandExecution.stdout)
690
+ checks.push({
691
+ id: 'validate-21b',
692
+ label: 'portable command execution audit for run-gse-command.mjs',
693
+ status: commandExecution.status === 0 ? 'passed' : 'failed',
694
+ command: commandExecution.command,
695
+ summary: commandExecutionData
696
+ ? { status: commandExecutionData.summary?.status, checks: commandExecutionData.summary ? commandExecutionData.summary.passed + '/' + commandExecutionData.summary.total : null, portableCommandExecution: commandExecutionData.workflows?.portableCommandExecution, generatedHostCommandPointers: commandExecutionData.workflows?.generatedHostCommandPointers }
697
+ : null,
698
+ stderr: commandExecution.stderr,
699
+ })
700
+ const validationProfiles = run(process.execPath, [path.join(root, 'scripts', 'audit-validation-profiles.mjs'), '--root', root, '--json'])
701
+ const validationProfilesData = parseJson(validationProfiles.stdout)
702
+ checks.push({
703
+ id: 'validate-21b2',
704
+ label: 'validation profile runner audit',
705
+ status: validationProfiles.status === 0 ? 'passed' : 'failed',
706
+ command: validationProfiles.command,
707
+ summary: validationProfilesData
708
+ ? { status: validationProfilesData.summary?.status, checks: validationProfilesData.summary ? validationProfilesData.summary.passed + '/' + validationProfilesData.summary.total : null, validationProfiles: validationProfilesData.workflows?.validationProfiles, liteChecks: validationProfilesData.workflows?.liteChecks, standardChecks: validationProfilesData.workflows?.standardChecks }
709
+ : null,
710
+ stderr: validationProfiles.stderr,
711
+ })
712
+ const hostUiInvocation = run(process.execPath, [path.join(root, 'scripts', 'audit-host-ui-invocation.mjs'), '--root', root, '--json'])
713
+ const hostUiInvocationData = parseJson(hostUiInvocation.stdout)
714
+ checks.push({
715
+ id: 'validate-21c',
716
+ label: 'host UI invocation readiness audit',
717
+ status: hostUiInvocation.status === 0 ? 'passed' : 'failed',
718
+ command: hostUiInvocation.command,
719
+ summary: hostUiInvocationData
720
+ ? { status: hostUiInvocationData.summary?.status, checks: hostUiInvocationData.summary ? hostUiInvocationData.summary.passed + '/' + hostUiInvocationData.summary.total : null, hostUiInvocationReadiness: hostUiInvocationData.workflows?.hostUiInvocationReadiness, realHostUiInvocation: hostUiInvocationData.workflows?.realHostUiInvocation }
721
+ : null,
722
+ stderr: hostUiInvocation.stderr,
723
+ })
724
+ const hostRuntimeInvocations = run(process.execPath, [path.join(root, 'scripts', 'audit-host-runtime-invocations.mjs'), '--root', root, '--json'])
725
+ const hostRuntimeInvocationsData = parseJson(hostRuntimeInvocations.stdout)
726
+ checks.push({
727
+ id: 'validate-21d',
728
+ label: 'host runtime invocation records audit',
729
+ status: hostRuntimeInvocations.status === 0 ? 'passed' : 'failed',
730
+ command: hostRuntimeInvocations.command,
731
+ summary: hostRuntimeInvocationsData
732
+ ? { status: hostRuntimeInvocationsData.summary?.status, checks: hostRuntimeInvocationsData.summary ? hostRuntimeInvocationsData.summary.passed + '/' + hostRuntimeInvocationsData.summary.total : null, hostRuntimeInvocationRecords: hostRuntimeInvocationsData.workflows?.hostRuntimeInvocationRecords, nativeRecords: hostRuntimeInvocationsData.inventory?.nativeSlashCommandRecords, portableRecords: hostRuntimeInvocationsData.inventory?.portableTextCommandRecords }
733
+ : null,
734
+ stderr: hostRuntimeInvocations.stderr,
735
+ })
736
+ const hostRuntimeInvocationDrill = run(process.execPath, [path.join(root, 'scripts', 'audit-host-runtime-invocation-drill.mjs'), '--root', root, '--json'])
737
+ const hostRuntimeInvocationDrillData = parseJson(hostRuntimeInvocationDrill.stdout)
738
+ checks.push({
739
+ id: 'validate-21d2',
740
+ label: 'host runtime invocation fixture drill',
741
+ status: hostRuntimeInvocationDrill.status === 0 ? 'passed' : 'failed',
742
+ command: hostRuntimeInvocationDrill.command,
743
+ summary: hostRuntimeInvocationDrillData
744
+ ? { status: hostRuntimeInvocationDrillData.summary?.status, checks: hostRuntimeInvocationDrillData.summary ? hostRuntimeInvocationDrillData.summary.passed + '/' + hostRuntimeInvocationDrillData.summary.total : null, hostRuntimeInvocationDrill: hostRuntimeInvocationDrillData.workflows?.hostRuntimeInvocationDrill, fixtureNativeSlashCommandRecords: hostRuntimeInvocationDrillData.workflows?.fixtureNativeSlashCommandRecords, fixturePortableTextCommandRecords: hostRuntimeInvocationDrillData.workflows?.fixturePortableTextCommandRecords }
745
+ : null,
746
+ stderr: hostRuntimeInvocationDrill.stderr,
747
+ })
748
+ const finalReadiness = run(process.execPath, [path.join(root, 'scripts', 'audit-final-readiness.mjs'), '--root', root, '--json'])
749
+ const finalReadinessData = parseJson(finalReadiness.stdout)
750
+ checks.push({
751
+ id: 'validate-21e',
752
+ label: 'final readiness matrix audit',
753
+ status: finalReadiness.status === 0 ? 'passed' : 'failed',
754
+ command: finalReadiness.command,
755
+ summary: finalReadinessData
756
+ ? { status: finalReadinessData.summary?.status, checks: finalReadinessData.summary ? finalReadinessData.summary.passed + '/' + finalReadinessData.summary.total : null, finalReadinessMatrix: finalReadinessData.workflows?.finalReadinessMatrix, publicAccepted: finalReadinessData.workflows?.publicAccepted }
757
+ : null,
758
+ stderr: finalReadiness.stderr,
759
+ })
760
+ const finalReadinessPromotion = run(process.execPath, [path.join(root, 'scripts', 'audit-final-readiness-promotion.mjs'), '--root', root, '--json'])
761
+ const finalReadinessPromotionData = parseJson(finalReadinessPromotion.stdout)
762
+ checks.push({
763
+ id: 'validate-21h',
764
+ label: 'final readiness accepted-record promotion audit',
765
+ status: finalReadinessPromotion.status === 0 ? 'passed' : 'failed',
766
+ command: finalReadinessPromotion.command,
767
+ summary: finalReadinessPromotionData
768
+ ? { status: finalReadinessPromotionData.summary?.status, checks: finalReadinessPromotionData.summary ? finalReadinessPromotionData.summary.passed + '/' + finalReadinessPromotionData.summary.total : null, finalReadinessPromotion: finalReadinessPromotionData.workflows?.finalReadinessPromotion, publicAcceptedFixture: finalReadinessPromotionData.workflows?.publicAcceptedFixture }
769
+ : null,
770
+ stderr: finalReadinessPromotion.stderr,
771
+ })
772
+ const publicAcceptanceReadiness = run(process.execPath, [path.join(root, 'scripts', 'audit-public-acceptance-readiness.mjs'), '--root', root, '--json'])
773
+ const publicAcceptanceReadinessData = parseJson(publicAcceptanceReadiness.stdout)
774
+ checks.push({
775
+ id: 'validate-21i',
776
+ label: 'public acceptance readiness doctor',
777
+ status: publicAcceptanceReadiness.status === 0 ? 'passed' : 'failed',
778
+ command: publicAcceptanceReadiness.command,
779
+ summary: publicAcceptanceReadinessData
780
+ ? { status: publicAcceptanceReadinessData.summary?.status, checks: publicAcceptanceReadinessData.summary ? publicAcceptanceReadinessData.summary.passed + '/' + publicAcceptanceReadinessData.summary.total : null, publicAcceptanceDoctor: publicAcceptanceReadinessData.workflows?.publicAcceptanceDoctor, pendingGates: publicAcceptanceReadinessData.summary?.pendingGates, publicAccepted: publicAcceptanceReadinessData.summary?.publicAccepted }
781
+ : null,
782
+ stderr: publicAcceptanceReadiness.stderr,
783
+ })
784
+ const publicAcceptanceCommandDryRunDrill = run(process.execPath, [path.join(root, 'scripts', 'audit-public-acceptance-command-dry-run-drill.mjs'), '--root', root, '--json'])
785
+ const publicAcceptanceCommandDryRunDrillData = parseJson(publicAcceptanceCommandDryRunDrill.stdout)
786
+ checks.push({
787
+ id: 'validate-21i2',
788
+ label: 'public acceptance command dry-run drill',
789
+ status: publicAcceptanceCommandDryRunDrill.status === 0 ? 'passed' : 'failed',
790
+ command: publicAcceptanceCommandDryRunDrill.command,
791
+ summary: publicAcceptanceCommandDryRunDrillData
792
+ ? { status: publicAcceptanceCommandDryRunDrillData.summary?.status, checks: publicAcceptanceCommandDryRunDrillData.summary ? publicAcceptanceCommandDryRunDrillData.summary.passed + '/' + publicAcceptanceCommandDryRunDrillData.summary.total : null, publicAcceptanceCommandDryRunDrill: publicAcceptanceCommandDryRunDrillData.workflows?.publicAcceptanceCommandDryRunDrill, commandsChecked: publicAcceptanceCommandDryRunDrillData.summary?.commandsChecked, publicAccepted: publicAcceptanceCommandDryRunDrillData.summary?.publicAccepted }
793
+ : null,
794
+ stderr: publicAcceptanceCommandDryRunDrill.stderr,
795
+ })
796
+ const publicExternalGateProbe = run(process.execPath, [path.join(root, 'scripts', 'audit-public-external-gate-probe.mjs'), '--root', root, '--json'])
797
+ const publicExternalGateProbeData = parseJson(publicExternalGateProbe.stdout)
798
+ checks.push({
799
+ id: 'validate-21i3',
800
+ label: 'public external gate live probe audit',
801
+ status: publicExternalGateProbe.status === 0 ? 'passed' : 'failed',
802
+ command: publicExternalGateProbe.command,
803
+ summary: publicExternalGateProbeData
804
+ ? { status: publicExternalGateProbeData.summary?.status, checks: publicExternalGateProbeData.summary ? publicExternalGateProbeData.summary.passed + '/' + publicExternalGateProbeData.summary.total : null, publicExternalGateProbe: publicExternalGateProbeData.workflows?.publicExternalGateProbe }
805
+ : null,
806
+ stderr: publicExternalGateProbe.stderr,
807
+ })
808
+ const publicAcceptanceHandoff = run(process.execPath, [path.join(root, 'scripts', 'audit-public-acceptance-handoff.mjs'), '--root', root, '--json'])
809
+ const publicAcceptanceHandoffData = parseJson(publicAcceptanceHandoff.stdout)
810
+ checks.push({
811
+ id: 'validate-21j',
812
+ label: 'public acceptance handoff generator audit',
813
+ status: publicAcceptanceHandoff.status === 0 ? 'passed' : 'failed',
814
+ command: publicAcceptanceHandoff.command,
815
+ summary: publicAcceptanceHandoffData
816
+ ? { status: publicAcceptanceHandoffData.summary?.status, checks: publicAcceptanceHandoffData.summary ? publicAcceptanceHandoffData.summary.passed + '/' + publicAcceptanceHandoffData.summary.total : null, publicAcceptanceHandoff: publicAcceptanceHandoffData.workflows?.publicAcceptanceHandoff, publicAccepted: publicAcceptanceHandoffData.workflows?.publicAccepted }
817
+ : null,
818
+ stderr: publicAcceptanceHandoff.stderr,
819
+ })
820
+ const releaseStatusManifest = run(process.execPath, [path.join(root, 'scripts', 'audit-release-status-manifest.mjs'), '--root', root, '--json'])
821
+ const releaseStatusManifestData = parseJson(releaseStatusManifest.stdout)
822
+ checks.push({
823
+ id: 'validate-21j2',
824
+ label: 'release status manifest generator audit',
825
+ status: releaseStatusManifest.status === 0 ? 'passed' : 'failed',
826
+ command: releaseStatusManifest.command,
827
+ summary: releaseStatusManifestData
828
+ ? { status: releaseStatusManifestData.summary?.status, checks: releaseStatusManifestData.summary ? releaseStatusManifestData.summary.passed + '/' + releaseStatusManifestData.summary.total : null, releaseStatusManifest: releaseStatusManifestData.workflows?.releaseStatusManifest, publicAccepted: releaseStatusManifestData.workflows?.publicAccepted, pendingGates: releaseStatusManifestData.workflows?.pendingGates }
829
+ : null,
830
+ stderr: releaseStatusManifest.stderr,
831
+ })
832
+ const releaseOwnerActionPlan = run(process.execPath, [path.join(root, 'scripts', 'audit-release-owner-action-plan.mjs'), '--root', root, '--json'])
833
+ const releaseOwnerActionPlanData = parseJson(releaseOwnerActionPlan.stdout)
834
+ checks.push({
835
+ id: 'validate-21j3',
836
+ label: 'release owner action plan generator audit',
837
+ status: releaseOwnerActionPlan.status === 0 ? 'passed' : 'failed',
838
+ command: releaseOwnerActionPlan.command,
839
+ summary: releaseOwnerActionPlanData
840
+ ? { status: releaseOwnerActionPlanData.summary?.status, checks: releaseOwnerActionPlanData.summary ? releaseOwnerActionPlanData.summary.passed + '/' + releaseOwnerActionPlanData.summary.total : null, releaseOwnerActionPlan: releaseOwnerActionPlanData.workflows?.releaseOwnerActionPlan, publicAccepted: releaseOwnerActionPlanData.workflows?.publicAccepted, pendingGates: releaseOwnerActionPlanData.workflows?.pendingGates }
841
+ : null,
842
+ stderr: releaseOwnerActionPlan.stderr,
843
+ })
844
+ const publicReleaseChecklist = run(process.execPath, [path.join(root, 'scripts', 'audit-public-release-checklist.mjs'), '--root', root, '--json'])
845
+ const publicReleaseChecklistData = parseJson(publicReleaseChecklist.stdout)
846
+ checks.push({
847
+ id: 'validate-21j3b',
848
+ label: 'public release checklist generator audit',
849
+ status: publicReleaseChecklist.status === 0 ? 'passed' : 'failed',
850
+ command: publicReleaseChecklist.command,
851
+ summary: publicReleaseChecklistData
852
+ ? { status: publicReleaseChecklistData.summary?.status, checks: publicReleaseChecklistData.summary ? publicReleaseChecklistData.summary.passed + '/' + publicReleaseChecklistData.summary.total : null, publicReleaseChecklist: publicReleaseChecklistData.workflows?.publicReleaseChecklist, publicAccepted: publicReleaseChecklistData.workflows?.publicAccepted, pendingGates: publicReleaseChecklistData.workflows?.pendingGates }
853
+ : null,
854
+ stderr: publicReleaseChecklist.stderr,
855
+ })
856
+ const releaseOwnerActionPlanDrill = run(process.execPath, [path.join(root, 'scripts', 'audit-release-owner-action-plan-drill.mjs'), '--root', root, '--json'])
857
+ const releaseOwnerActionPlanDrillData = parseJson(releaseOwnerActionPlanDrill.stdout)
858
+ checks.push({
859
+ id: 'validate-21j4',
860
+ label: 'release owner action plan end-to-end fixture drill',
861
+ status: releaseOwnerActionPlanDrill.status === 0 ? 'passed' : 'failed',
862
+ command: releaseOwnerActionPlanDrill.command,
863
+ summary: releaseOwnerActionPlanDrillData
864
+ ? { status: releaseOwnerActionPlanDrillData.summary?.status, checks: releaseOwnerActionPlanDrillData.summary ? releaseOwnerActionPlanDrillData.summary.passed + '/' + releaseOwnerActionPlanDrillData.summary.total : null, releaseOwnerActionPlanDrill: releaseOwnerActionPlanDrillData.workflows?.releaseOwnerActionPlanDrill, publicAcceptedFixture: releaseOwnerActionPlanDrillData.workflows?.publicAcceptedFixture, pendingGatesAfterRecords: releaseOwnerActionPlanDrillData.workflows?.pendingGatesAfterRecords }
865
+ : null,
866
+ stderr: releaseOwnerActionPlanDrill.stderr,
867
+ })
868
+ const finalFormProgressReport = run(process.execPath, [path.join(root, 'scripts', 'audit-final-form-progress-report.mjs'), '--root', root, '--json'])
869
+ const finalFormProgressReportData = parseJson(finalFormProgressReport.stdout)
870
+ checks.push({
871
+ id: 'validate-21j5',
872
+ label: 'final-form progress report audit',
873
+ status: finalFormProgressReport.status === 0 ? 'passed' : 'failed',
874
+ command: finalFormProgressReport.command,
875
+ summary: finalFormProgressReportData
876
+ ? { status: finalFormProgressReportData.summary?.status, checks: finalFormProgressReportData.summary ? finalFormProgressReportData.summary.passed + '/' + finalFormProgressReportData.summary.total : null, finalFormProgressReport: finalFormProgressReportData.workflows?.finalFormProgressReport, localEngineeringReadiness: finalFormProgressReportData.workflows?.localEngineeringReadiness, fullFinalFormReadiness: finalFormProgressReportData.workflows?.fullFinalFormReadiness, pendingGates: finalFormProgressReportData.workflows?.pendingGates, publicAccepted: finalFormProgressReportData.workflows?.publicAccepted }
877
+ : null,
878
+ stderr: finalFormProgressReport.stderr,
879
+ })
880
+ if (skipLocalFinalFormCompletion) {
881
+ checks.push({
882
+ id: 'validate-21j5b',
883
+ label: 'local final-form completion boundary audit',
884
+ status: 'skipped',
885
+ command: null,
886
+ summary: { status: 'skipped', reason: 'skipped by --skip-local-final-form-completion' },
887
+ stderr: '',
888
+ })
889
+ } else {
890
+ const localFinalFormCompletion = run(process.execPath, [path.join(root, 'scripts', 'audit-local-final-form-completion.mjs'), '--root', root, '--json'])
891
+ const localFinalFormCompletionData = parseJson(localFinalFormCompletion.stdout)
892
+ checks.push({
893
+ id: 'validate-21j5b',
894
+ label: 'local final-form completion boundary audit',
895
+ status: localFinalFormCompletion.status === 0 ? 'passed' : 'failed',
896
+ command: localFinalFormCompletion.command,
897
+ summary: localFinalFormCompletionData
898
+ ? { status: localFinalFormCompletionData.summary?.status, localEngineeringReadiness: localFinalFormCompletionData.summary?.localEngineeringReadiness, fullFinalFormReadiness: localFinalFormCompletionData.summary?.fullFinalFormReadiness, pendingGates: localFinalFormCompletionData.summary?.pendingGates, publicAccepted: localFinalFormCompletionData.summary?.publicAccepted, remainingWorkClass: localFinalFormCompletionData.workflows?.remainingWorkClass }
899
+ : null,
900
+ stderr: localFinalFormCompletion.stderr,
901
+ })
902
+ }
903
+ if (skipFinalFormStaleCopy) {
904
+ checks.push({
905
+ id: 'validate-21j6',
906
+ label: 'final-form stale copy audit',
907
+ status: 'skipped',
908
+ command: null,
909
+ summary: { status: 'skipped', reason: 'skipped by --skip-final-form-stale-copy' },
910
+ stderr: '',
911
+ })
912
+ } else {
913
+ const finalFormStaleCopy = run(process.execPath, [path.join(root, 'scripts', 'audit-final-form-stale-copy.mjs'), '--root', root, '--json'])
914
+ const finalFormStaleCopyData = parseJson(finalFormStaleCopy.stdout)
915
+ checks.push({
916
+ id: 'validate-21j6',
917
+ label: 'final-form stale copy audit',
918
+ status: finalFormStaleCopy.status === 0 ? 'passed' : 'failed',
919
+ command: finalFormStaleCopy.command,
920
+ summary: finalFormStaleCopyData
921
+ ? { status: finalFormStaleCopyData.summary?.status, checks: finalFormStaleCopyData.summary ? finalFormStaleCopyData.summary.passed + '/' + finalFormStaleCopyData.summary.total : null, finalFormStaleCopy: finalFormStaleCopyData.workflows?.finalFormStaleCopy, licenseDecision: finalFormStaleCopyData.workflows?.licenseDecision, pendingGates: finalFormStaleCopyData.workflows?.pendingGates, publicAccepted: finalFormStaleCopyData.workflows?.publicAccepted }
922
+ : null,
923
+ stderr: finalFormStaleCopy.stderr,
924
+ })
925
+ }
926
+ const hostRuntimeEvidenceHandoff = run(process.execPath, [path.join(root, 'scripts', 'audit-host-runtime-evidence-handoff.mjs'), '--root', root, '--json'])
927
+ const hostRuntimeEvidenceHandoffData = parseJson(hostRuntimeEvidenceHandoff.stdout)
928
+ checks.push({
929
+ id: 'validate-21k',
930
+ label: 'host runtime evidence handoff generator audit',
931
+ status: hostRuntimeEvidenceHandoff.status === 0 ? 'passed' : 'failed',
932
+ command: hostRuntimeEvidenceHandoff.command,
933
+ summary: hostRuntimeEvidenceHandoffData
934
+ ? { status: hostRuntimeEvidenceHandoffData.summary?.status, checks: hostRuntimeEvidenceHandoffData.summary ? hostRuntimeEvidenceHandoffData.summary.passed + '/' + hostRuntimeEvidenceHandoffData.summary.total : null, hostRuntimeEvidenceHandoff: hostRuntimeEvidenceHandoffData.workflows?.hostRuntimeEvidenceHandoff, nativeRecords: hostRuntimeEvidenceHandoffData.workflows?.nativeSlashCommandRecords, portableRecords: hostRuntimeEvidenceHandoffData.workflows?.portableTextCommandRecords }
935
+ : null,
936
+ stderr: hostRuntimeEvidenceHandoff.stderr,
937
+ })
938
+ const ownerExternalGateKit = run(process.execPath, [path.join(root, 'scripts', 'audit-owner-external-gate-kit.mjs'), '--root', root, '--json'])
939
+ const ownerExternalGateKitData = parseJson(ownerExternalGateKit.stdout)
940
+ checks.push({
941
+ id: 'validate-21l',
942
+ label: 'owner/external gate execution kit audit',
943
+ status: ownerExternalGateKit.status === 0 ? 'passed' : 'failed',
944
+ command: ownerExternalGateKit.command,
945
+ summary: ownerExternalGateKitData
946
+ ? { status: ownerExternalGateKitData.summary?.status, checks: ownerExternalGateKitData.summary ? ownerExternalGateKitData.summary.passed + '/' + ownerExternalGateKitData.summary.total : null, ownerExternalGateKit: ownerExternalGateKitData.workflows?.ownerExternalGateKit, pendingGates: ownerExternalGateKitData.workflows?.pendingGates, publicAccepted: ownerExternalGateKitData.workflows?.publicAccepted }
947
+ : null,
948
+ stderr: ownerExternalGateKit.stderr,
949
+ })
950
+ const finalAcceptancePacketGenerate = run(process.execPath, [path.join(root, 'scripts', 'generate-final-acceptance-packet.mjs'), '--root', root, '--dry-run', '--json'])
951
+ const finalAcceptancePacketGenerateData = parseJson(finalAcceptancePacketGenerate.stdout)
952
+ checks.push({
953
+ id: 'validate-21f',
954
+ label: 'final acceptance packet generator dry-run',
955
+ status: finalAcceptancePacketGenerate.status === 0 && finalAcceptancePacketGenerateData?.status === 'ready' ? 'passed' : 'failed',
956
+ command: finalAcceptancePacketGenerate.command,
957
+ summary: finalAcceptancePacketGenerateData
958
+ ? { status: finalAcceptancePacketGenerateData.status, verifiedRows: finalAcceptancePacketGenerateData.summary?.verifiedRows, pendingRows: finalAcceptancePacketGenerateData.summary?.pendingRows, publicAccepted: finalAcceptancePacketGenerateData.summary?.publicAccepted }
959
+ : null,
960
+ stderr: finalAcceptancePacketGenerate.stderr,
961
+ })
962
+ const finalAcceptancePacket = run(process.execPath, [path.join(root, 'scripts', 'audit-final-acceptance-packet.mjs'), '--root', root, '--json'])
963
+ const finalAcceptancePacketData = parseJson(finalAcceptancePacket.stdout)
964
+ checks.push({
965
+ id: 'validate-21g',
966
+ label: 'final acceptance packet audit',
967
+ status: finalAcceptancePacket.status === 0 ? 'passed' : 'failed',
968
+ command: finalAcceptancePacket.command,
969
+ summary: finalAcceptancePacketData
970
+ ? { status: finalAcceptancePacketData.summary?.status, checks: finalAcceptancePacketData.summary ? finalAcceptancePacketData.summary.passed + '/' + finalAcceptancePacketData.summary.total : null, finalAcceptancePacket: finalAcceptancePacketData.workflows?.finalAcceptancePacket, publicAccepted: finalAcceptancePacketData.workflows?.publicAccepted }
971
+ : null,
972
+ stderr: finalAcceptancePacket.stderr,
973
+ })
974
+ const commandSemantics = run(process.execPath, [path.join(root, 'scripts', 'audit-commands.mjs'), '--root', root, '--json'])
975
+ const commandSemanticsData = parseJson(commandSemantics.stdout)
976
+ checks.push({
977
+ id: 'validate-22',
978
+ label: 'command semantics audit',
979
+ status: commandSemantics.status === 0 ? 'passed' : 'failed',
980
+ command: commandSemantics.command,
981
+ summary: commandSemanticsData
982
+ ? { status: commandSemanticsData.summary?.status, checks: commandSemanticsData.summary ? commandSemanticsData.summary.passed + '/' + commandSemanticsData.summary.total : null, commandSemantics: commandSemanticsData.workflows?.commandSemantics }
983
+ : null,
984
+ stderr: commandSemantics.stderr,
985
+ })
986
+ const learningSystem = run(process.execPath, [path.join(root, 'scripts', 'audit-learning-system.mjs'), '--root', root, '--json'])
987
+ const learningSystemData = parseJson(learningSystem.stdout)
988
+ checks.push({
989
+ id: 'validate-22b',
990
+ label: 'learning command and store audit',
991
+ status: learningSystem.status === 0 ? 'passed' : 'failed',
992
+ command: learningSystem.command,
993
+ summary: learningSystemData
994
+ ? { status: learningSystemData.summary?.status, checks: learningSystemData.summary ? learningSystemData.summary.passed + '/' + learningSystemData.summary.total : null, learningCommand: learningSystemData.workflows?.learningCommand, learningStore: learningSystemData.workflows?.learningStore }
995
+ : null,
996
+ stderr: learningSystem.stderr,
997
+ })
998
+ const readmeDocs = run(process.execPath, [path.join(root, 'scripts', 'audit-readme-docs.mjs'), '--root', root, '--json'])
999
+ const readmeDocsData = parseJson(readmeDocs.stdout)
1000
+ checks.push({
1001
+ id: 'validate-23',
1002
+ label: 'bilingual README docs audit',
1003
+ status: readmeDocs.status === 0 ? 'passed' : 'failed',
1004
+ command: readmeDocs.command,
1005
+ summary: readmeDocsData
1006
+ ? { status: readmeDocsData.summary?.status, checks: readmeDocsData.summary ? readmeDocsData.summary.passed + '/' + readmeDocsData.summary.total : null, readmeDocs: readmeDocsData.workflows?.readmeDocs }
1007
+ : null,
1008
+ stderr: readmeDocs.stderr,
1009
+ })
1010
+ const targetProjectDoctor = run(process.execPath, [path.join(root, 'scripts', 'audit-target-project.mjs'), '--root', root, '--json'])
1011
+ const targetProjectDoctorData = parseJson(targetProjectDoctor.stdout)
1012
+ checks.push({
1013
+ id: 'validate-24',
1014
+ label: 'target project doctor self-test',
1015
+ status: targetProjectDoctor.status === 0 ? 'passed' : 'failed',
1016
+ command: targetProjectDoctor.command,
1017
+ summary: targetProjectDoctorData
1018
+ ? { status: targetProjectDoctorData.summary?.status, checks: targetProjectDoctorData.summary ? targetProjectDoctorData.summary.passed + '/' + targetProjectDoctorData.summary.total : null, targetProjectDoctor: targetProjectDoctorData.workflows?.targetProjectDoctor }
1019
+ : null,
1020
+ stderr: targetProjectDoctor.stderr,
1021
+ })
1022
+ const stateFreshness = run(process.execPath, [path.join(root, 'scripts', 'audit-state-freshness.mjs'), '--root', root, '--json'])
1023
+ const stateFreshnessData = parseJson(stateFreshness.stdout)
1024
+ checks.push({
1025
+ id: 'validate-24b',
1026
+ label: 'machine-readable state freshness audit',
1027
+ status: stateFreshness.status === 0 ? 'passed' : 'failed',
1028
+ command: stateFreshness.command,
1029
+ summary: stateFreshnessData
1030
+ ? { status: stateFreshnessData.summary?.status, checks: stateFreshnessData.summary ? stateFreshnessData.summary.passed + '/' + stateFreshnessData.summary.total : null, stateFreshness: stateFreshnessData.workflows?.stateFreshness, pendingGates: stateFreshnessData.workflows?.pendingGates }
1031
+ : null,
1032
+ stderr: stateFreshness.stderr,
1033
+ })
1034
+ const sessionPrompt = run(process.execPath, [path.join(root, 'scripts', 'generate-session-prompt.mjs'), '--root', root, '--json'])
1035
+ const sessionPromptData = parseJson(sessionPrompt.stdout)
1036
+ checks.push({
1037
+ id: 'validate-25',
1038
+ label: 'session prompt generator self-test',
1039
+ status: sessionPrompt.status === 0 && sessionPromptData?.prompt?.includes('Use GSE to continue') ? 'passed' : 'failed',
1040
+ command: sessionPrompt.command,
1041
+ summary: sessionPromptData
1042
+ ? { status: sessionPromptData.summary?.status, warnings: sessionPromptData.summary?.warnings, promptLines: sessionPromptData.summary?.promptLines, stateValid: sessionPromptData.state?.valid }
1043
+ : null,
1044
+ stderr: sessionPrompt.stderr,
1045
+ })
1046
+ const closeGate = run(process.execPath, [path.join(root, 'scripts', 'audit-close-gate.mjs'), '--root', root, '--json'])
1047
+ const closeGateData = parseJson(closeGate.stdout)
1048
+ checks.push({
1049
+ id: 'validate-26',
1050
+ label: 'close gate self-test',
1051
+ status: closeGate.status === 0 && closeGateData?.summary?.status === 'ready' ? 'passed' : 'failed',
1052
+ command: closeGate.command,
1053
+ summary: closeGateData
1054
+ ? { status: closeGateData.summary?.status, checks: closeGateData.summary ? closeGateData.summary.passed + '/' + closeGateData.summary.total : null, closeGate: closeGateData.workflows?.closeGate }
1055
+ : null,
1056
+ stderr: closeGate.stderr,
1057
+ })
1058
+ const v1TargetValidation = run(process.execPath, [path.join(root, 'scripts', 'audit-v1-target-validation.mjs'), '--root', root, '--json'])
1059
+ const v1TargetData = parseJson(v1TargetValidation.stdout)
1060
+ checks.push({
1061
+ id: 'validate-27',
1062
+ label: 'configured v1 target validation',
1063
+ status: v1TargetData?.summary?.status === 'skipped' ? 'skipped' : v1TargetValidation.status === 0 ? 'passed' : 'failed',
1064
+ command: v1TargetValidation.command,
1065
+ summary: v1TargetData
1066
+ ? { status: v1TargetData.summary?.status, checks: v1TargetData.summary ? v1TargetData.summary.passed + '/' + v1TargetData.summary.total : null, skipped: v1TargetData.summary?.skipped, v1TargetValidation: v1TargetData.workflows?.v1TargetValidation }
1067
+ : null,
1068
+ stderr: v1TargetValidation.stderr,
1069
+ })
1070
+ const updateProjectState = run(process.execPath, [path.join(root, 'scripts', 'update-project-state.mjs'), '--root', root, '--json'])
1071
+ const updateProjectStateData = parseJson(updateProjectState.stdout)
1072
+ checks.push({
1073
+ id: 'validate-28',
1074
+ label: 'project state update self-test',
1075
+ status: updateProjectState.status === 0 && updateProjectStateData?.summary?.written === 2 ? 'passed' : 'failed',
1076
+ command: updateProjectState.command,
1077
+ summary: updateProjectStateData
1078
+ ? { status: updateProjectStateData.summary?.status, written: updateProjectStateData.summary?.written, skipped: updateProjectStateData.summary?.skipped, warnings: updateProjectStateData.summary?.warnings }
1079
+ : null,
1080
+ stderr: updateProjectState.stderr,
1081
+ })
1082
+ checks.push({
1083
+ id: 'validate-29',
1084
+ label: 'skill validator via py',
1085
+ status: validatorSummary.status,
1086
+ command: validatorSummary.command ?? null,
1087
+ summary: validatorSummary,
1088
+ stderr: validatorSummary.stderr ?? '',
1089
+ })
1090
+
1091
+ const bom = checkBom()
1092
+ checks.push({
1093
+ id: 'validate-30',
1094
+ label: 'markdown/yaml/mjs BOM check',
1095
+ status: bom.status,
1096
+ command: 'internal BOM scan',
1097
+ summary: bom,
1098
+ stderr: '',
1099
+ })
1100
+
1101
+ const failed = checks.filter((item) => item.status === 'failed').length
1102
+ const skipped = checks.filter((item) => item.status === 'skipped').length
1103
+ const passed = checks.filter((item) => item.status === 'passed').length
1104
+ const durationMs = Date.now() - validationStartedMs
1105
+ const slowestChecks = checks
1106
+ .map((item) => ({
1107
+ id: item.id,
1108
+ label: item.label,
1109
+ status: item.status,
1110
+ durationMs: commandDurations.get(item.command) ?? null,
1111
+ }))
1112
+ .filter((item) => Number.isFinite(item.durationMs))
1113
+ .sort((a, b) => b.durationMs - a.durationMs)
1114
+ .slice(0, 5)
1115
+ const report = {
1116
+ root,
1117
+ generatedAt: new Date().toISOString(),
1118
+ summary: {
1119
+ status: failed === 0 ? 'passed' : 'failed',
1120
+ passed,
1121
+ failed,
1122
+ skipped,
1123
+ total: checks.length,
1124
+ durationMs,
1125
+ slowestChecks,
1126
+ },
1127
+ limits: [
1128
+ 'validate-gse consolidates existing local structural, adoption, fixture, host-adapter, and documented forward-test checks; it does not certify arbitrary real repositories.',
1129
+ 'Skill validator is run through py when available because bare python is known unreliable in this shell.',
1130
+ 'Fresh-session acceptance still requires a separate run using documented GSE inputs.',
1131
+ ],
1132
+ checks,
1133
+ }
1134
+
1135
+ function renderMarkdown(data) {
1136
+ const lines = []
1137
+ lines.push('# GSE Validation')
1138
+ lines.push('')
1139
+ lines.push('Generated: ' + data.generatedAt)
1140
+ lines.push('Root: ' + data.root)
1141
+ lines.push('')
1142
+ lines.push('## Summary')
1143
+ lines.push('')
1144
+ lines.push('- Status: ' + data.summary.status)
1145
+ lines.push('- Checks: ' + data.summary.passed + ' passed, ' + data.summary.failed + ' failed, ' + data.summary.skipped + ' skipped, ' + data.summary.total + ' total')
1146
+ lines.push('- Duration: ' + data.summary.durationMs + ' ms')
1147
+ if (data.summary.slowestChecks?.length) {
1148
+ lines.push('- Slowest checks: ' + data.summary.slowestChecks.map((item) => item.id + ' (' + item.durationMs + ' ms)').join(', '))
1149
+ }
1150
+ lines.push('')
1151
+ lines.push('## Checks')
1152
+ lines.push('')
1153
+ for (const item of data.checks) {
1154
+ const marker = item.status === 'passed' ? '[x]' : item.status === 'skipped' ? '[-]' : '[ ]'
1155
+ lines.push('- ' + marker + ' ' + item.id + ' ' + item.label + ': ' + item.status)
1156
+ if (item.summary) lines.push(' - Summary: ' + JSON.stringify(item.summary))
1157
+ }
1158
+ lines.push('')
1159
+ lines.push('## Limits')
1160
+ lines.push('')
1161
+ for (const item of data.limits) lines.push('- ' + item)
1162
+ return lines.join('\n') + '\n'
1163
+ }
1164
+
1165
+ if (jsonOnly) console.log(JSON.stringify(report, null, 2))
1166
+ else console.log(renderMarkdown(report))
1167
+
1168
+ if (failed > 0) process.exit(1)