@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.
Files changed (86) hide show
  1. package/.gse/releases/public-github-release-v0.1.2.md +49 -0
  2. package/.gse/releases/public-registry-publication-npm.md +49 -49
  3. package/.gse/state.json +148 -26
  4. package/CHANGELOG.md +52 -8
  5. package/README.md +13 -6
  6. package/README.zh-CN.md +13 -6
  7. package/SKILL.md +32 -12
  8. package/assets/templates/dispatch-packet.md +22 -14
  9. package/assets/templates/evidence.md +11 -5
  10. package/assets/templates/role-fallback-packet.md +49 -0
  11. package/package.json +18 -10
  12. package/references/agent-roles.md +41 -20
  13. package/references/commands.md +75 -45
  14. package/references/drift-audit.md +2 -1
  15. package/references/evidence-taxonomy.md +46 -9
  16. package/references/file-ownership.md +17 -13
  17. package/references/final-form-roadmap.md +203 -0
  18. package/references/final-readiness.md +3 -3
  19. package/references/host-adapters.md +38 -10
  20. package/references/learning-system.md +24 -8
  21. package/references/maintenance-cadence.md +51 -0
  22. package/references/project-guards.md +52 -0
  23. package/references/quality-gates.md +18 -11
  24. package/references/role-dispatch-fallback.md +54 -0
  25. package/references/tool-adapters.md +13 -3
  26. package/scripts/audit-close-gate-hardening.mjs +188 -0
  27. package/scripts/audit-close-gate.mjs +219 -33
  28. package/scripts/audit-command-execution.mjs +30 -17
  29. package/scripts/audit-commands.mjs +7 -5
  30. package/scripts/audit-completion-plan-drill.mjs +271 -0
  31. package/scripts/audit-completion-readiness.mjs +9 -6
  32. package/scripts/audit-continue-preflight.mjs +318 -0
  33. package/scripts/audit-evidence-levels.mjs +217 -0
  34. package/scripts/audit-evidence-review-queue.mjs +206 -0
  35. package/scripts/audit-final-acceptance-packet.mjs +9 -9
  36. package/scripts/audit-final-form-progress-report.mjs +19 -18
  37. package/scripts/audit-final-form-roadmap.mjs +157 -0
  38. package/scripts/audit-final-form-stale-copy.mjs +2 -2
  39. package/scripts/audit-final-readiness.mjs +3 -3
  40. package/scripts/audit-fresh-session-readiness.mjs +1 -1
  41. package/scripts/audit-host-capabilities.mjs +237 -0
  42. package/scripts/audit-installed-sync.mjs +203 -0
  43. package/scripts/audit-learning-drift.mjs +292 -0
  44. package/scripts/audit-learning-promotion.mjs +351 -0
  45. package/scripts/audit-learning-system.mjs +24 -14
  46. package/scripts/audit-local-final-form-completion.mjs +11 -10
  47. package/scripts/audit-maintenance-cadence.mjs +139 -0
  48. package/scripts/audit-maintenance-snapshot.mjs +181 -0
  49. package/scripts/audit-npm-package-metadata.mjs +8 -2
  50. package/scripts/audit-npm-publish-dry-run.mjs +10 -4
  51. package/scripts/audit-npm-tarball-install.mjs +9 -3
  52. package/scripts/audit-owner-external-gate-kit.mjs +12 -11
  53. package/scripts/audit-project-guards.mjs +189 -0
  54. package/scripts/audit-project.mjs +14 -11
  55. package/scripts/audit-public-acceptance-handoff.mjs +10 -10
  56. package/scripts/audit-public-acceptance-readiness.mjs +6 -6
  57. package/scripts/audit-public-release-checklist.mjs +17 -15
  58. package/scripts/audit-release-bundle.mjs +13 -11
  59. package/scripts/audit-release-owner-action-plan-drill.mjs +5 -4
  60. package/scripts/audit-release-owner-action-plan.mjs +10 -10
  61. package/scripts/audit-release-status-manifest.mjs +4 -4
  62. package/scripts/audit-roadmap-consistency.mjs +11 -7
  63. package/scripts/audit-role-dispatch-fallback.mjs +212 -0
  64. package/scripts/audit-session-sync.mjs +127 -0
  65. package/scripts/audit-state-freshness.mjs +6 -5
  66. package/scripts/audit-state-repair.mjs +360 -0
  67. package/scripts/audit-target-hardening-drills.mjs +518 -0
  68. package/scripts/audit-tool-fallback-policy.mjs +180 -0
  69. package/scripts/audit-ui-browser-evidence-policy.mjs +191 -0
  70. package/scripts/audit-validation-profiles.mjs +6 -4
  71. package/scripts/backfill-evidence-levels.mjs +98 -0
  72. package/scripts/check-encoding.mjs +72 -0
  73. package/scripts/generate-continue-packet.mjs +1487 -0
  74. package/scripts/generate-final-acceptance-packet.mjs +23 -8
  75. package/scripts/generate-final-form-progress-report.mjs +25 -23
  76. package/scripts/generate-host-runtime-evidence-handoff.mjs +23 -16
  77. package/scripts/generate-maintenance-snapshot.mjs +216 -0
  78. package/scripts/generate-public-acceptance-handoff.mjs +26 -14
  79. package/scripts/generate-release-owner-action-plan.mjs +4 -3
  80. package/scripts/generate-release-status-manifest.mjs +4 -3
  81. package/scripts/init-project.mjs +144 -63
  82. package/scripts/record-learning.mjs +37 -8
  83. package/scripts/record-session-sync.mjs +87 -0
  84. package/scripts/run-gse-command.mjs +79 -47
  85. package/scripts/run-validation-profile.mjs +24 -5
  86. package/scripts/validate-gse.mjs +262 -9
@@ -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 checkBom() {
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({