@t275005746/gse 0.1.2 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.gse/releases/public-github-release-v0.1.2.md +49 -0
- package/.gse/releases/public-registry-publication-npm.md +49 -49
- package/.gse/state.json +16 -15
- package/CHANGELOG.md +33 -5
- package/package.json +1 -1
- package/references/commands.md +2 -1
- package/references/final-form-roadmap.md +3 -1
- package/scripts/audit-completion-plan-drill.mjs +41 -0
- package/scripts/audit-continue-preflight.mjs +101 -17
- package/scripts/audit-target-hardening-drills.mjs +254 -3
- package/scripts/generate-continue-packet.mjs +276 -3
- package/scripts/validate-gse.mjs +49 -12
package/scripts/validate-gse.mjs
CHANGED
|
@@ -56,15 +56,51 @@ function run(command, commandArgs, options = {}) {
|
|
|
56
56
|
}
|
|
57
57
|
}
|
|
58
58
|
|
|
59
|
-
function parseJson(stdout) {
|
|
60
|
-
try {
|
|
61
|
-
return JSON.parse(stdout)
|
|
62
|
-
} catch {
|
|
63
|
-
return null
|
|
64
|
-
}
|
|
65
|
-
}
|
|
66
|
-
|
|
67
|
-
function
|
|
59
|
+
function parseJson(stdout) {
|
|
60
|
+
try {
|
|
61
|
+
return JSON.parse(stdout)
|
|
62
|
+
} catch {
|
|
63
|
+
return null
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
function adoptionSummaryFailures(report) {
|
|
68
|
+
const failures = []
|
|
69
|
+
const allowedClassifications = new Set([
|
|
70
|
+
'gse-ready',
|
|
71
|
+
'gse-ready-with-soft-warnings',
|
|
72
|
+
'target-local-adoption-hygiene',
|
|
73
|
+
'target-hard-failure',
|
|
74
|
+
])
|
|
75
|
+
for (const target of report?.targets ?? []) {
|
|
76
|
+
const summary = target.adoptionSummary
|
|
77
|
+
if (!summary || typeof summary !== 'object') {
|
|
78
|
+
failures.push(`${target.id}:missing adoptionSummary`)
|
|
79
|
+
continue
|
|
80
|
+
}
|
|
81
|
+
if (!allowedClassifications.has(summary.classification)) failures.push(`${target.id}:invalid classification`)
|
|
82
|
+
if (typeof summary.gseCoreGap !== 'boolean') failures.push(`${target.id}:gseCoreGap not boolean`)
|
|
83
|
+
if (summary.coreGapAssessment !== 'not-assessed-by-target-drill') failures.push(`${target.id}:missing coreGapAssessment boundary`)
|
|
84
|
+
if (typeof summary.portableContinueUsable !== 'boolean') failures.push(`${target.id}:portableContinueUsable not boolean`)
|
|
85
|
+
if (!['not-proven', 'verified', 'external-required', 'unknown'].includes(summary.hostNativeSlashCommand)) failures.push(`${target.id}:invalid hostNativeSlashCommand`)
|
|
86
|
+
if (!['low', 'risk-dump-needs-compaction', 'unknown'].includes(summary.longPromptRisk)) failures.push(`${target.id}:invalid longPromptRisk`)
|
|
87
|
+
if (!Array.isArray(summary.topLocalIssues)) failures.push(`${target.id}:topLocalIssues not array`)
|
|
88
|
+
if (!summary.repairPlan || typeof summary.repairPlan !== 'object') failures.push(`${target.id}:missing repairPlan`)
|
|
89
|
+
if (summary.repairPlan && typeof summary.repairPlan.repairBlockedByDirtyGse !== 'boolean') failures.push(`${target.id}:repairBlockedByDirtyGse not boolean`)
|
|
90
|
+
if (summary.repairPlan && typeof summary.repairPlan.repairBlockedByDirtyWorktree !== 'boolean') failures.push(`${target.id}:repairBlockedByDirtyWorktree not boolean`)
|
|
91
|
+
if (summary.repairPlan && typeof summary.repairPlan.dirtyTargetWorktree !== 'boolean') failures.push(`${target.id}:dirtyTargetWorktree not boolean`)
|
|
92
|
+
if (summary.repairPlan && !Array.isArray(summary.repairPlan.steps)) failures.push(`${target.id}:repairPlan steps not array`)
|
|
93
|
+
if (!Array.isArray(summary.recommendedNextActions)) failures.push(`${target.id}:recommendedNextActions not array`)
|
|
94
|
+
if (summary.repairPlan?.repairBlockedByDirtyWorktree) {
|
|
95
|
+
const firstAction = String(summary.recommendedNextActions?.[0] ?? '')
|
|
96
|
+
if (!firstAction.includes('worktree ownership')) failures.push(`${target.id}:dirty repair does not prioritize worktree ownership`)
|
|
97
|
+
}
|
|
98
|
+
if (summary.classification === 'target-local-adoption-hygiene' && summary.topLocalIssues.length === 0) failures.push(`${target.id}:local hygiene without issue source`)
|
|
99
|
+
}
|
|
100
|
+
return failures
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
function checkBom() {
|
|
68
104
|
const roots = ['SKILL.md', 'references', 'assets', '.gse', '.learnings', 'examples', 'agents', 'scripts']
|
|
69
105
|
const extensions = new Set(['.md', '.yaml', '.yml', '.mjs'])
|
|
70
106
|
const bad = []
|
|
@@ -1165,15 +1201,16 @@ checks.push({
|
|
|
1165
1201
|
})
|
|
1166
1202
|
const targetHardeningDrills = run(process.execPath, [path.join(root, 'scripts', 'audit-target-hardening-drills.mjs'), '--root', root, '--json'])
|
|
1167
1203
|
const targetHardeningDrillsData = parseJson(targetHardeningDrills.stdout)
|
|
1204
|
+
const targetHardeningAdoptionFailures = adoptionSummaryFailures(targetHardeningDrillsData)
|
|
1168
1205
|
checks.push({
|
|
1169
1206
|
id: 'validate-22e',
|
|
1170
1207
|
label: 'target project hardening drill audit',
|
|
1171
|
-
status: targetHardeningDrills.status === 0 ? 'passed' : 'failed',
|
|
1208
|
+
status: targetHardeningDrills.status === 0 && targetHardeningAdoptionFailures.length === 0 ? 'passed' : 'failed',
|
|
1172
1209
|
command: targetHardeningDrills.command,
|
|
1173
1210
|
summary: targetHardeningDrillsData
|
|
1174
|
-
? { status: targetHardeningDrillsData.summary?.status, checks: targetHardeningDrillsData.summary ? targetHardeningDrillsData.summary.passed + '/' + targetHardeningDrillsData.summary.total : null, mode: targetHardeningDrillsData.summary?.mode, targetHardeningDrills: targetHardeningDrillsData.workflows?.targetHardeningDrills }
|
|
1211
|
+
? { status: targetHardeningDrillsData.summary?.status, checks: targetHardeningDrillsData.summary ? targetHardeningDrillsData.summary.passed + '/' + targetHardeningDrillsData.summary.total : null, mode: targetHardeningDrillsData.summary?.mode, targetHardeningDrills: targetHardeningDrillsData.workflows?.targetHardeningDrills, targetAdoptionHygieneSummary: targetHardeningDrillsData.workflows?.targetAdoptionHygieneSummary, adoptionFailures: targetHardeningAdoptionFailures }
|
|
1175
1212
|
: null,
|
|
1176
|
-
stderr: targetHardeningDrills.stderr,
|
|
1213
|
+
stderr: targetHardeningAdoptionFailures.length > 0 ? targetHardeningAdoptionFailures.join('; ') : targetHardeningDrills.stderr,
|
|
1177
1214
|
})
|
|
1178
1215
|
const maintenanceCadence = run(process.execPath, [path.join(root, 'scripts', 'audit-maintenance-cadence.mjs'), '--root', root, '--json'])
|
|
1179
1216
|
const maintenanceCadenceData = parseJson(maintenanceCadence.stdout)
|