@t275005746/gse 0.1.0 → 0.1.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.github/ISSUE_TEMPLATE/bug_report.yml +42 -42
- package/.github/ISSUE_TEMPLATE/change_request.yml +50 -50
- package/.github/ISSUE_TEMPLATE/config.yml +5 -5
- package/.github/PULL_REQUEST_TEMPLATE.md +38 -38
- package/.github/workflows/validate-gse.yml +33 -33
- package/.gse/README.md +18 -18
- package/.gse/gse-development-protocol.md +50 -50
- package/.gse/project-profile.md +29 -29
- package/.gse/quality-gates.md +25 -25
- package/.gse/releases/public-registry-publication-npm.md +49 -0
- package/.gse/releases/public-release-owner-required.md +65 -65
- package/.gse/releases/public-security-contact-owner-required.md +45 -45
- package/.gse/state.json +147 -27
- package/CHANGELOG.md +31 -15
- package/CONTRIBUTING.md +64 -64
- package/LICENSE +21 -21
- package/README.md +14 -7
- package/README.zh-CN.md +14 -7
- package/SECURITY.md +41 -41
- package/SKILL.md +32 -12
- package/SUPPORT.md +38 -38
- package/assets/marketplace/README.md +7 -7
- package/assets/marketplace/gse-listing.json +75 -75
- package/assets/templates/acceptance-execution-packet.md +73 -73
- package/assets/templates/adr.md +14 -14
- package/assets/templates/change-brief.md +16 -16
- package/assets/templates/design.md +18 -18
- package/assets/templates/dispatch-packet.md +100 -92
- package/assets/templates/evidence.md +15 -9
- package/assets/templates/execution-quality-pack.md +65 -65
- package/assets/templates/goal-map.md +21 -21
- package/assets/templates/host-adapter.md +48 -48
- package/assets/templates/host-ui-invocation-record.md +42 -42
- package/assets/templates/incident-review.md +60 -60
- package/assets/templates/public-channel-publication-record.md +49 -49
- package/assets/templates/public-ci-run-record.md +53 -53
- package/assets/templates/public-release-record.md +65 -65
- package/assets/templates/public-repository-settings-record.md +59 -59
- package/assets/templates/public-security-contact-record.md +45 -45
- package/assets/templates/release-trust-record.md +32 -32
- package/assets/templates/review.md +18 -18
- package/assets/templates/role-fallback-packet.md +49 -0
- package/assets/templates/spec.md +16 -16
- package/assets/templates/target-adoption-evidence.md +29 -29
- package/assets/templates/tasks.md +17 -17
- package/assets/templates/update-release-acceptance-record.md +58 -58
- package/examples/README.md +22 -22
- package/examples/agent-runtime-host/.claude/gse-adapter.md +6 -6
- package/examples/agent-runtime-host/.codex/gse-adapter.md +7 -7
- package/examples/agent-runtime-host/.gse/goal-map.md +7 -7
- package/examples/agent-runtime-host/.gse/project-profile.md +27 -27
- package/examples/agent-runtime-host/.gse/tooling.md +5 -5
- package/examples/agent-runtime-host/.mcp.json +9 -9
- package/examples/agent-runtime-host/AGENTS.md +5 -5
- package/examples/agent-runtime-host/README.md +10 -10
- package/examples/agent-runtime-host/docs/model-routing.md +5 -5
- package/examples/cli-tool/.gse/project-profile.md +21 -21
- package/examples/cli-tool/AGENTS.md +5 -5
- package/examples/cli-tool/README.md +12 -12
- package/examples/cli-tool/package.json +21 -21
- package/examples/small-app/.env.example +2 -2
- package/examples/small-app/.github/workflows/ci.yml +8 -8
- package/examples/small-app/AGENTS.md +5 -5
- package/examples/small-app/README.md +12 -12
- package/examples/small-app/package.json +26 -26
- package/examples/small-app/playwright.config.ts +4 -4
- package/package.json +52 -44
- package/references/adoption-recipes.md +171 -171
- package/references/agent-roles.md +42 -21
- package/references/architecture-health.md +101 -101
- package/references/benchmark-audit.md +73 -73
- package/references/commands.md +74 -45
- package/references/community-channels.md +46 -46
- package/references/compatibility.md +70 -70
- package/references/design-basis.md +38 -38
- package/references/domain-model.md +129 -129
- package/references/domain-quality-gates.md +75 -75
- package/references/drift-audit.md +81 -80
- package/references/evidence-taxonomy.md +145 -108
- package/references/file-ownership.md +97 -93
- package/references/final-form-roadmap.md +201 -0
- package/references/final-readiness.md +84 -84
- package/references/forward-test.md +133 -133
- package/references/goal-map.md +36 -36
- package/references/host-adapters.md +129 -101
- package/references/learning-system.md +42 -26
- package/references/maintenance-cadence.md +51 -0
- package/references/marketplace-discovery.md +46 -46
- package/references/model-routing.md +103 -103
- package/references/open-source-defaults.md +39 -39
- package/references/operating-model.md +52 -52
- package/references/packaging.md +277 -277
- package/references/project-agent-workspace.md +89 -89
- package/references/project-bootstrap.md +122 -122
- package/references/project-guards.md +52 -0
- package/references/project-profile.md +57 -57
- package/references/public-release.md +174 -174
- package/references/quality-gates.md +96 -89
- package/references/recovery.md +176 -176
- package/references/release-trust.md +43 -43
- package/references/release.md +126 -126
- package/references/review.md +141 -141
- package/references/role-dispatch-fallback.md +54 -0
- package/references/router.md +90 -90
- package/references/spec-workflow.md +66 -66
- package/references/task-levels.md +81 -81
- package/references/tool-adapters.md +80 -70
- package/scripts/audit-acceptance-execution-packet.mjs +133 -133
- package/scripts/audit-adoption-recipes.mjs +99 -99
- package/scripts/audit-change-lifecycle.mjs +77 -77
- package/scripts/audit-change-system.mjs +134 -134
- package/scripts/audit-ci-readiness.mjs +107 -107
- package/scripts/audit-close-gate-hardening.mjs +188 -0
- package/scripts/audit-close-gate.mjs +448 -262
- package/scripts/audit-command-adapters.mjs +91 -91
- package/scripts/audit-command-execution.mjs +212 -199
- package/scripts/audit-commands.mjs +7 -5
- package/scripts/audit-compatibility.mjs +149 -149
- package/scripts/audit-completion-plan-drill.mjs +230 -0
- package/scripts/audit-completion-readiness.mjs +290 -287
- package/scripts/audit-continue-preflight.mjs +234 -0
- package/scripts/audit-distribution.mjs +251 -251
- package/scripts/audit-domain-quality-gates.mjs +108 -108
- package/scripts/audit-evidence-levels.mjs +217 -0
- package/scripts/audit-evidence-placeholders.mjs +126 -126
- package/scripts/audit-evidence-review-queue.mjs +206 -0
- package/scripts/audit-final-acceptance-packet.mjs +9 -9
- package/scripts/audit-final-form-progress-report.mjs +19 -18
- package/scripts/audit-final-form-roadmap.mjs +157 -0
- package/scripts/audit-final-form-stale-copy.mjs +2 -2
- package/scripts/audit-final-readiness-promotion.mjs +255 -255
- package/scripts/audit-final-readiness.mjs +226 -226
- package/scripts/audit-fixtures.mjs +154 -154
- package/scripts/audit-fresh-session-readiness.mjs +177 -177
- package/scripts/audit-host-capabilities.mjs +237 -0
- package/scripts/audit-host-runtime-evidence-handoff.mjs +159 -159
- package/scripts/audit-host-runtime-invocation-drill.mjs +240 -240
- package/scripts/audit-host-runtime-invocations.mjs +254 -254
- package/scripts/audit-host-ui-invocation.mjs +132 -132
- package/scripts/audit-installed-sync.mjs +203 -0
- package/scripts/audit-learning-drift.mjs +292 -0
- package/scripts/audit-learning-promotion.mjs +351 -0
- package/scripts/audit-learning-system.mjs +24 -14
- package/scripts/audit-local-final-form-completion.mjs +11 -10
- package/scripts/audit-maintenance-cadence.mjs +139 -0
- package/scripts/audit-maintenance-snapshot.mjs +181 -0
- package/scripts/audit-marketplace-discovery.mjs +122 -122
- package/scripts/audit-npm-package-metadata.mjs +160 -154
- package/scripts/audit-npm-publish-dry-run.mjs +194 -166
- package/scripts/audit-npm-tarball-install.mjs +195 -189
- package/scripts/audit-open-source-defaults.mjs +92 -92
- package/scripts/audit-open-source-readiness.mjs +97 -97
- package/scripts/audit-owner-external-gate-kit.mjs +12 -11
- package/scripts/audit-project-guards.mjs +189 -0
- package/scripts/audit-project.mjs +144 -141
- package/scripts/audit-public-acceptance-command-dry-run-drill.mjs +203 -203
- package/scripts/audit-public-acceptance-handoff.mjs +10 -10
- package/scripts/audit-public-acceptance-readiness.mjs +222 -222
- package/scripts/audit-public-channel-publication.mjs +248 -248
- package/scripts/audit-public-ci-run.mjs +184 -184
- package/scripts/audit-public-collaboration-templates.mjs +98 -98
- package/scripts/audit-public-external-gate-probe.mjs +206 -206
- package/scripts/audit-public-release-checklist.mjs +17 -15
- package/scripts/audit-public-release-decision.mjs +201 -201
- package/scripts/audit-public-release-metadata.mjs +176 -176
- package/scripts/audit-public-repository-settings.mjs +237 -237
- package/scripts/audit-public-security-contact.mjs +171 -171
- package/scripts/audit-readme-docs.mjs +6 -4
- package/scripts/audit-recovery-readiness.mjs +98 -98
- package/scripts/audit-release-bundle.mjs +13 -11
- package/scripts/audit-release-owner-action-plan-drill.mjs +5 -4
- package/scripts/audit-release-owner-action-plan.mjs +10 -10
- package/scripts/audit-release-readiness.mjs +106 -106
- package/scripts/audit-release-status-manifest.mjs +4 -4
- package/scripts/audit-release-trust.mjs +62 -62
- package/scripts/audit-remote-distribution.mjs +266 -266
- package/scripts/audit-roadmap-consistency.mjs +234 -230
- package/scripts/audit-role-dispatch-fallback.mjs +212 -0
- package/scripts/audit-session-sync.mjs +127 -0
- package/scripts/audit-signing.mjs +147 -147
- package/scripts/audit-state-freshness.mjs +20 -14
- package/scripts/audit-state-repair.mjs +360 -0
- package/scripts/audit-target-adoption-evidence.mjs +117 -117
- package/scripts/audit-target-hardening-drills.mjs +267 -0
- package/scripts/audit-target-project.mjs +507 -507
- package/scripts/audit-tool-fallback-policy.mjs +180 -0
- package/scripts/audit-ui-browser-evidence-policy.mjs +191 -0
- package/scripts/audit-update-release-acceptance.mjs +136 -136
- package/scripts/audit-v1-target-validation.mjs +269 -269
- package/scripts/audit-validation-profiles.mjs +125 -123
- package/scripts/backfill-evidence-levels.mjs +98 -0
- package/scripts/check-encoding.mjs +72 -0
- package/scripts/close-change.mjs +116 -116
- package/scripts/discover-project-profile.mjs +307 -307
- package/scripts/generate-command-adapter.mjs +231 -231
- package/scripts/generate-continue-packet.mjs +1214 -0
- package/scripts/generate-final-acceptance-packet.mjs +188 -173
- package/scripts/generate-final-form-progress-report.mjs +191 -189
- package/scripts/generate-host-runtime-evidence-handoff.mjs +198 -191
- package/scripts/generate-maintenance-snapshot.mjs +216 -0
- package/scripts/generate-owner-external-gate-kit.mjs +295 -295
- package/scripts/generate-public-acceptance-handoff.mjs +168 -156
- package/scripts/generate-public-release-checklist.mjs +207 -207
- package/scripts/generate-release-bundle.mjs +505 -505
- package/scripts/generate-release-owner-action-plan.mjs +172 -171
- package/scripts/generate-release-status-manifest.mjs +199 -198
- package/scripts/generate-session-prompt.mjs +188 -188
- package/scripts/gse.mjs +67 -67
- package/scripts/init-change.mjs +265 -265
- package/scripts/init-project.mjs +793 -712
- package/scripts/install-gse.mjs +234 -234
- package/scripts/lib/evidence-placeholders.mjs +28 -28
- package/scripts/package-gse.mjs +174 -174
- package/scripts/probe-public-external-gates.mjs +167 -167
- package/scripts/record-host-invocation.mjs +151 -151
- package/scripts/record-learning.mjs +37 -8
- package/scripts/record-public-channel-publication.mjs +178 -178
- package/scripts/record-public-ci-run.mjs +180 -180
- package/scripts/record-public-release.mjs +175 -175
- package/scripts/record-public-repository-settings.mjs +209 -209
- package/scripts/record-public-security-contact.mjs +157 -157
- package/scripts/record-session-sync.mjs +87 -0
- package/scripts/run-gse-command.mjs +79 -47
- package/scripts/run-validation-profile.mjs +24 -5
- package/scripts/sign-gse-package.mjs +83 -83
- package/scripts/update-project-state.mjs +223 -223
- package/scripts/validate-gse.mjs +216 -0
- package/scripts/verify-gse-package.mjs +85 -85
|
@@ -0,0 +1,188 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import fs from 'node:fs'
|
|
3
|
+
import os from 'node:os'
|
|
4
|
+
import path from 'node:path'
|
|
5
|
+
import { spawnSync } from 'node:child_process'
|
|
6
|
+
|
|
7
|
+
const args = process.argv.slice(2)
|
|
8
|
+
|
|
9
|
+
function readArg(name, fallback = null) {
|
|
10
|
+
const index = args.indexOf(name)
|
|
11
|
+
if (index === -1) return fallback
|
|
12
|
+
return args[index + 1] ?? fallback
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
const root = path.resolve(readArg('--root', path.join(import.meta.dirname, '..')))
|
|
16
|
+
const jsonOnly = args.includes('--json')
|
|
17
|
+
|
|
18
|
+
function run(command, commandArgs, cwd) {
|
|
19
|
+
const result = spawnSync(command, commandArgs, {
|
|
20
|
+
cwd,
|
|
21
|
+
encoding: 'utf8',
|
|
22
|
+
windowsHide: true,
|
|
23
|
+
})
|
|
24
|
+
return {
|
|
25
|
+
command: [command, ...commandArgs].join(' '),
|
|
26
|
+
status: result.status ?? 1,
|
|
27
|
+
stdout: (result.stdout ?? '').trim(),
|
|
28
|
+
stderr: (result.stderr ?? '').trim(),
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
function runNode(script, commandArgs, cwd = root) {
|
|
33
|
+
return run(process.execPath, [path.join(root, 'scripts', script), ...commandArgs], cwd)
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
function write(filePath, text) {
|
|
37
|
+
fs.mkdirSync(path.dirname(filePath), { recursive: true })
|
|
38
|
+
fs.writeFileSync(filePath, text, 'utf8')
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
function rolePacket(realDelegationUsed = 'no', toolStatus = 'unknown') {
|
|
42
|
+
const plannerMode = realDelegationUsed === 'yes' ? 'real-subagent' : 'sequential-role'
|
|
43
|
+
const rows = [
|
|
44
|
+
['Planner', plannerMode, realDelegationUsed, toolStatus, 'Plan', 'fixture plan', 'Plan accepted', 'read-only'],
|
|
45
|
+
['Locator', 'sequential-role', 'no', 'unknown', 'File map', 'fixture map', 'Files identified', 'read-only'],
|
|
46
|
+
['Implementer', 'sequential-role', 'no', 'unknown', 'Patch', 'fixture patch', 'Patch complete', 'assigned files'],
|
|
47
|
+
['Verifier', 'sequential-role', 'no', 'unknown', 'Test results', 'fixture tests', 'Focused checks pass', 'evidence only'],
|
|
48
|
+
['Reviewer', 'sequential-role', 'no', 'unknown', 'Review notes', 'fixture review', 'No blocking findings', 'read-only'],
|
|
49
|
+
['Docs/Evidence', 'sequential-role', 'no', 'unknown', 'Evidence log', 'fixture evidence', 'Evidence recorded', 'docs/evidence only'],
|
|
50
|
+
['Release', 'sequential-role', 'no', 'unknown', 'Claim boundary', 'fixture release', 'External gates visible', 'read-only'],
|
|
51
|
+
]
|
|
52
|
+
return [
|
|
53
|
+
'# Role Fallback Packets',
|
|
54
|
+
'',
|
|
55
|
+
'| Role | Mode | Real delegation used | Tool status | Fallback output | Evidence | Stop condition | Write access |',
|
|
56
|
+
'|---|---|---|---|---|---|---|---|',
|
|
57
|
+
...rows.map((row) => '| ' + row.join(' | ') + ' |'),
|
|
58
|
+
'',
|
|
59
|
+
].join('\n')
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
function createProject(label, options = {}) {
|
|
63
|
+
const dir = fs.mkdtempSync(path.join(os.tmpdir(), 'gse-close-hardening-' + label + '-'))
|
|
64
|
+
write(path.join(dir, '.gse', 'README.md'), '# GSE\n')
|
|
65
|
+
write(path.join(dir, '.gse', 'project-profile.md'), '# Project Profile\n')
|
|
66
|
+
write(path.join(dir, '.gse', 'goal-map.md'), '# Goal Map\n\nNext action: close fixture.\n')
|
|
67
|
+
write(path.join(dir, '.gse', 'quality-gates.md'), '# Quality Gates\n\n- Evidence required.\n')
|
|
68
|
+
write(path.join(dir, '.gse', 'evidence', '2026-07-08.md'), '# Evidence\n\nVerified fixture.\n')
|
|
69
|
+
write(
|
|
70
|
+
path.join(dir, '.gse', 'state.json'),
|
|
71
|
+
JSON.stringify(
|
|
72
|
+
{
|
|
73
|
+
schemaVersion: 1,
|
|
74
|
+
projectName: 'close-hardening-fixture',
|
|
75
|
+
mode: 'standard',
|
|
76
|
+
phase: 'verify',
|
|
77
|
+
currentSlice: {
|
|
78
|
+
id: 'close-hardening-fixture',
|
|
79
|
+
outcome: 'Fixture close gate hardening.',
|
|
80
|
+
status: 'verified',
|
|
81
|
+
nextAction: 'Close fixture.',
|
|
82
|
+
},
|
|
83
|
+
toolStatuses: {
|
|
84
|
+
browser: 'unknown',
|
|
85
|
+
lsp: 'unknown',
|
|
86
|
+
mcp: 'unknown',
|
|
87
|
+
subagents: 'unknown',
|
|
88
|
+
ci: 'unknown',
|
|
89
|
+
},
|
|
90
|
+
lastEvidence: '.gse/evidence/2026-07-08.md',
|
|
91
|
+
residualRisks: [],
|
|
92
|
+
},
|
|
93
|
+
null,
|
|
94
|
+
2,
|
|
95
|
+
) + '\n',
|
|
96
|
+
)
|
|
97
|
+
write(
|
|
98
|
+
path.join(dir, '.gse', 'evidence', 'index.jsonl'),
|
|
99
|
+
JSON.stringify({
|
|
100
|
+
date: '2026-07-08',
|
|
101
|
+
recordType: 'slice',
|
|
102
|
+
status: 'verified',
|
|
103
|
+
evidenceLevel: 'verified-unit',
|
|
104
|
+
requiredEvidenceLevel: 'verified-unit',
|
|
105
|
+
summary: 'Fixture close gate hardening evidence.',
|
|
106
|
+
evidenceFile: '.gse/evidence/2026-07-08.md',
|
|
107
|
+
commands: ['node scripts/audit-close-gate.mjs --target <fixture> --json'],
|
|
108
|
+
nextAction: 'Close fixture.',
|
|
109
|
+
}) + '\n',
|
|
110
|
+
)
|
|
111
|
+
write(
|
|
112
|
+
path.join(dir, '.gse', 'agents', 'role-fallback-packets.md'),
|
|
113
|
+
rolePacket(options.realDelegationUsed ?? 'no', options.toolStatus ?? 'unknown'),
|
|
114
|
+
)
|
|
115
|
+
run('git', ['init'], dir)
|
|
116
|
+
run('git', ['config', 'user.email', 'gse-fixture@example.local'], dir)
|
|
117
|
+
run('git', ['config', 'user.name', 'GSE Fixture'], dir)
|
|
118
|
+
run('git', ['add', '.'], dir)
|
|
119
|
+
run('git', ['commit', '-m', 'fixture'], dir)
|
|
120
|
+
return dir
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
function parseReport(result) {
|
|
124
|
+
try {
|
|
125
|
+
return JSON.parse(result.stdout)
|
|
126
|
+
} catch (error) {
|
|
127
|
+
return { parseError: error.message, stdout: result.stdout, stderr: result.stderr }
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
function getCheck(report, id) {
|
|
132
|
+
return report.checks?.find((item) => item.id === id) ?? null
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
function check(id, label, ok, evidence, risk = '') {
|
|
136
|
+
return { id, label, status: ok ? 'passed' : 'failed', evidence, risk }
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
const cleanDir = createProject('clean')
|
|
140
|
+
const fakeDir = createProject('fake-dispatch', { realDelegationUsed: 'yes', toolStatus: 'unknown' })
|
|
141
|
+
const dirtyDir = createProject('dirty')
|
|
142
|
+
write(path.join(dirtyDir, 'src', 'changed.txt'), 'dirty fixture\n')
|
|
143
|
+
const generatedDir = createProject('generated')
|
|
144
|
+
write(path.join(generatedDir, 'output', 'playwright', 'screen.png'), 'generated artifact\n')
|
|
145
|
+
run('git', ['add', 'output/playwright/screen.png'], generatedDir)
|
|
146
|
+
|
|
147
|
+
const cleanReport = parseReport(runNode('audit-close-gate.mjs', ['--target', cleanDir, '--json']))
|
|
148
|
+
const fakeReport = parseReport(runNode('audit-close-gate.mjs', ['--target', fakeDir, '--json']))
|
|
149
|
+
const dirtyReport = parseReport(runNode('audit-close-gate.mjs', ['--target', dirtyDir, '--json']))
|
|
150
|
+
const generatedReport = parseReport(runNode('audit-close-gate.mjs', ['--target', generatedDir, '--json']))
|
|
151
|
+
|
|
152
|
+
const checks = [
|
|
153
|
+
check('CGH01', 'clean fixture close gate is ready with honest role fallback', cleanReport.summary?.status === 'ready' && getCheck(cleanReport, 'CG10')?.status === 'passed' && getCheck(cleanReport, 'CG11')?.status === 'passed' && getCheck(cleanReport, 'CG12')?.status === 'passed', 'clean close gate fixture'),
|
|
154
|
+
check('CGH02', 'fake real-subagent claim fails close gate', fakeReport.summary?.status === 'not-ready' && getCheck(fakeReport, 'CG10')?.status === 'failed', getCheck(fakeReport, 'CG10')?.evidence ?? 'missing CG10'),
|
|
155
|
+
check('CGH03', 'dirty worktree is surfaced before close', dirtyReport.summary?.status === 'ready-with-warnings' && getCheck(dirtyReport, 'CG11')?.status === 'warning', getCheck(dirtyReport, 'CG11')?.evidence ?? 'missing CG11'),
|
|
156
|
+
check('CGH04', 'staged generated artifacts fail close gate', generatedReport.summary?.status === 'not-ready' && getCheck(generatedReport, 'CG12')?.status === 'failed', getCheck(generatedReport, 'CG12')?.evidence ?? 'missing CG12'),
|
|
157
|
+
]
|
|
158
|
+
|
|
159
|
+
for (const dir of [cleanDir, fakeDir, dirtyDir, generatedDir]) {
|
|
160
|
+
fs.rmSync(dir, { recursive: true, force: true })
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
const passed = checks.filter((item) => item.status === 'passed').length
|
|
164
|
+
const failed = checks.length - passed
|
|
165
|
+
const report = {
|
|
166
|
+
root,
|
|
167
|
+
generatedAt: new Date().toISOString(),
|
|
168
|
+
summary: {
|
|
169
|
+
status: failed === 0 ? 'passed' : 'failed',
|
|
170
|
+
passed,
|
|
171
|
+
failed,
|
|
172
|
+
total: checks.length,
|
|
173
|
+
},
|
|
174
|
+
workflows: {
|
|
175
|
+
closeGateHardening: failed === 0 ? 'verified' : 'failed',
|
|
176
|
+
fakeDispatchCloseGate: failed === 0 ? 'verified' : 'failed',
|
|
177
|
+
fileOwnershipCloseGate: failed === 0 ? 'verified' : 'failed',
|
|
178
|
+
},
|
|
179
|
+
checks,
|
|
180
|
+
limits: [
|
|
181
|
+
'This audit verifies close-gate mechanics with local fixtures.',
|
|
182
|
+
'It does not prove real subagent dispatch or native slash-command host support.',
|
|
183
|
+
],
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
if (jsonOnly) console.log(JSON.stringify(report, null, 2))
|
|
187
|
+
else console.log(JSON.stringify(report, null, 2))
|
|
188
|
+
if (failed > 0) process.exit(1)
|