@t275005746/gse 0.1.1 → 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 +148 -26
- package/CHANGELOG.md +52 -8
- package/README.md +13 -6
- package/README.zh-CN.md +13 -6
- package/SKILL.md +32 -12
- package/assets/templates/dispatch-packet.md +22 -14
- package/assets/templates/evidence.md +11 -5
- package/assets/templates/role-fallback-packet.md +49 -0
- package/package.json +18 -10
- package/references/agent-roles.md +41 -20
- package/references/commands.md +75 -45
- package/references/drift-audit.md +2 -1
- package/references/evidence-taxonomy.md +46 -9
- package/references/file-ownership.md +17 -13
- package/references/final-form-roadmap.md +203 -0
- package/references/final-readiness.md +3 -3
- package/references/host-adapters.md +38 -10
- package/references/learning-system.md +24 -8
- package/references/maintenance-cadence.md +51 -0
- package/references/project-guards.md +52 -0
- package/references/quality-gates.md +18 -11
- package/references/role-dispatch-fallback.md +54 -0
- package/references/tool-adapters.md +13 -3
- package/scripts/audit-close-gate-hardening.mjs +188 -0
- package/scripts/audit-close-gate.mjs +219 -33
- package/scripts/audit-command-execution.mjs +30 -17
- package/scripts/audit-commands.mjs +7 -5
- package/scripts/audit-completion-plan-drill.mjs +271 -0
- package/scripts/audit-completion-readiness.mjs +9 -6
- package/scripts/audit-continue-preflight.mjs +318 -0
- package/scripts/audit-evidence-levels.mjs +217 -0
- 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.mjs +3 -3
- package/scripts/audit-fresh-session-readiness.mjs +1 -1
- package/scripts/audit-host-capabilities.mjs +237 -0
- 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-npm-package-metadata.mjs +8 -2
- package/scripts/audit-npm-publish-dry-run.mjs +10 -4
- package/scripts/audit-npm-tarball-install.mjs +9 -3
- package/scripts/audit-owner-external-gate-kit.mjs +12 -11
- package/scripts/audit-project-guards.mjs +189 -0
- package/scripts/audit-project.mjs +14 -11
- package/scripts/audit-public-acceptance-handoff.mjs +10 -10
- package/scripts/audit-public-acceptance-readiness.mjs +6 -6
- package/scripts/audit-public-release-checklist.mjs +17 -15
- 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-status-manifest.mjs +4 -4
- package/scripts/audit-roadmap-consistency.mjs +11 -7
- package/scripts/audit-role-dispatch-fallback.mjs +212 -0
- package/scripts/audit-session-sync.mjs +127 -0
- package/scripts/audit-state-freshness.mjs +6 -5
- package/scripts/audit-state-repair.mjs +360 -0
- package/scripts/audit-target-hardening-drills.mjs +518 -0
- package/scripts/audit-tool-fallback-policy.mjs +180 -0
- package/scripts/audit-ui-browser-evidence-policy.mjs +191 -0
- package/scripts/audit-validation-profiles.mjs +6 -4
- package/scripts/backfill-evidence-levels.mjs +98 -0
- package/scripts/check-encoding.mjs +72 -0
- package/scripts/generate-continue-packet.mjs +1487 -0
- package/scripts/generate-final-acceptance-packet.mjs +23 -8
- package/scripts/generate-final-form-progress-report.mjs +25 -23
- package/scripts/generate-host-runtime-evidence-handoff.mjs +23 -16
- package/scripts/generate-maintenance-snapshot.mjs +216 -0
- package/scripts/generate-public-acceptance-handoff.mjs +26 -14
- package/scripts/generate-release-owner-action-plan.mjs +4 -3
- package/scripts/generate-release-status-manifest.mjs +4 -3
- package/scripts/init-project.mjs +144 -63
- package/scripts/record-learning.mjs +37 -8
- 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/validate-gse.mjs +262 -9
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 = []
|
|
@@ -590,6 +626,18 @@ checks.push({
|
|
|
590
626
|
: null,
|
|
591
627
|
stderr: roadmapConsistency.stderr,
|
|
592
628
|
})
|
|
629
|
+
const finalFormRoadmap = run(process.execPath, [path.join(root, 'scripts', 'audit-final-form-roadmap.mjs'), '--root', root, '--json'])
|
|
630
|
+
const finalFormRoadmapData = parseJson(finalFormRoadmap.stdout)
|
|
631
|
+
checks.push({
|
|
632
|
+
id: 'validate-14b',
|
|
633
|
+
label: 'final-form roadmap contract audit',
|
|
634
|
+
status: finalFormRoadmap.status === 0 ? 'passed' : 'failed',
|
|
635
|
+
command: finalFormRoadmap.command,
|
|
636
|
+
summary: finalFormRoadmapData
|
|
637
|
+
? { status: finalFormRoadmapData.summary?.status, checks: finalFormRoadmapData.summary ? finalFormRoadmapData.summary.passed + '/' + finalFormRoadmapData.summary.total : null, finalFormRoadmap: finalFormRoadmapData.workflows?.finalFormRoadmap }
|
|
638
|
+
: null,
|
|
639
|
+
stderr: finalFormRoadmap.stderr,
|
|
640
|
+
})
|
|
593
641
|
if (skipCompletionReadiness) {
|
|
594
642
|
checks.push({
|
|
595
643
|
id: 'validate-15',
|
|
@@ -983,6 +1031,114 @@ checks.push({
|
|
|
983
1031
|
: null,
|
|
984
1032
|
stderr: commandSemantics.stderr,
|
|
985
1033
|
})
|
|
1034
|
+
const continuePreflight = run(process.execPath, [path.join(root, 'scripts', 'audit-continue-preflight.mjs'), '--root', root, '--json'])
|
|
1035
|
+
const continuePreflightData = parseJson(continuePreflight.stdout)
|
|
1036
|
+
checks.push({
|
|
1037
|
+
id: 'validate-22a',
|
|
1038
|
+
label: '/gse continue hard preflight audit',
|
|
1039
|
+
status: continuePreflight.status === 0 ? 'passed' : 'failed',
|
|
1040
|
+
command: continuePreflight.command,
|
|
1041
|
+
summary: continuePreflightData
|
|
1042
|
+
? { status: continuePreflightData.summary?.status, checks: continuePreflightData.summary ? continuePreflightData.summary.passed + '/' + continuePreflightData.summary.total : null, continueHardPreflight: continuePreflightData.workflows?.continueHardPreflight, stateCompaction: continuePreflightData.workflows?.stateCompaction }
|
|
1043
|
+
: null,
|
|
1044
|
+
stderr: continuePreflight.stderr,
|
|
1045
|
+
})
|
|
1046
|
+
const completionPlanDrill = run(process.execPath, [path.join(root, 'scripts', 'audit-completion-plan-drill.mjs'), '--root', root, '--json'])
|
|
1047
|
+
const completionPlanDrillData = parseJson(completionPlanDrill.stdout)
|
|
1048
|
+
checks.push({
|
|
1049
|
+
id: 'validate-22a1',
|
|
1050
|
+
label: '/gse continue completion plan drill audit',
|
|
1051
|
+
status: completionPlanDrill.status === 0 ? 'passed' : 'failed',
|
|
1052
|
+
command: completionPlanDrill.command,
|
|
1053
|
+
summary: completionPlanDrillData
|
|
1054
|
+
? { status: completionPlanDrillData.summary?.status, checks: completionPlanDrillData.summary ? completionPlanDrillData.summary.passed + '/' + completionPlanDrillData.summary.total : null, completionPlanDrill: completionPlanDrillData.workflows?.completionPlanDrill, cleanWorktreeFalsePositiveGuard: completionPlanDrillData.workflows?.cleanWorktreeFalsePositiveGuard }
|
|
1055
|
+
: null,
|
|
1056
|
+
stderr: completionPlanDrill.stderr,
|
|
1057
|
+
})
|
|
1058
|
+
const projectGuards = run(process.execPath, [path.join(root, 'scripts', 'audit-project-guards.mjs'), '--root', root, '--json'])
|
|
1059
|
+
const projectGuardsData = parseJson(projectGuards.stdout)
|
|
1060
|
+
checks.push({
|
|
1061
|
+
id: 'validate-22a2',
|
|
1062
|
+
label: 'project guard preflight audit',
|
|
1063
|
+
status: projectGuards.status === 0 ? 'passed' : 'failed',
|
|
1064
|
+
command: projectGuards.command,
|
|
1065
|
+
summary: projectGuardsData
|
|
1066
|
+
? { status: projectGuardsData.summary?.status, checks: projectGuardsData.summary ? projectGuardsData.summary.passed + '/' + projectGuardsData.summary.total : null, projectGuards: projectGuardsData.workflows?.projectGuards, initProjectGuardScaffold: projectGuardsData.workflows?.initProjectGuardScaffold }
|
|
1067
|
+
: null,
|
|
1068
|
+
stderr: projectGuards.stderr,
|
|
1069
|
+
})
|
|
1070
|
+
const evidenceLevels = run(process.execPath, [path.join(root, 'scripts', 'audit-evidence-levels.mjs'), '--root', root, '--target', root, '--json'])
|
|
1071
|
+
const evidenceLevelsData = parseJson(evidenceLevels.stdout)
|
|
1072
|
+
checks.push({
|
|
1073
|
+
id: 'validate-22a3',
|
|
1074
|
+
label: 'explicit evidence level taxonomy audit',
|
|
1075
|
+
status: evidenceLevels.status === 0 ? 'passed' : 'failed',
|
|
1076
|
+
command: evidenceLevels.command,
|
|
1077
|
+
summary: evidenceLevelsData
|
|
1078
|
+
? { status: evidenceLevelsData.summary?.status, checks: evidenceLevelsData.summary ? evidenceLevelsData.summary.passed + '/' + evidenceLevelsData.summary.total : null, evidenceLevels: evidenceLevelsData.workflows?.evidenceLevels, downgraded: evidenceLevelsData.workflows?.downgraded, missingLevel: evidenceLevelsData.workflows?.missingLevel }
|
|
1079
|
+
: null,
|
|
1080
|
+
stderr: evidenceLevels.stderr,
|
|
1081
|
+
})
|
|
1082
|
+
const evidenceReviewQueue = run(process.execPath, [path.join(root, 'scripts', 'audit-evidence-review-queue.mjs'), '--root', root, '--target', root, '--json'])
|
|
1083
|
+
const evidenceReviewQueueData = parseJson(evidenceReviewQueue.stdout)
|
|
1084
|
+
checks.push({
|
|
1085
|
+
id: 'validate-22a3a',
|
|
1086
|
+
label: 'historical evidence review queue audit',
|
|
1087
|
+
status: evidenceReviewQueue.status === 0 ? 'passed' : 'failed',
|
|
1088
|
+
command: evidenceReviewQueue.command,
|
|
1089
|
+
summary: evidenceReviewQueueData
|
|
1090
|
+
? { status: evidenceReviewQueueData.summary?.status, checks: evidenceReviewQueueData.summary ? evidenceReviewQueueData.summary.passed + '/' + evidenceReviewQueueData.summary.total : null, evidenceReviewQueue: evidenceReviewQueueData.workflows?.evidenceReviewQueue, needsReview: evidenceReviewQueueData.reviewQueue?.needsReview, eligibleForStrongerReview: evidenceReviewQueueData.reviewQueue?.eligibleForStrongerReview }
|
|
1091
|
+
: null,
|
|
1092
|
+
stderr: evidenceReviewQueue.stderr,
|
|
1093
|
+
})
|
|
1094
|
+
const uiBrowserEvidencePolicy = run(process.execPath, [path.join(root, 'scripts', 'audit-ui-browser-evidence-policy.mjs'), '--root', root, '--target', root, '--json'])
|
|
1095
|
+
const uiBrowserEvidencePolicyData = parseJson(uiBrowserEvidencePolicy.stdout)
|
|
1096
|
+
checks.push({
|
|
1097
|
+
id: 'validate-22a3b',
|
|
1098
|
+
label: 'UI/browser evidence policy audit',
|
|
1099
|
+
status: uiBrowserEvidencePolicy.status === 0 ? 'passed' : 'failed',
|
|
1100
|
+
command: uiBrowserEvidencePolicy.command,
|
|
1101
|
+
summary: uiBrowserEvidencePolicyData
|
|
1102
|
+
? { status: uiBrowserEvidencePolicyData.summary?.status, checks: uiBrowserEvidencePolicyData.summary ? uiBrowserEvidencePolicyData.summary.passed + '/' + uiBrowserEvidencePolicyData.summary.total : null, uiBrowserEvidencePolicy: uiBrowserEvidencePolicyData.workflows?.uiBrowserEvidencePolicy, targetDowngrades: uiBrowserEvidencePolicyData.workflows?.targetDowngrades }
|
|
1103
|
+
: null,
|
|
1104
|
+
stderr: uiBrowserEvidencePolicy.stderr,
|
|
1105
|
+
})
|
|
1106
|
+
const roleDispatchFallback = run(process.execPath, [path.join(root, 'scripts', 'audit-role-dispatch-fallback.mjs'), '--root', root, '--target', root, '--json'])
|
|
1107
|
+
const roleDispatchFallbackData = parseJson(roleDispatchFallback.stdout)
|
|
1108
|
+
checks.push({
|
|
1109
|
+
id: 'validate-22a4',
|
|
1110
|
+
label: 'role dispatch fallback packet audit',
|
|
1111
|
+
status: roleDispatchFallback.status === 0 ? 'passed' : 'failed',
|
|
1112
|
+
command: roleDispatchFallback.command,
|
|
1113
|
+
summary: roleDispatchFallbackData
|
|
1114
|
+
? { status: roleDispatchFallbackData.summary?.status, checks: roleDispatchFallbackData.summary ? roleDispatchFallbackData.summary.passed + '/' + roleDispatchFallbackData.summary.total : null, roleDispatchFallback: roleDispatchFallbackData.workflows?.roleDispatchFallback, packets: roleDispatchFallbackData.workflows?.packets, sequentialFallbackRoles: roleDispatchFallbackData.workflows?.sequentialFallbackRoles }
|
|
1115
|
+
: null,
|
|
1116
|
+
stderr: roleDispatchFallback.stderr,
|
|
1117
|
+
})
|
|
1118
|
+
const closeGateHardening = run(process.execPath, [path.join(root, 'scripts', 'audit-close-gate-hardening.mjs'), '--root', root, '--json'])
|
|
1119
|
+
const closeGateHardeningData = parseJson(closeGateHardening.stdout)
|
|
1120
|
+
checks.push({
|
|
1121
|
+
id: 'validate-22a6',
|
|
1122
|
+
label: 'close gate fake-dispatch and file-ownership hardening audit',
|
|
1123
|
+
status: closeGateHardening.status === 0 ? 'passed' : 'failed',
|
|
1124
|
+
command: closeGateHardening.command,
|
|
1125
|
+
summary: closeGateHardeningData
|
|
1126
|
+
? { status: closeGateHardeningData.summary?.status, checks: closeGateHardeningData.summary ? closeGateHardeningData.summary.passed + '/' + closeGateHardeningData.summary.total : null, fakeDispatchCloseGate: closeGateHardeningData.workflows?.fakeDispatchCloseGate, fileOwnershipCloseGate: closeGateHardeningData.workflows?.fileOwnershipCloseGate }
|
|
1127
|
+
: null,
|
|
1128
|
+
stderr: closeGateHardening.stderr,
|
|
1129
|
+
})
|
|
1130
|
+
const stateRepair = run(process.execPath, [path.join(root, 'scripts', 'audit-state-repair.mjs'), '--root', root, '--target', root, '--json'])
|
|
1131
|
+
const stateRepairData = parseJson(stateRepair.stdout)
|
|
1132
|
+
checks.push({
|
|
1133
|
+
id: 'validate-22a5',
|
|
1134
|
+
label: 'state and evidence repair path audit',
|
|
1135
|
+
status: stateRepair.status === 0 ? 'passed' : 'failed',
|
|
1136
|
+
command: stateRepair.command,
|
|
1137
|
+
summary: stateRepairData
|
|
1138
|
+
? { status: stateRepairData.summary?.status, actions: stateRepairData.summary?.actions, hard: stateRepairData.summary?.hard, warnings: stateRepairData.summary?.warnings, writes: stateRepairData.summary?.writes }
|
|
1139
|
+
: null,
|
|
1140
|
+
stderr: stateRepair.stderr,
|
|
1141
|
+
})
|
|
986
1142
|
const learningSystem = run(process.execPath, [path.join(root, 'scripts', 'audit-learning-system.mjs'), '--root', root, '--json'])
|
|
987
1143
|
const learningSystemData = parseJson(learningSystem.stdout)
|
|
988
1144
|
checks.push({
|
|
@@ -995,6 +1151,103 @@ checks.push({
|
|
|
995
1151
|
: null,
|
|
996
1152
|
stderr: learningSystem.stderr,
|
|
997
1153
|
})
|
|
1154
|
+
const learningPromotion = run(process.execPath, [path.join(root, 'scripts', 'audit-learning-promotion.mjs'), '--root', root, '--target', root, '--json'])
|
|
1155
|
+
const learningPromotionData = parseJson(learningPromotion.stdout)
|
|
1156
|
+
checks.push({
|
|
1157
|
+
id: 'validate-22c',
|
|
1158
|
+
label: 'learning promotion automation audit',
|
|
1159
|
+
status: learningPromotion.status === 0 ? 'passed' : 'failed',
|
|
1160
|
+
command: learningPromotion.command,
|
|
1161
|
+
summary: learningPromotionData
|
|
1162
|
+
? { status: learningPromotionData.summary?.status, checks: learningPromotionData.summary ? learningPromotionData.summary.passed + '/' + learningPromotionData.summary.total : null, promoted: learningPromotionData.summary?.promoted, guardCandidates: learningPromotionData.summary?.guardCandidates }
|
|
1163
|
+
: null,
|
|
1164
|
+
stderr: learningPromotion.stderr,
|
|
1165
|
+
})
|
|
1166
|
+
const learningDrift = run(process.execPath, [path.join(root, 'scripts', 'audit-learning-drift.mjs'), '--root', root, '--target', root, '--json'])
|
|
1167
|
+
const learningDriftData = parseJson(learningDrift.stdout)
|
|
1168
|
+
checks.push({
|
|
1169
|
+
id: 'validate-22c2',
|
|
1170
|
+
label: 'learning promotion drift audit',
|
|
1171
|
+
status: learningDrift.status === 0 ? 'passed' : 'failed',
|
|
1172
|
+
command: learningDrift.command,
|
|
1173
|
+
summary: learningDriftData
|
|
1174
|
+
? { status: learningDriftData.summary?.status, checks: learningDriftData.summary ? learningDriftData.summary.passed + '/' + learningDriftData.summary.total : null, candidates: learningDriftData.summary?.candidates, enforced: learningDriftData.summary?.enforced, highUnenforced: learningDriftData.summary?.highUnenforced }
|
|
1175
|
+
: null,
|
|
1176
|
+
stderr: learningDrift.stderr,
|
|
1177
|
+
})
|
|
1178
|
+
const hostCapabilities = run(process.execPath, [path.join(root, 'scripts', 'audit-host-capabilities.mjs'), '--root', root, '--target', root, '--json'])
|
|
1179
|
+
const hostCapabilitiesData = parseJson(hostCapabilities.stdout)
|
|
1180
|
+
checks.push({
|
|
1181
|
+
id: 'validate-22d',
|
|
1182
|
+
label: 'host capability record audit',
|
|
1183
|
+
status: hostCapabilities.status === 0 ? 'passed' : 'failed',
|
|
1184
|
+
command: hostCapabilities.command,
|
|
1185
|
+
summary: hostCapabilitiesData
|
|
1186
|
+
? { status: hostCapabilitiesData.summary?.status, checks: hostCapabilitiesData.summary ? hostCapabilitiesData.summary.passed + '/' + hostCapabilitiesData.summary.total : null, hostCapabilityRecords: hostCapabilitiesData.workflows?.hostCapabilityRecords, nativeSlashCommandBoundary: hostCapabilitiesData.workflows?.nativeSlashCommandBoundary }
|
|
1187
|
+
: null,
|
|
1188
|
+
stderr: hostCapabilities.stderr,
|
|
1189
|
+
})
|
|
1190
|
+
const toolFallbackPolicy = run(process.execPath, [path.join(root, 'scripts', 'audit-tool-fallback-policy.mjs'), '--root', root, '--target', root, '--json'])
|
|
1191
|
+
const toolFallbackPolicyData = parseJson(toolFallbackPolicy.stdout)
|
|
1192
|
+
checks.push({
|
|
1193
|
+
id: 'validate-22d2',
|
|
1194
|
+
label: 'optional tool fallback policy audit',
|
|
1195
|
+
status: toolFallbackPolicy.status === 0 ? 'passed' : 'failed',
|
|
1196
|
+
command: toolFallbackPolicy.command,
|
|
1197
|
+
summary: toolFallbackPolicyData
|
|
1198
|
+
? { status: toolFallbackPolicyData.summary?.status, checks: toolFallbackPolicyData.summary ? toolFallbackPolicyData.summary.passed + '/' + toolFallbackPolicyData.summary.total : null, optionalToolFallbackPolicy: toolFallbackPolicyData.workflows?.optionalToolFallbackPolicy }
|
|
1199
|
+
: null,
|
|
1200
|
+
stderr: toolFallbackPolicy.stderr,
|
|
1201
|
+
})
|
|
1202
|
+
const targetHardeningDrills = run(process.execPath, [path.join(root, 'scripts', 'audit-target-hardening-drills.mjs'), '--root', root, '--json'])
|
|
1203
|
+
const targetHardeningDrillsData = parseJson(targetHardeningDrills.stdout)
|
|
1204
|
+
const targetHardeningAdoptionFailures = adoptionSummaryFailures(targetHardeningDrillsData)
|
|
1205
|
+
checks.push({
|
|
1206
|
+
id: 'validate-22e',
|
|
1207
|
+
label: 'target project hardening drill audit',
|
|
1208
|
+
status: targetHardeningDrills.status === 0 && targetHardeningAdoptionFailures.length === 0 ? 'passed' : 'failed',
|
|
1209
|
+
command: targetHardeningDrills.command,
|
|
1210
|
+
summary: targetHardeningDrillsData
|
|
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 }
|
|
1212
|
+
: null,
|
|
1213
|
+
stderr: targetHardeningAdoptionFailures.length > 0 ? targetHardeningAdoptionFailures.join('; ') : targetHardeningDrills.stderr,
|
|
1214
|
+
})
|
|
1215
|
+
const maintenanceCadence = run(process.execPath, [path.join(root, 'scripts', 'audit-maintenance-cadence.mjs'), '--root', root, '--json'])
|
|
1216
|
+
const maintenanceCadenceData = parseJson(maintenanceCadence.stdout)
|
|
1217
|
+
checks.push({
|
|
1218
|
+
id: 'validate-22f',
|
|
1219
|
+
label: 'maintenance cadence audit',
|
|
1220
|
+
status: maintenanceCadence.status === 0 ? 'passed' : 'failed',
|
|
1221
|
+
command: maintenanceCadence.command,
|
|
1222
|
+
summary: maintenanceCadenceData
|
|
1223
|
+
? { status: maintenanceCadenceData.summary?.status, checks: maintenanceCadenceData.summary ? maintenanceCadenceData.summary.passed + '/' + maintenanceCadenceData.summary.total : null, maintenanceCadence: maintenanceCadenceData.workflows?.maintenanceCadence }
|
|
1224
|
+
: null,
|
|
1225
|
+
stderr: maintenanceCadence.stderr,
|
|
1226
|
+
})
|
|
1227
|
+
const maintenanceSnapshot = run(process.execPath, [path.join(root, 'scripts', 'audit-maintenance-snapshot.mjs'), '--root', root, '--json'])
|
|
1228
|
+
const maintenanceSnapshotData = parseJson(maintenanceSnapshot.stdout)
|
|
1229
|
+
checks.push({
|
|
1230
|
+
id: 'validate-22f2',
|
|
1231
|
+
label: 'maintenance snapshot audit',
|
|
1232
|
+
status: maintenanceSnapshot.status === 0 ? 'passed' : 'failed',
|
|
1233
|
+
command: maintenanceSnapshot.command,
|
|
1234
|
+
summary: maintenanceSnapshotData
|
|
1235
|
+
? { status: maintenanceSnapshotData.summary?.status, checks: maintenanceSnapshotData.summary ? maintenanceSnapshotData.summary.passed + '/' + maintenanceSnapshotData.summary.total : null, maintenanceSnapshot: maintenanceSnapshotData.workflows?.maintenanceSnapshot }
|
|
1236
|
+
: null,
|
|
1237
|
+
stderr: maintenanceSnapshot.stderr,
|
|
1238
|
+
})
|
|
1239
|
+
const installedSync = run(process.execPath, [path.join(root, 'scripts', 'audit-installed-sync.mjs'), '--root', root, '--json'])
|
|
1240
|
+
const installedSyncData = parseJson(installedSync.stdout)
|
|
1241
|
+
checks.push({
|
|
1242
|
+
id: 'validate-22g',
|
|
1243
|
+
label: 'installed sync freshness audit',
|
|
1244
|
+
status: installedSync.status === 0 ? 'passed' : 'failed',
|
|
1245
|
+
command: installedSync.command,
|
|
1246
|
+
summary: installedSyncData
|
|
1247
|
+
? { status: installedSyncData.summary?.status, checks: installedSyncData.summary ? installedSyncData.summary.passed + '/' + installedSyncData.summary.total : null, freshPackage: installedSyncData.workflows?.freshPackage, installedSync: installedSyncData.workflows?.installedSync }
|
|
1248
|
+
: null,
|
|
1249
|
+
stderr: installedSync.stderr,
|
|
1250
|
+
})
|
|
998
1251
|
const readmeDocs = run(process.execPath, [path.join(root, 'scripts', 'audit-readme-docs.mjs'), '--root', root, '--json'])
|
|
999
1252
|
const readmeDocsData = parseJson(readmeDocs.stdout)
|
|
1000
1253
|
checks.push({
|