agentera 3.0.0-dev.4 → 3.0.0-dev.46

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 (585) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +108 -22
  3. package/bundle/.agentera-npx-bundle.json +1 -1
  4. package/bundle/CHANGELOG.md +1351 -0
  5. package/bundle/DESIGN.md +229 -0
  6. package/bundle/LICENSE +201 -0
  7. package/bundle/README.md +143 -0
  8. package/bundle/UPGRADE.md +236 -0
  9. package/bundle/extract-corpus-parity.json +21 -0
  10. package/bundle/fixtures/routing/hybrid-corpus.yaml +154 -0
  11. package/bundle/references/adapters/package-publication.json +437 -0
  12. package/bundle/references/adapters/package-registry.yaml +434 -189
  13. package/bundle/references/adapters/package-surface-characterization.md +66 -35
  14. package/bundle/references/adapters/runtime-lifecycle-adapters.yaml +74 -0
  15. package/bundle/references/adapters/runtime-lifecycle-authority.yaml +62 -0
  16. package/bundle/references/adapters/runtime-lifecycle-operation-contract.yaml +84 -0
  17. package/bundle/references/adapters/runtime-retired-resources.yaml +333 -0
  18. package/bundle/references/analysis/evidence-tier-authority.yaml +518 -0
  19. package/bundle/references/analysis/verification-policy.yaml +191 -0
  20. package/bundle/references/artifacts/artifact-registry-interface-model.yaml +20 -10
  21. package/bundle/references/artifacts/glossary-entry-contract.yaml +1254 -0
  22. package/bundle/references/artifacts/state-storage-authority.yaml +2982 -0
  23. package/bundle/references/artifacts/verbosity-budget-authority.yaml +42 -0
  24. package/bundle/references/cli/app-lifecycle-vocabulary.yaml +7 -8
  25. package/bundle/references/cli/capability-instruction-contract.yaml +97 -59
  26. package/bundle/references/cli/hybrid-route-contract.yaml +438 -0
  27. package/bundle/references/cli/routing-model.md +155 -0
  28. package/bundle/references/cli/trigger-schema-enrichment.md +147 -0
  29. package/bundle/references/cli/update-channels.yaml +35 -2
  30. package/bundle/references/cli/vocabulary-index.yaml +23 -20
  31. package/bundle/references/cli/vocabulary.md +337 -366
  32. package/bundle/references/meta/retained-reference-authority.yaml +151 -0
  33. package/bundle/registry.json +14 -14
  34. package/bundle/skills/agentera/SKILL.md +218 -408
  35. package/bundle/skills/agentera/capabilities/audit/schemas/artifacts.yaml +84 -0
  36. package/bundle/skills/agentera/capabilities/{inspektera → audit}/schemas/exit.yaml +2 -2
  37. package/bundle/skills/agentera/capabilities/audit/schemas/triggers.yaml +25 -0
  38. package/bundle/skills/agentera/capabilities/{inspektera → audit}/schemas/validation.yaml +37 -18
  39. package/bundle/skills/agentera/capabilities/build/schemas/artifacts.yaml +102 -0
  40. package/bundle/skills/agentera/capabilities/{realisera → build}/schemas/exit.yaml +6 -5
  41. package/bundle/skills/agentera/capabilities/build/schemas/triggers.yaml +27 -0
  42. package/bundle/skills/agentera/capabilities/build/schemas/validation.yaml +176 -0
  43. package/bundle/skills/agentera/capabilities/{visualisera → design}/schemas/artifacts.yaml +12 -12
  44. package/bundle/skills/agentera/capabilities/{visualisera → design}/schemas/exit.yaml +5 -5
  45. package/bundle/skills/agentera/capabilities/design/schemas/triggers.yaml +16 -0
  46. package/bundle/skills/agentera/capabilities/{visualisera → design}/schemas/validation.yaml +7 -7
  47. package/bundle/skills/agentera/capabilities/discuss/schemas/artifacts.yaml +51 -0
  48. package/bundle/skills/agentera/capabilities/{resonera → discuss}/schemas/exit.yaml +2 -2
  49. package/bundle/skills/agentera/capabilities/discuss/schemas/triggers.yaml +20 -0
  50. package/bundle/skills/agentera/capabilities/discuss/schemas/validation.yaml +144 -0
  51. package/bundle/skills/agentera/capabilities/document/schemas/artifacts.yaml +80 -0
  52. package/bundle/skills/agentera/capabilities/document/schemas/triggers.yaml +16 -0
  53. package/bundle/skills/agentera/capabilities/{dokumentera → document}/schemas/validation.yaml +18 -18
  54. package/bundle/skills/agentera/capabilities/{optimera → optimize}/schemas/artifacts.yaml +18 -18
  55. package/bundle/skills/agentera/capabilities/{optimera → optimize}/schemas/exit.yaml +2 -2
  56. package/bundle/skills/agentera/capabilities/optimize/schemas/triggers.yaml +16 -0
  57. package/bundle/skills/agentera/capabilities/{optimera → optimize}/schemas/validation.yaml +9 -9
  58. package/bundle/skills/agentera/capabilities/orchestrate/schemas/artifacts.yaml +76 -0
  59. package/bundle/skills/agentera/capabilities/{orkestrera → orchestrate}/schemas/exit.yaml +9 -7
  60. package/bundle/skills/agentera/capabilities/orchestrate/schemas/triggers.yaml +23 -0
  61. package/bundle/skills/agentera/capabilities/orchestrate/schemas/validation.yaml +121 -0
  62. package/bundle/skills/agentera/capabilities/plan/schemas/artifacts.yaml +66 -0
  63. package/bundle/skills/agentera/capabilities/{planera → plan}/schemas/exit.yaml +2 -2
  64. package/bundle/skills/agentera/capabilities/plan/schemas/triggers.yaml +23 -0
  65. package/bundle/skills/agentera/capabilities/plan/schemas/validation.yaml +121 -0
  66. package/bundle/skills/agentera/capabilities/profile/schemas/artifacts.yaml +23 -0
  67. package/bundle/skills/agentera/capabilities/{profilera → profile}/schemas/exit.yaml +6 -5
  68. package/bundle/skills/agentera/capabilities/profile/schemas/triggers.yaml +20 -0
  69. package/bundle/skills/agentera/capabilities/profile/schemas/validation.yaml +115 -0
  70. package/bundle/skills/agentera/capabilities/research/schemas/artifacts.yaml +24 -0
  71. package/bundle/skills/agentera/capabilities/research/schemas/triggers.yaml +16 -0
  72. package/bundle/skills/agentera/capabilities/{inspirera → research}/schemas/validation.yaml +2 -2
  73. package/bundle/skills/agentera/capabilities/status/schemas/artifacts.yaml +73 -0
  74. package/bundle/skills/agentera/capabilities/status/schemas/triggers.yaml +22 -0
  75. package/bundle/skills/agentera/capabilities/{hej → status}/schemas/validation.yaml +5 -5
  76. package/bundle/skills/agentera/capabilities/{visionera → vision}/schemas/artifacts.yaml +16 -16
  77. package/bundle/skills/agentera/capabilities/{visionera → vision}/schemas/exit.yaml +7 -6
  78. package/bundle/skills/agentera/capabilities/vision/schemas/triggers.yaml +23 -0
  79. package/bundle/skills/agentera/capabilities/{visionera → vision}/schemas/validation.yaml +18 -20
  80. package/bundle/skills/agentera/capability_schema_contract.yaml +200 -37
  81. package/bundle/skills/agentera/protocol.yaml +31 -31
  82. package/bundle/skills/agentera/route-phrases.yaml +81 -0
  83. package/bundle/skills/agentera/schemas/artifacts/changelog.yaml +5 -4
  84. package/bundle/skills/agentera/schemas/artifacts/decisions.yaml +40 -22
  85. package/bundle/skills/agentera/schemas/artifacts/design.yaml +5 -4
  86. package/bundle/skills/agentera/schemas/artifacts/docs.yaml +15 -19
  87. package/bundle/skills/agentera/schemas/artifacts/experiments.yaml +145 -14
  88. package/bundle/skills/agentera/schemas/artifacts/glossary.yaml +82 -0
  89. package/bundle/skills/agentera/schemas/artifacts/health.yaml +58 -21
  90. package/bundle/skills/agentera/schemas/artifacts/objective.yaml +22 -8
  91. package/bundle/skills/agentera/schemas/artifacts/plan.yaml +421 -33
  92. package/bundle/skills/agentera/schemas/artifacts/progress.yaml +143 -53
  93. package/bundle/skills/agentera/schemas/artifacts/todo.yaml +345 -31
  94. package/bundle/skills/agentera/schemas/artifacts/vision.yaml +3 -3
  95. package/dist/analytics/extractCorpus/cli.js +190 -0
  96. package/dist/analytics/extractCorpus/copilotSessions.js +275 -0
  97. package/dist/analytics/extractCorpus/core.js +392 -0
  98. package/dist/analytics/extractCorpus/corpus.js +167 -0
  99. package/dist/analytics/extractCorpus/coverageAudit.js +260 -0
  100. package/dist/analytics/extractCorpus/cursorSessions.js +425 -0
  101. package/dist/analytics/extractCorpus/evidenceTiers.js +603 -0
  102. package/dist/analytics/extractCorpus/extractCorpusParity.js +105 -0
  103. package/dist/analytics/extractCorpus/filesystemSources.js +118 -0
  104. package/dist/analytics/extractCorpus/index.js +14 -0
  105. package/dist/analytics/extractCorpus/jsonlSessions.js +204 -0
  106. package/dist/analytics/extractCorpus/sqliteCaps.js +43 -0
  107. package/dist/analytics/extractCorpus/sqliteSessions.js +367 -0
  108. package/dist/analytics/extractCorpus/tierReader.js +108 -0
  109. package/dist/analytics/extractCorpus.js +2 -1791
  110. package/dist/analytics/glossaryAdviceResolution.js +166 -0
  111. package/dist/analytics/glossaryInputAcquisition.js +319 -0
  112. package/dist/analytics/personalGlossaryAdmission.js +133 -0
  113. package/dist/analytics/personalGlossaryProfile.js +219 -0
  114. package/dist/analytics/profileSignals.js +211 -0
  115. package/dist/analytics/usageStats.js +169 -42
  116. package/dist/audit/terminologyDrift.js +281 -0
  117. package/dist/bin/agentera.js +3 -2
  118. package/dist/capabilities/audit/instructions.js +16 -0
  119. package/dist/capabilities/build/instructions.js +56 -0
  120. package/dist/capabilities/design/instructions.js +4 -0
  121. package/dist/capabilities/discuss/instructions.js +29 -0
  122. package/dist/capabilities/document/instructions.js +11 -0
  123. package/dist/capabilities/index.js +40 -0
  124. package/dist/capabilities/optimize/instructions.js +14 -0
  125. package/dist/capabilities/orchestrate/instructions.js +40 -0
  126. package/dist/capabilities/plan/instructions.js +32 -0
  127. package/dist/capabilities/profile/instructions.js +70 -0
  128. package/dist/capabilities/research/instructions.js +5 -0
  129. package/dist/capabilities/status/instructions.js +11 -0
  130. package/dist/capabilities/status/startupInstructions.js +34 -0
  131. package/dist/capabilities/vision/instructions.js +4 -0
  132. package/dist/cli/appContext.js +30 -24
  133. package/dist/cli/argvalidate.js +0 -1
  134. package/dist/cli/capabilityContext/benchmark.js +565 -0
  135. package/dist/cli/capabilityContext/bespoke.js +44 -0
  136. package/dist/cli/capabilityContext/build.js +242 -0
  137. package/dist/cli/capabilityContext/closeout.js +233 -0
  138. package/dist/cli/capabilityContext/contract.js +179 -0
  139. package/dist/cli/capabilityContext/evidence.js +463 -0
  140. package/dist/cli/capabilityContext/index.js +3 -0
  141. package/dist/cli/capabilityContext/orchestration.js +131 -0
  142. package/dist/cli/capabilityContext/planState.js +260 -0
  143. package/dist/cli/capabilityContext/progress.js +142 -0
  144. package/dist/cli/capabilityContext/projectVerification.js +409 -0
  145. package/dist/cli/capabilityContext/shared.js +83 -0
  146. package/dist/cli/capabilityContext/slim.js +152 -0
  147. package/dist/cli/capabilityContext/startup.js +150 -0
  148. package/dist/cli/capabilityContext/startupAggregation.js +68 -0
  149. package/dist/cli/capabilityContext/types.js +56 -0
  150. package/dist/cli/capabilityContext.js +1 -2421
  151. package/dist/cli/commands/appHome.js +22 -0
  152. package/dist/cli/commands/capability.js +5 -12
  153. package/dist/cli/commands/compact.js +41 -13
  154. package/dist/cli/commands/doctor.js +127 -97
  155. package/dist/cli/commands/durability.js +81 -0
  156. package/dist/cli/commands/glossaryAdvice.js +138 -0
  157. package/dist/cli/commands/lint.js +26 -44
  158. package/dist/cli/commands/personalGlossary.js +176 -0
  159. package/dist/cli/commands/prime/briefOrientation.js +747 -0
  160. package/dist/cli/commands/prime/buildExecutionRequest.js +165 -0
  161. package/dist/cli/commands/prime/bundleStatus.js +190 -0
  162. package/dist/cli/commands/prime/collectEntityOrientation.js +311 -0
  163. package/dist/cli/commands/prime/collectOrientationState.js +212 -0
  164. package/dist/cli/commands/prime/orientationOutput.js +397 -0
  165. package/dist/cli/commands/prime/types.js +1 -0
  166. package/dist/cli/commands/prime/v1Migration.js +38 -0
  167. package/dist/cli/commands/prime.js +80 -558
  168. package/dist/cli/commands/profileGrounding.js +55 -0
  169. package/dist/cli/commands/query.js +78 -53
  170. package/dist/cli/commands/report.js +96 -25
  171. package/dist/cli/commands/route.js +142 -0
  172. package/dist/cli/commands/schema.js +266 -143
  173. package/dist/cli/commands/state/decisions.js +387 -0
  174. package/dist/cli/commands/state/docs.js +70 -0
  175. package/dist/cli/commands/state/experimentRecords.js +151 -0
  176. package/dist/cli/commands/state/experiments.js +14 -0
  177. package/dist/cli/commands/state/get.js +129 -0
  178. package/dist/cli/commands/state/health.js +14 -0
  179. package/dist/cli/commands/state/index.js +16 -0
  180. package/dist/cli/commands/state/list.js +194 -0
  181. package/dist/cli/commands/state/objective.js +25 -0
  182. package/dist/cli/commands/state/plan.js +14 -0
  183. package/dist/cli/commands/state/planTasks.js +154 -0
  184. package/dist/cli/commands/state/plans.js +154 -0
  185. package/dist/cli/commands/state/progress.js +13 -0
  186. package/dist/cli/commands/state/shared.js +14 -0
  187. package/dist/cli/commands/state/todo.js +42 -0
  188. package/dist/cli/commands/state/write.js +434 -0
  189. package/dist/cli/commands/upgrade.js +146 -5
  190. package/dist/cli/commands/upgradeVerify.js +118 -0
  191. package/dist/cli/commands/validate.js +272 -213
  192. package/dist/cli/commands/verify.js +24 -9
  193. package/dist/cli/contracts/bundleStatus.js +1 -0
  194. package/dist/cli/contracts/orientationState.js +1 -0
  195. package/dist/cli/dispatch/argvParser.js +32 -0
  196. package/dist/cli/dispatch/check.js +372 -0
  197. package/dist/cli/dispatch/commands.js +27 -0
  198. package/dist/cli/dispatch/index.js +207 -0
  199. package/dist/cli/dispatch/lifecycle.js +652 -0
  200. package/dist/cli/dispatch/prime.js +139 -0
  201. package/dist/cli/dispatch/projections.js +17 -0
  202. package/dist/cli/dispatch/shared.js +63 -0
  203. package/dist/cli/dispatch/state.js +140 -0
  204. package/dist/cli/dispatch.js +1 -996
  205. package/dist/cli/errors.js +52 -0
  206. package/dist/cli/help.js +390 -43
  207. package/dist/cli/migrationRequired.js +87 -0
  208. package/dist/cli/orientation/attention.js +59 -0
  209. package/dist/cli/orientation/corpusCoverage.js +102 -0
  210. package/dist/cli/orientation.js +444 -173
  211. package/dist/cli/planArtifacts.js +350 -0
  212. package/dist/cli/planEvidence.js +157 -0
  213. package/dist/cli/planLifecycleState.js +36 -0
  214. package/dist/cli/planTaskIndex.js +11 -0
  215. package/dist/cli/preCutoverCommand.js +32 -0
  216. package/dist/cli/prime-blob.js +71 -3
  217. package/dist/cli/profileAcquisition.js +167 -0
  218. package/dist/cli/startupCompletenessContract.js +59 -0
  219. package/dist/cli/stateQuery.js +63 -14
  220. package/dist/cli/structured.js +0 -1
  221. package/dist/cli/todoMarkdown.js +46 -0
  222. package/dist/cli/todoReadinessSelection.js +192 -0
  223. package/dist/cli/todoSeverity.js +18 -0
  224. package/dist/core/atomicWriter.js +20 -0
  225. package/dist/core/developmentChannel.js +1 -0
  226. package/dist/core/developmentInvocation.js +374 -0
  227. package/dist/core/difflib.js +0 -1
  228. package/dist/core/envPaths.js +20 -0
  229. package/dist/core/jsonValue.js +5 -0
  230. package/dist/core/paths.js +0 -1
  231. package/dist/core/pyjson.js +67 -3
  232. package/dist/core/shell.js +4 -0
  233. package/dist/core/skillIdentity.js +23 -0
  234. package/dist/core/sourceRoot.js +9 -12
  235. package/dist/core/text.js +10 -0
  236. package/dist/core/toml.js +0 -1
  237. package/dist/core/yaml.js +8 -1
  238. package/dist/eval/evalSkills.js +30 -26
  239. package/dist/eval/hybridRouteEvaluation.js +155 -0
  240. package/dist/eval/semanticEval.js +43 -20
  241. package/dist/eval/semanticFixtures.js +16 -5
  242. package/dist/hooks/common.js +11 -81
  243. package/dist/hooks/compaction/apply.js +446 -0
  244. package/dist/hooks/compaction/dryRun.js +184 -0
  245. package/dist/hooks/compaction/index.js +22 -0
  246. package/dist/hooks/compaction/parse.js +325 -0
  247. package/dist/hooks/compaction/retention.js +202 -0
  248. package/dist/hooks/compaction/status.js +360 -0
  249. package/dist/hooks/compaction/types.js +5 -0
  250. package/dist/hooks/validateArtifact/agentFacing.js +9 -0
  251. package/dist/hooks/validateArtifact/index.js +92 -0
  252. package/dist/hooks/validateArtifact/markdown.js +145 -0
  253. package/dist/hooks/validateArtifact/schema.js +546 -0
  254. package/dist/hooks/validateArtifact/traversal.js +107 -0
  255. package/dist/hooks/validateArtifact/violations.js +107 -0
  256. package/dist/migrate/v2HandoffManifest.js +452 -0
  257. package/dist/registries/activationContract.js +2 -0
  258. package/dist/registries/activationTuples.js +106 -0
  259. package/dist/registries/artifactProtocolIds.js +78 -0
  260. package/dist/registries/artifactRegistry.js +224 -63
  261. package/dist/registries/artifactSchemaProjection.js +45 -0
  262. package/dist/registries/capabilityContract.js +141 -13
  263. package/dist/registries/evaluatorHandoffContract.js +170 -0
  264. package/dist/registries/evidenceTierContract.js +371 -0
  265. package/dist/registries/glossaryAdviceContract.js +79 -0
  266. package/dist/registries/glossaryCaveatContract.js +67 -0
  267. package/dist/registries/glossaryConsumerContractValidation.js +787 -0
  268. package/dist/registries/glossaryEntryContract.js +757 -0
  269. package/dist/registries/glossaryTermIdentity.js +17 -0
  270. package/dist/registries/glossaryTermOccurrence.js +20 -0
  271. package/dist/registries/hybridRoute.js +274 -0
  272. package/dist/registries/hybridRouteReceipt.js +221 -0
  273. package/dist/registries/packagePublication.js +229 -0
  274. package/dist/registries/packageRegistry.js +187 -211
  275. package/dist/registries/todoReadinessContract.js +448 -0
  276. package/dist/registries/triggerLoader.js +174 -0
  277. package/dist/registries/verbosityBudgetContract.js +205 -0
  278. package/dist/release/releaseMetadata.js +385 -0
  279. package/dist/runtime/lifecycleAdapterContract.js +457 -0
  280. package/dist/runtime/lifecycleAdapters.js +777 -0
  281. package/dist/runtime/lifecycleAuthority.js +453 -0
  282. package/dist/runtime/lifecycleOperationContract.js +123 -0
  283. package/dist/runtime/lifecycleOperations.js +634 -0
  284. package/dist/runtime/lifecycleOwnershipJournal.js +622 -0
  285. package/dist/runtime/lifecyclePublication.js +415 -0
  286. package/dist/runtime/lifecycleSnapshot.js +438 -0
  287. package/dist/runtime/nativeResourceCleanup.js +502 -0
  288. package/dist/setup/opencode.js +20 -0
  289. package/dist/setup/opencodeConstants.js +1 -0
  290. package/dist/setup/sharedSkill.js +45 -0
  291. package/dist/setup/smokeChecks.js +21 -82
  292. package/dist/state/archiveDiscovery.js +580 -0
  293. package/dist/state/archivePublication.js +225 -0
  294. package/dist/state/archiveRecovery.js +237 -0
  295. package/dist/state/archiveReplay.js +53 -0
  296. package/dist/state/canonicalMigrationRecord.js +36 -0
  297. package/dist/state/changelog.js +221 -0
  298. package/dist/state/decisionEntities.js +367 -0
  299. package/dist/state/decisionLegacyValidation.js +215 -0
  300. package/dist/state/decisionMigrationProvenance.js +199 -0
  301. package/dist/state/decisionOverlay.js +254 -0
  302. package/dist/state/decisionRevision.js +256 -0
  303. package/dist/state/decisionRevisionMigration.js +89 -0
  304. package/dist/state/directRetrieval.js +323 -0
  305. package/dist/state/durability.js +324 -0
  306. package/dist/state/entityCutover.js +459 -0
  307. package/dist/state/entityCutoverGit.js +127 -0
  308. package/dist/state/entityGlossaryAuthority.js +13 -0
  309. package/dist/state/entityListProjection.js +187 -0
  310. package/dist/state/entityListRuntimeRegistry.js +85 -0
  311. package/dist/state/entityMigrationCausality.js +97 -0
  312. package/dist/state/entityMigrationIdentity.js +5 -0
  313. package/dist/state/entityMigrationPreview.js +846 -0
  314. package/dist/state/entityMigrationTodo.js +133 -0
  315. package/dist/state/entityPublicationContext.js +806 -0
  316. package/dist/state/entityRetrievalHelp.js +506 -0
  317. package/dist/state/entityStorage.js +896 -0
  318. package/dist/state/exactReplacementRecovery.js +18 -0
  319. package/dist/state/experimentArchive.js +63 -0
  320. package/dist/state/experimentIdentity.js +202 -0
  321. package/dist/state/healthEntities.js +262 -0
  322. package/dist/state/healthEntityValidation.js +18 -0
  323. package/dist/state/healthRepair.js +69 -0
  324. package/dist/state/installRoot.js +64 -25
  325. package/dist/state/legacyEntityCutoverEvidence.js +65 -0
  326. package/dist/state/legacyIdentity.js +47 -0
  327. package/dist/state/legacySummaryRecord.js +6 -0
  328. package/dist/state/listAccounting.js +54 -0
  329. package/dist/state/listClassification.js +17 -0
  330. package/dist/state/listCursor.js +42 -0
  331. package/dist/state/listRetrieval.js +781 -0
  332. package/dist/state/migrationSourceBinding.js +30 -0
  333. package/dist/state/objectiveExperimentEntities.js +322 -0
  334. package/dist/state/planEntities.js +530 -0
  335. package/dist/state/planIdentity.js +47 -0
  336. package/dist/state/planRetrieval.js +313 -0
  337. package/dist/state/planTaskRetrieval.js +294 -0
  338. package/dist/state/progressEntities.js +512 -0
  339. package/dist/state/progressGlossaryCaveat.js +168 -0
  340. package/dist/state/progressPublicationOrder.js +19 -0
  341. package/dist/state/projectRoot.js +62 -0
  342. package/dist/state/projectionPolicy.js +190 -0
  343. package/dist/state/retrievalAuthority.js +156 -0
  344. package/dist/state/safeProjectFile.js +155 -0
  345. package/dist/state/startupAnalysis/benchmark.js +432 -0
  346. package/dist/state/startupAnalysis/contract.js +160 -0
  347. package/dist/state/startupAnalysis/helpers.js +286 -0
  348. package/dist/state/startupAnalysis/index.js +6 -0
  349. package/dist/state/startupAnalysis/metrics.js +340 -0
  350. package/dist/state/startupAnalysis/records.js +198 -0
  351. package/dist/state/startupAnalysis/report.js +111 -0
  352. package/dist/state/startupAnalysis/threshold.js +512 -0
  353. package/dist/state/startupAnalysis.js +2 -1953
  354. package/dist/state/startupProjection.js +499 -0
  355. package/dist/state/stateMode.js +85 -0
  356. package/dist/state/stateStorageAuthority.js +47 -0
  357. package/dist/state/summaryEntityRead.js +25 -0
  358. package/dist/state/summaryMigrationProvenance.js +66 -0
  359. package/dist/state/summarySourceRowAuthority.js +36 -0
  360. package/dist/state/todoDocsEntities.js +1064 -0
  361. package/dist/state/todoDocsEntityValidation.js +158 -0
  362. package/dist/state/todoMarkdownProjection.js +51 -0
  363. package/dist/state/todoReconciliationActivation.js +132 -0
  364. package/dist/state/todoReconciliationInspection.js +173 -0
  365. package/dist/state/todoReconciliationRepair.js +170 -0
  366. package/dist/state/todoReconciliationTransaction.js +582 -0
  367. package/dist/state/write/assign.js +20 -0
  368. package/dist/state/write/candidateMutation.js +269 -0
  369. package/dist/state/write/errors.js +11 -0
  370. package/dist/state/write/experimentPublication.js +192 -0
  371. package/dist/state/write/explain.js +332 -0
  372. package/dist/state/write/fields.js +61 -0
  373. package/dist/state/write/glossaryPublication.js +263 -0
  374. package/dist/state/write/grammar.js +280 -0
  375. package/dist/state/write/helpers.js +29 -0
  376. package/dist/state/write/index.js +12 -0
  377. package/dist/state/write/input.js +367 -0
  378. package/dist/state/write/lock.js +837 -0
  379. package/dist/state/write/mutation.js +234 -0
  380. package/dist/state/write/operations.js +169 -0
  381. package/dist/state/write/planEvaluation.js +128 -0
  382. package/dist/state/write/planPublication.js +179 -0
  383. package/dist/state/write/runtimeOperations.js +142 -0
  384. package/dist/state/write/serialize.js +1 -0
  385. package/dist/state/write/transaction.js +52 -0
  386. package/dist/state/write/validate.js +7 -0
  387. package/dist/upgrade/appContentRefresh.js +383 -0
  388. package/dist/upgrade/appModel.js +8 -7
  389. package/dist/upgrade/atomicWriter.js +1 -0
  390. package/dist/upgrade/bundleEvidence.js +33 -0
  391. package/dist/upgrade/channels.js +12 -8
  392. package/dist/upgrade/compatibility.js +56 -21
  393. package/dist/upgrade/doctor.js +197 -192
  394. package/dist/upgrade/doctorClassifier.js +187 -0
  395. package/dist/upgrade/installedHooksRetirement.js +196 -0
  396. package/dist/upgrade/legacyAgentCleanup.js +282 -0
  397. package/dist/upgrade/lifecycleUpgrade.js +113 -0
  398. package/dist/upgrade/migrateArtifactsV2ToV3.js +367 -149
  399. package/dist/upgrade/migrationPublication.js +122 -0
  400. package/dist/upgrade/nextMajorDoctor.js +155 -0
  401. package/dist/upgrade/npxPlatformStatus.js +22 -0
  402. package/dist/upgrade/projectIntegration.js +145 -187
  403. package/dist/upgrade/projectIntegrationDecision.js +50 -0
  404. package/dist/upgrade/retiredResourceDiagnostics.js +117 -0
  405. package/dist/upgrade/runtimeMigration.js +278 -352
  406. package/dist/upgrade/upgradeCommands.js +14 -1
  407. package/dist/upgrade/upgradeLock.js +85 -0
  408. package/dist/upgrade/upgradeOrchestrator.js +263 -59
  409. package/dist/upgrade/v3CapabilitySurface.js +14 -0
  410. package/dist/upgrade/versionResolution.js +12 -5
  411. package/dist/validate/activationArtifactEvidence.js +844 -0
  412. package/dist/validate/activationConjunction.js +816 -0
  413. package/dist/validate/activationEvidenceManifest.js +515 -0
  414. package/dist/validate/activationPackageSemantics.js +29 -0
  415. package/dist/validate/appHomeContract.js +5 -11
  416. package/dist/validate/bootstrapAuthority.js +44 -0
  417. package/dist/validate/capability.js +144 -15
  418. package/dist/validate/crossCapability.js +15 -10
  419. package/dist/validate/retainedReferenceAuthority.js +879 -0
  420. package/dist/validate/selfAudit.js +73 -37
  421. package/dist/validate/v1LegacyCruft.js +131 -0
  422. package/dist/validate/vocabularyAuthority.js +303 -0
  423. package/package.json +53 -27
  424. package/bundle/references/adapters/cursor.md +0 -213
  425. package/bundle/references/adapters/opencode.md +0 -530
  426. package/bundle/references/adapters/package-manifest-interface-model.yaml +0 -337
  427. package/bundle/references/adapters/runtime-adapter-characterization.md +0 -79
  428. package/bundle/references/adapters/runtime-adapter-interface-model.yaml +0 -200
  429. package/bundle/references/adapters/runtime-adapter-registry.yaml +0 -548
  430. package/bundle/references/adapters/runtime-feature-parity.md +0 -189
  431. package/bundle/references/analysis/benchmark.md +0 -267
  432. package/bundle/references/analysis/startup-measurement-contract.yaml +0 -424
  433. package/bundle/references/cli/agent-ready-state-contract.yaml +0 -953
  434. package/bundle/references/cli/audience-namespace-cli-migration.yaml +0 -355
  435. package/bundle/references/cli/bundle-skill-vocabulary.yaml +0 -278
  436. package/bundle/references/cli/capability-tool-classification.yaml +0 -53
  437. package/bundle/references/cli/routing-execution-vocabulary.yaml +0 -281
  438. package/bundle/references/meta/documentation-inventory.md +0 -43
  439. package/bundle/references/v1-section-mapping.md +0 -47
  440. package/bundle/skills/agentera/.claude-plugin/plugin.json +0 -27
  441. package/bundle/skills/agentera/agents/dokumentera.toml +0 -6
  442. package/bundle/skills/agentera/agents/hej.toml +0 -6
  443. package/bundle/skills/agentera/agents/inspektera.toml +0 -6
  444. package/bundle/skills/agentera/agents/inspirera.toml +0 -6
  445. package/bundle/skills/agentera/agents/optimera.toml +0 -6
  446. package/bundle/skills/agentera/agents/orkestrera.toml +0 -6
  447. package/bundle/skills/agentera/agents/planera.toml +0 -6
  448. package/bundle/skills/agentera/agents/profilera.toml +0 -6
  449. package/bundle/skills/agentera/agents/realisera.toml +0 -6
  450. package/bundle/skills/agentera/agents/resonera.toml +0 -6
  451. package/bundle/skills/agentera/agents/visionera.toml +0 -6
  452. package/bundle/skills/agentera/agents/visualisera.toml +0 -6
  453. package/bundle/skills/agentera/capabilities/dokumentera/instructions.md +0 -428
  454. package/bundle/skills/agentera/capabilities/dokumentera/schemas/artifacts.yaml +0 -73
  455. package/bundle/skills/agentera/capabilities/dokumentera/schemas/triggers.yaml +0 -35
  456. package/bundle/skills/agentera/capabilities/hej/instructions.md +0 -331
  457. package/bundle/skills/agentera/capabilities/hej/schemas/artifacts.yaml +0 -69
  458. package/bundle/skills/agentera/capabilities/hej/schemas/triggers.yaml +0 -58
  459. package/bundle/skills/agentera/capabilities/inspektera/instructions.md +0 -514
  460. package/bundle/skills/agentera/capabilities/inspektera/schemas/artifacts.yaml +0 -76
  461. package/bundle/skills/agentera/capabilities/inspektera/schemas/triggers.yaml +0 -38
  462. package/bundle/skills/agentera/capabilities/inspirera/instructions.md +0 -280
  463. package/bundle/skills/agentera/capabilities/inspirera/schemas/artifacts.yaml +0 -24
  464. package/bundle/skills/agentera/capabilities/inspirera/schemas/triggers.yaml +0 -34
  465. package/bundle/skills/agentera/capabilities/optimera/instructions.md +0 -437
  466. package/bundle/skills/agentera/capabilities/optimera/schemas/triggers.yaml +0 -39
  467. package/bundle/skills/agentera/capabilities/orkestrera/instructions.md +0 -433
  468. package/bundle/skills/agentera/capabilities/orkestrera/schemas/artifacts.yaml +0 -64
  469. package/bundle/skills/agentera/capabilities/orkestrera/schemas/triggers.yaml +0 -42
  470. package/bundle/skills/agentera/capabilities/orkestrera/schemas/validation.yaml +0 -107
  471. package/bundle/skills/agentera/capabilities/planera/instructions.md +0 -368
  472. package/bundle/skills/agentera/capabilities/planera/schemas/artifacts.yaml +0 -62
  473. package/bundle/skills/agentera/capabilities/planera/schemas/triggers.yaml +0 -34
  474. package/bundle/skills/agentera/capabilities/planera/schemas/validation.yaml +0 -61
  475. package/bundle/skills/agentera/capabilities/profilera/instructions.md +0 -419
  476. package/bundle/skills/agentera/capabilities/profilera/schemas/artifacts.yaml +0 -18
  477. package/bundle/skills/agentera/capabilities/profilera/schemas/triggers.yaml +0 -45
  478. package/bundle/skills/agentera/capabilities/profilera/schemas/validation.yaml +0 -57
  479. package/bundle/skills/agentera/capabilities/realisera/instructions.md +0 -403
  480. package/bundle/skills/agentera/capabilities/realisera/schemas/artifacts.yaml +0 -80
  481. package/bundle/skills/agentera/capabilities/realisera/schemas/triggers.yaml +0 -39
  482. package/bundle/skills/agentera/capabilities/realisera/schemas/validation.yaml +0 -110
  483. package/bundle/skills/agentera/capabilities/resonera/instructions.md +0 -329
  484. package/bundle/skills/agentera/capabilities/resonera/schemas/artifacts.yaml +0 -47
  485. package/bundle/skills/agentera/capabilities/resonera/schemas/triggers.yaml +0 -46
  486. package/bundle/skills/agentera/capabilities/resonera/schemas/validation.yaml +0 -77
  487. package/bundle/skills/agentera/capabilities/visionera/instructions.md +0 -309
  488. package/bundle/skills/agentera/capabilities/visionera/schemas/triggers.yaml +0 -41
  489. package/bundle/skills/agentera/capabilities/visualisera/instructions.md +0 -400
  490. package/bundle/skills/agentera/capabilities/visualisera/schemas/triggers.yaml +0 -33
  491. package/bundle/skills/agentera/references/contract.md +0 -1039
  492. package/bundle/skills/hej/.claude-plugin/plugin.json +0 -6
  493. package/bundle/skills/hej/SKILL.md +0 -69
  494. package/bundle/skills/hej/agents/hej.toml +0 -11
  495. package/bundle/skills/hej/agents/openai.yaml +0 -8
  496. package/dist/analytics/extractCorpus.js.map +0 -1
  497. package/dist/analytics/usageStats.js.map +0 -1
  498. package/dist/bin/agentera.js.map +0 -1
  499. package/dist/cli/appContext.js.map +0 -1
  500. package/dist/cli/argvalidate.js.map +0 -1
  501. package/dist/cli/capabilityContext.js.map +0 -1
  502. package/dist/cli/commands/backfill.js +0 -84
  503. package/dist/cli/commands/backfill.js.map +0 -1
  504. package/dist/cli/commands/capability.js.map +0 -1
  505. package/dist/cli/commands/compact.js.map +0 -1
  506. package/dist/cli/commands/doctor.js.map +0 -1
  507. package/dist/cli/commands/lint.js.map +0 -1
  508. package/dist/cli/commands/prime.js.map +0 -1
  509. package/dist/cli/commands/query.js.map +0 -1
  510. package/dist/cli/commands/report.js.map +0 -1
  511. package/dist/cli/commands/schema.js.map +0 -1
  512. package/dist/cli/commands/state.js +0 -1012
  513. package/dist/cli/commands/state.js.map +0 -1
  514. package/dist/cli/commands/upgrade.js.map +0 -1
  515. package/dist/cli/commands/validate.js.map +0 -1
  516. package/dist/cli/commands/verify.js.map +0 -1
  517. package/dist/cli/dispatch.js.map +0 -1
  518. package/dist/cli/help.js.map +0 -1
  519. package/dist/cli/orientation.js.map +0 -1
  520. package/dist/cli/prime-blob.js.map +0 -1
  521. package/dist/cli/stateQuery.js.map +0 -1
  522. package/dist/cli/structured.js.map +0 -1
  523. package/dist/core/difflib.js.map +0 -1
  524. package/dist/core/git.js +0 -43
  525. package/dist/core/git.js.map +0 -1
  526. package/dist/core/paths.js.map +0 -1
  527. package/dist/core/pyjson.js.map +0 -1
  528. package/dist/core/sourceRoot.js.map +0 -1
  529. package/dist/core/toml.js.map +0 -1
  530. package/dist/core/yaml.js.map +0 -1
  531. package/dist/eval/evalSkills.js.map +0 -1
  532. package/dist/eval/semanticEval.js.map +0 -1
  533. package/dist/eval/semanticFixtures.js.map +0 -1
  534. package/dist/hooks/common.js.map +0 -1
  535. package/dist/hooks/compaction.js +0 -935
  536. package/dist/hooks/compaction.js.map +0 -1
  537. package/dist/hooks/cursorPreToolUse.js +0 -19
  538. package/dist/hooks/cursorPreToolUse.js.map +0 -1
  539. package/dist/hooks/cursorSessionStart.js +0 -71
  540. package/dist/hooks/cursorSessionStart.js.map +0 -1
  541. package/dist/hooks/sessionStart.js +0 -209
  542. package/dist/hooks/sessionStart.js.map +0 -1
  543. package/dist/hooks/sessionStop.js +0 -212
  544. package/dist/hooks/sessionStop.js.map +0 -1
  545. package/dist/hooks/validateArtifact.js +0 -933
  546. package/dist/hooks/validateArtifact.js.map +0 -1
  547. package/dist/registries/artifactRegistry.js.map +0 -1
  548. package/dist/registries/capabilityContract.js.map +0 -1
  549. package/dist/registries/packageRegistry.js.map +0 -1
  550. package/dist/registries/runtimeAdapterRegistry.js +0 -315
  551. package/dist/registries/runtimeAdapterRegistry.js.map +0 -1
  552. package/dist/setup/codex.js +0 -1056
  553. package/dist/setup/codex.js.map +0 -1
  554. package/dist/setup/copilot.js +0 -227
  555. package/dist/setup/copilot.js.map +0 -1
  556. package/dist/setup/cursor.js +0 -127
  557. package/dist/setup/cursor.js.map +0 -1
  558. package/dist/setup/doctor.js +0 -1297
  559. package/dist/setup/doctor.js.map +0 -1
  560. package/dist/setup/smokeChecks.js.map +0 -1
  561. package/dist/state/installRoot.js.map +0 -1
  562. package/dist/state/progressCommit.js +0 -289
  563. package/dist/state/progressCommit.js.map +0 -1
  564. package/dist/state/startupAnalysis.js.map +0 -1
  565. package/dist/upgrade/appModel.js.map +0 -1
  566. package/dist/upgrade/channels.js.map +0 -1
  567. package/dist/upgrade/compatibility.js.map +0 -1
  568. package/dist/upgrade/doctor.js.map +0 -1
  569. package/dist/upgrade/migrateArtifactsV1ToV2.js +0 -571
  570. package/dist/upgrade/migrateArtifactsV1ToV2.js.map +0 -1
  571. package/dist/upgrade/migrateArtifactsV2ToV3.js.map +0 -1
  572. package/dist/upgrade/projectIntegration.js.map +0 -1
  573. package/dist/upgrade/runtimeMigration.js.map +0 -1
  574. package/dist/upgrade/upgradeCommands.js.map +0 -1
  575. package/dist/upgrade/upgradeOrchestrator.js.map +0 -1
  576. package/dist/upgrade/versionResolution.js.map +0 -1
  577. package/dist/validate/appHomeContract.js.map +0 -1
  578. package/dist/validate/capability.js.map +0 -1
  579. package/dist/validate/crossCapability.js.map +0 -1
  580. package/dist/validate/lifecycleAdapters.js +0 -772
  581. package/dist/validate/lifecycleAdapters.js.map +0 -1
  582. package/dist/validate/selfAudit.js.map +0 -1
  583. /package/bundle/skills/agentera/capabilities/{dokumentera → document}/schemas/exit.yaml +0 -0
  584. /package/bundle/skills/agentera/capabilities/{inspirera → research}/schemas/exit.yaml +0 -0
  585. /package/bundle/skills/agentera/capabilities/{hej → status}/schemas/exit.yaml +0 -0
@@ -1,20 +1,54 @@
1
1
  import path from "node:path";
2
- import { readdirSync as fsReaddirSync, readFileSync as fsReadFileSync, statSync as fsStatSync } from "node:fs";
2
+ import { readdirSync as fsReaddirSync, statSync as fsStatSync } from "node:fs";
3
3
  import { resolvePath } from "../../core/paths.js";
4
4
  import { resolveSourceRoot } from "../../core/sourceRoot.js";
5
5
  import { validateAgentString, validatePathValue } from "../argvalidate.js";
6
- import { HookCliAdapter } from "../../hooks/validateArtifact.js";
6
+ import { ArtifactValidationAdapter } from "../../hooks/validateArtifact/index.js";
7
7
  import { validateCapability, validateContractSelf, validateProtocolSelf } from "../../validate/capability.js";
8
8
  import { loadYamlMapping } from "../../core/yaml.js";
9
- import { parseToml as parseTomlValidate } from "../../core/toml.js";
10
9
  import { validateGraph } from "../../validate/crossCapability.js";
11
- import { lifecycleMain } from "../../validate/lifecycleAdapters.js";
12
10
  import { validate as validateAppHome } from "../../validate/appHomeContract.js";
11
+ import { selfAuditMain } from "../../validate/selfAudit.js";
12
+ import { vocabularyAuthorityMain } from "../../validate/vocabularyAuthority.js";
13
+ import { activationConjunctionMain } from "../../validate/activationConjunction.js";
14
+ import { isRetainedReferenceSourceCheckout, retainedReferenceAuthorityMain, } from "../../validate/retainedReferenceAuthority.js";
15
+ import { releaseMetadataMain } from "../../release/releaseMetadata.js";
16
+ import { VALIDATE_ARTIFACT_PROTOCOL_IDS, normalizeArtifactProtocolId, } from "../../registries/artifactProtocolIds.js";
13
17
  import { emitStructured } from "../structured.js";
18
+ import { validateEntityState } from "../../state/entityStorage.js";
19
+ import { inspectTodoReconciliationDrift } from "../../state/todoDocsEntities.js";
20
+ import { inspectTodoReconciliationState } from "../../state/todoReconciliationInspection.js";
21
+ import { detectStateModeBinding } from "../../state/stateMode.js";
22
+ import { loadEntityCutoverTargetsForMarker } from "../../state/entityCutover.js";
23
+ import { validateRealProjectRoot } from "../../state/projectRoot.js";
24
+ import { readProjectFileSnapshot } from "../../state/safeProjectFile.js";
25
+ import { loadTodoReadinessContract, TodoReadinessContractError, } from "../../registries/todoReadinessContract.js";
26
+ export const VALIDATE_FAMILY_NAMES = [
27
+ "cross-capability",
28
+ "app-home-contract",
29
+ "vocabularyAuthority",
30
+ "retained-references",
31
+ "activation-conjunction",
32
+ "selfAudit",
33
+ "release-metadata",
34
+ "capability",
35
+ "capability-contract",
36
+ "artifact",
37
+ "state",
38
+ ];
39
+ /** Source-only validation must not appear as a packaged CLI capability. */
40
+ export function advertisedValidateFamilyNames() {
41
+ return isRetainedReferenceSourceCheckout()
42
+ ? VALIDATE_FAMILY_NAMES
43
+ : VALIDATE_FAMILY_NAMES.filter((family) => !["retained-references", "activation-conjunction"].includes(family));
44
+ }
14
45
  const VALIDATE_DELEGATED_SCRIPTS = {
15
46
  "cross-capability": "validate_cross_capability.py",
16
- "lifecycle-adapters": "validate_lifecycle_adapters.py",
17
47
  "app-home-contract": "validate_app_home_contract.py",
48
+ vocabularyAuthority: "validate_vocabulary_authority.py",
49
+ "retained-references": "packages/cli/src/validate/retainedReferenceAuthority.ts",
50
+ selfAudit: "self_audit.py",
51
+ "release-metadata": "validate_release_metadata.py",
18
52
  };
19
53
  function pySplitlines(s) {
20
54
  if (!s)
@@ -31,11 +65,6 @@ function runCrossCapability() {
31
65
  }
32
66
  return { stdout: "cross-capability artifact graph ok\n", stderr: "", returncode: 0 };
33
67
  }
34
- function runLifecycleAdapters() {
35
- const lines = [];
36
- const rc = lifecycleMain({ out: (line) => lines.push(line) });
37
- return { stdout: lines.map((l) => l + "\n").join(""), stderr: "", returncode: rc };
38
- }
39
68
  function runAppHomeContract() {
40
69
  const errors = validateAppHome(resolvePath(repoRoot()));
41
70
  if (errors.length > 0) {
@@ -47,18 +76,63 @@ function runAppHomeContract() {
47
76
  }
48
77
  return { stdout: "OK: app-home contract terminology is release-ready\n", stderr: "", returncode: 0 };
49
78
  }
79
+ function runVocabularyAuthority() {
80
+ const lines = [];
81
+ const rc = vocabularyAuthorityMain({ out: (line) => lines.push(line) });
82
+ return { stdout: lines.map((l) => l + "\n").join(""), stderr: "", returncode: rc };
83
+ }
84
+ function runRetainedReferenceAuthority() {
85
+ const lines = [];
86
+ const rc = retainedReferenceAuthorityMain({ out: (line) => lines.push(line) });
87
+ return {
88
+ stdout: lines.map((line) => line + "\n").join(""),
89
+ stderr: "",
90
+ returncode: rc,
91
+ violations: rc === 0
92
+ ? []
93
+ : lines.filter((line) => line.startsWith("- ")).map((line) => line.slice(2)),
94
+ };
95
+ }
96
+ function unsupportedRetainedReferenceValidation() {
97
+ const recovery = "Run this source-checkout-only target from the repository root after pnpm -C packages/cli build.";
98
+ return {
99
+ stdout: "",
100
+ stderr: `retained-reference validation is unavailable outside a source checkout. ${recovery}\n`,
101
+ returncode: 1,
102
+ violations: ["retained-reference validation is unavailable outside a source checkout"],
103
+ failureClass: "unsupported_source_checkout",
104
+ recovery,
105
+ };
106
+ }
107
+ function runSelfAudit() {
108
+ const lines = [];
109
+ const rc = selfAuditMain({ out: (line) => lines.push(line) });
110
+ return { stdout: lines.map((l) => l + "\n").join(""), stderr: "", returncode: rc };
111
+ }
112
+ function runReleaseMetadata() {
113
+ const lines = [];
114
+ const adapter = process.env.AGENTERA_RELEASE_ADAPTER;
115
+ const rc = releaseMetadataMain({
116
+ ...(adapter === "stable" || adapter === "development" ? { adapter } : {}),
117
+ out: (line) => lines.push(line),
118
+ });
119
+ return { stdout: lines.map((l) => l + "\n").join(""), stderr: "", returncode: rc };
120
+ }
50
121
  function repoRoot() {
51
122
  // appHomeContract.validate resolves its own default root; pass the source root.
52
123
  return process.cwd();
53
124
  }
54
125
  const DELEGATED_RUNNERS = {
55
- "cross-capability": runCrossCapability,
56
- "lifecycle-adapters": runLifecycleAdapters,
57
- "app-home-contract": runAppHomeContract,
126
+ "cross-capability": () => runCrossCapability(),
127
+ "app-home-contract": () => runAppHomeContract(),
128
+ vocabularyAuthority: () => runVocabularyAuthority(),
129
+ "retained-references": () => runRetainedReferenceAuthority(),
130
+ selfAudit: () => runSelfAudit(),
131
+ "release-metadata": () => runReleaseMetadata(),
58
132
  };
59
133
  function validationProcessPayload(targetFamily, target, p, result) {
60
134
  const lines = pySplitlines(result.stderr).map((l) => l.trim());
61
- const violations = lines.filter((l) => l.trim()).map((l) => (l.startsWith(" ") ? l.slice(2) : l));
135
+ const violations = result.violations ?? lines.filter((l) => l.trim()).map((l) => (l.startsWith(" ") ? l.slice(2) : l));
62
136
  const payload = {
63
137
  command: "validate",
64
138
  status: result.returncode === 0 ? "pass" : "fail",
@@ -71,12 +145,17 @@ function validationProcessPayload(targetFamily, target, p, result) {
71
145
  stderr: pySplitlines(result.stderr),
72
146
  },
73
147
  };
148
+ if (result.failureClass)
149
+ payload.failure_class = result.failureClass;
150
+ if (result.recovery)
151
+ payload.recovery = result.recovery;
74
152
  if (p !== null)
75
153
  payload.path = resolvePath(p);
76
154
  return payload;
77
155
  }
78
156
  function delegatedValidationPayload(targetFamily, result, engineCommand) {
79
157
  const payload = validationProcessPayload(targetFamily, targetFamily, null, result);
158
+ // cast: payload.engine carries captured subprocess stdout/stderr (IO boundary)
80
159
  payload.engine = { ...payload.engine, command: engineCommand };
81
160
  return payload;
82
161
  }
@@ -84,10 +163,11 @@ export function cmdValidate(family, args, io) {
84
163
  const out = io.out ?? ((t) => process.stdout.write(t));
85
164
  const err = io.err ?? ((t) => process.stderr.write(t));
86
165
  if (!(family in DELEGATED_RUNNERS)) {
87
- throw new Error("unsupported validate target family; valid families: capability, artifact, descriptors, " +
88
- "cross-capability, lifecycle-adapters, app-home-contract, capability-contract.");
166
+ throw new Error(`unsupported validate target family; valid families: ${VALIDATE_FAMILY_NAMES.join(", ")}.`);
89
167
  }
90
- const result = DELEGATED_RUNNERS[family]();
168
+ const result = family === "retained-references" && !isRetainedReferenceSourceCheckout()
169
+ ? unsupportedRetainedReferenceValidation()
170
+ : DELEGATED_RUNNERS[family](args);
91
171
  if ((args.format ?? "text") === "json") {
92
172
  emitStructured(delegatedValidationPayload(family, result, VALIDATE_DELEGATED_SCRIPTS[family]), "json", out);
93
173
  }
@@ -102,13 +182,17 @@ export function cmdValidate(family, args, io) {
102
182
  export function isDelegatedValidateFamily(family) {
103
183
  return family in DELEGATED_RUNNERS;
104
184
  }
185
+ export function cmdValidateActivationConjunction(io) {
186
+ return activationConjunctionMain({ out: io.out });
187
+ }
105
188
  // ── capability + capability-contract families ───────────────────────
106
189
  const CAPABILITY_NAMES = [
107
- "hej", "visionera", "resonera", "inspirera", "planera", "realisera",
108
- "optimera", "inspektera", "dokumentera", "profilera", "visualisera", "orkestrera",
190
+ "status", "vision", "discuss", "research", "plan", "build",
191
+ "optimize", "audit", "document", "profile", "design", "orchestrate",
109
192
  ];
110
193
  const CONTRACT_PATH = "skills/agentera/capability_schema_contract.yaml";
111
194
  const PROTOCOL_PATH = "skills/agentera/protocol.yaml";
195
+ const TODO_READINESS_PATH = "skills/agentera/schemas/artifacts/todo.yaml";
112
196
  function pyRepr(value) {
113
197
  return value.includes("'") && !value.includes('"') ? `"${value}"` : `'${value}'`;
114
198
  }
@@ -122,7 +206,7 @@ function validateCapabilityTarget(target) {
122
206
  const valid = CAPABILITY_NAMES.join(", ");
123
207
  throw new Error(`unsupported capability target ${pyRepr(target)}; valid capability names: ${valid}. ` +
124
208
  "Syntax: agentera validate capability <capability-or-path> [--format text|json]. " +
125
- "Example: agentera validate capability hej");
209
+ "Example: agentera validate capability status");
126
210
  }
127
211
  validatePathValue(target, "capability path");
128
212
  return target;
@@ -191,6 +275,7 @@ export function cmdValidateCapability(target, args, io) {
191
275
  target,
192
276
  path: resolvePath(capDir),
193
277
  checks,
278
+ // cast: c.violations are captured validation-engine lines (subprocess IO boundary)
194
279
  violations: checks.flatMap((c) => c.violations),
195
280
  summary: {
196
281
  passed: checks.filter((c) => c.status === "pass").length,
@@ -260,12 +345,33 @@ function protocolSelfResult() {
260
345
  }
261
346
  return { stdout, stderr, returncode };
262
347
  }
348
+ function todoReadinessResult() {
349
+ let stdout = `Validating TODO readiness: ${TODO_READINESS_PATH}\n`;
350
+ let errors = [];
351
+ try {
352
+ loadTodoReadinessContract(path.join(resolveSourceRoot(), TODO_READINESS_PATH), path.join(resolveSourceRoot(), PROTOCOL_PATH), path.join(resolveSourceRoot(), CONTRACT_PATH));
353
+ }
354
+ catch (exc) {
355
+ errors = exc instanceof TodoReadinessContractError ? exc.errors : [exc.message];
356
+ }
357
+ let stderr = "";
358
+ let returncode = 0;
359
+ if (errors.length > 0) {
360
+ stderr = "FAILED:\n" + errors.map((error) => ` ${error}\n`).join("");
361
+ returncode = 1;
362
+ }
363
+ else {
364
+ stdout += "PASS: TODO readiness contract is internally consistent\n";
365
+ }
366
+ return { stdout, stderr, returncode };
367
+ }
263
368
  export function cmdValidateCapabilityContract(args, io) {
264
369
  const out = io.out ?? ((t) => process.stdout.write(t));
265
370
  const err = io.err ?? ((t) => process.stderr.write(t));
266
371
  const results = [
267
372
  ["capability-contract-self", contractSelfResult()],
268
373
  ["capability-protocol", protocolSelfResult()],
374
+ ["todo-readiness", todoReadinessResult()],
269
375
  ];
270
376
  if ((args.format ?? "text") === "json") {
271
377
  const checks = results.map(([name, result]) => delegatedValidationPayload(name, result, "validate_capability.py"));
@@ -273,8 +379,9 @@ export function cmdValidateCapabilityContract(args, io) {
273
379
  command: "validate",
274
380
  status: results.every(([, r]) => r.returncode === 0) ? "pass" : "fail",
275
381
  target_family: "capability-contract",
276
- target: "capability-schema-contract-and-protocol",
382
+ target: "capability-schema-contract-protocol-and-todo-readiness",
277
383
  checks,
384
+ // cast: c.violations are captured validation-engine lines (subprocess IO boundary)
278
385
  violations: checks.flatMap((c) => c.violations),
279
386
  summary: {
280
387
  passed: results.filter(([, r]) => r.returncode === 0).length,
@@ -292,199 +399,14 @@ export function cmdValidateCapabilityContract(args, io) {
292
399
  }
293
400
  return results.every(([, r]) => r.returncode === 0) ? 0 : 1;
294
401
  }
295
- // ── descriptors family ──────────────────────────────────────────────
296
- function pySplitlinesText(s) {
297
- return s.split(/\r\n|\r|\n/);
298
- }
299
- function descriptorValidationPayload() {
300
- const sourceRoot = resolveSourceRoot();
301
- const codexDir = path.join(sourceRoot, "skills", "agentera", "agents");
302
- const opencodeDir = path.join(sourceRoot, ".opencode", "agents");
303
- const classificationPath = path.join(sourceRoot, "references", "cli", "capability-tool-classification.yaml");
304
- const checks = [];
305
- const violations = [];
306
- let capPermissions = {};
307
- try {
308
- const classificationData = loadYamlMapping(fsReadFileSync(classificationPath, "utf8"));
309
- capPermissions = {};
310
- for (const categoryData of Object.values(classificationData.classification)) {
311
- for (const [capability, capData] of Object.entries(categoryData.capabilities)) {
312
- capPermissions[capability] = capData.permission;
313
- }
314
- }
315
- }
316
- catch (exc) {
317
- violations.push(`classification authority: failed to load classification: ${exc.message}`);
318
- capPermissions = {};
319
- }
320
- for (const name of CAPABILITY_NAMES) {
321
- const codexPath = path.join(codexDir, `${name}.toml`);
322
- let check = { runtime: "codex", capability: name, path: codexPath, status: "pass" };
323
- let text;
324
- let parsed;
325
- try {
326
- text = fsReadFileSync(codexPath, "utf8");
327
- parsed = parseTomlValidate(text);
328
- }
329
- catch (exc) {
330
- check = { ...check, status: "fail", message: exc.message };
331
- violations.push(`codex ${name}: ${exc.message}`);
332
- checks.push(check);
333
- continue;
334
- }
335
- const expectedRef = `capabilities/${name}/instructions.md`;
336
- if (parsed.name !== name) {
337
- check = { ...check, status: "fail", message: "name field does not match capability" };
338
- violations.push(`codex ${name}: name field must be ${name}`);
339
- }
340
- else if (typeof parsed.description !== "string" || !parsed.description.trim()) {
341
- check = { ...check, status: "fail", message: "description is required" };
342
- violations.push(`codex ${name}: description is required`);
343
- }
344
- else if (typeof parsed.developer_instructions !== "string" || !parsed.developer_instructions.includes(expectedRef)) {
345
- check = { ...check, status: "fail", message: "developer_instructions must reference capability instructions" };
346
- violations.push(`codex ${name}: developer_instructions must reference ${expectedRef}`);
347
- }
348
- else if (!pySplitlinesText(text).slice(0, 5).includes("# agentera_managed: true")) {
349
- check = { ...check, status: "fail", message: "managed marker is required" };
350
- violations.push(`codex ${name}: managed marker is required`);
351
- }
352
- else {
353
- const devInst = parsed.developer_instructions;
354
- const expectedPermission = (capPermissions[name] ?? {});
355
- if (expectedPermission && Object.keys(expectedPermission).length > 0) {
356
- let expectedGuidance;
357
- if (expectedPermission.write === "allow" && expectedPermission.bash === "allow") {
358
- expectedGuidance = "You have full file write, file edit, and shell execution tools available";
359
- }
360
- else if (expectedPermission.write === "allow" && expectedPermission.bash === "deny") {
361
- expectedGuidance =
362
- "You have file write and file edit tools available to create or update files, but shell execution is disabled";
363
- }
364
- else {
365
- expectedGuidance = "You are a read-only agent \u2014 do not write files or execute shell commands";
366
- }
367
- if (!devInst.includes(expectedGuidance)) {
368
- check = { ...check, status: "fail", message: `developer_instructions must contain guidance '${expectedGuidance}'` };
369
- violations.push(`codex ${name}: developer_instructions must contain guidance '${expectedGuidance}'`);
370
- }
371
- }
372
- }
373
- checks.push(check);
374
- const opencodePath = path.join(opencodeDir, `${name}.md`);
375
- let ocheck = { runtime: "opencode", capability: name, path: opencodePath, status: "pass" };
376
- let otext;
377
- try {
378
- otext = fsReadFileSync(opencodePath, "utf8");
379
- }
380
- catch (exc) {
381
- ocheck = { ...ocheck, status: "fail", message: exc.message };
382
- violations.push(`opencode ${name}: ${exc.message}`);
383
- checks.push(ocheck);
384
- continue;
385
- }
386
- let frontmatter = {};
387
- try {
388
- const lines = pySplitlinesText(otext);
389
- if (lines.length > 0 && lines[0] === "---") {
390
- const closing = lines.indexOf("---", 1);
391
- if (closing !== -1) {
392
- const frontmatterText = lines.slice(1, closing).join("\n");
393
- frontmatter = loadYamlMapping(frontmatterText);
394
- }
395
- }
396
- }
397
- catch {
398
- frontmatter = {};
399
- }
400
- const expectedRefO = `capabilities/${name}/instructions.md`;
401
- const expectedPermission = (capPermissions[name] ?? {});
402
- const actualPermission = frontmatter.permission;
403
- if ("name" in frontmatter) {
404
- ocheck = { ...ocheck, status: "fail", message: "name frontmatter must be omitted" };
405
- violations.push(`opencode ${name}: name frontmatter must be omitted`);
406
- }
407
- else if (frontmatter.agentera_managed === "true") {
408
- ocheck = { ...ocheck, status: "fail", message: "agentera_managed frontmatter must be omitted" };
409
- violations.push(`opencode ${name}: agentera_managed frontmatter must be omitted`);
410
- }
411
- else if (frontmatter.mode !== "subagent") {
412
- ocheck = { ...ocheck, status: "fail", message: "mode: subagent frontmatter is required" };
413
- violations.push(`opencode ${name}: mode: subagent frontmatter is required`);
414
- }
415
- else if (!frontmatter.description) {
416
- ocheck = { ...ocheck, status: "fail", message: "description is required" };
417
- violations.push(`opencode ${name}: description is required`);
418
- }
419
- else if (!actualPermission || typeof actualPermission !== "object" || Array.isArray(actualPermission)) {
420
- ocheck = { ...ocheck, status: "fail", message: "permission frontmatter is required and must be an object" };
421
- violations.push(`opencode ${name}: permission frontmatter is required and must be an object`);
422
- }
423
- else if (actualPermission.write !== expectedPermission.write ||
424
- actualPermission.bash !== expectedPermission.bash) {
425
- ocheck = { ...ocheck, status: "fail", message: "permission frontmatter does not match classification" };
426
- violations.push(`opencode ${name}: permission frontmatter must be write: ${expectedPermission.write}, bash: ${expectedPermission.bash}`);
427
- }
428
- else if (!otext.includes("<!-- agentera: managed -->")) {
429
- ocheck = { ...ocheck, status: "fail", message: "managed body marker is required" };
430
- violations.push(`opencode ${name}: managed body marker is required`);
431
- }
432
- else if (!otext.includes(expectedRefO)) {
433
- ocheck = { ...ocheck, status: "fail", message: "descriptor must reference capability instructions" };
434
- violations.push(`opencode ${name}: descriptor must reference ${expectedRefO}`);
435
- }
436
- else if (otext.includes("Dispatch only through the runtime-native") || otext.includes(`\`@${name}\``)) {
437
- ocheck = { ...ocheck, status: "fail", message: "descriptor must not self-dispatch from a subagent" };
438
- violations.push(`opencode ${name}: descriptor must execute directly without self-dispatch`);
439
- }
440
- checks.push(ocheck);
441
- }
442
- return {
443
- command: "validate",
444
- status: violations.length > 0 ? "fail" : "pass",
445
- target_family: "descriptors",
446
- target: "agent-descriptors",
447
- checks,
448
- violations,
449
- summary: {
450
- passed: checks.filter((c) => c.status === "pass").length,
451
- failed: checks.filter((c) => c.status === "fail").length,
452
- },
453
- };
454
- }
455
- export function cmdValidateDescriptors(args, io) {
456
- const out = io.out ?? ((t) => process.stdout.write(t));
457
- const err = io.err ?? ((t) => process.stderr.write(t));
458
- const payload = descriptorValidationPayload();
459
- if ((args.format ?? "text") === "json") {
460
- emitStructured(payload, "json", out);
461
- }
462
- else {
463
- out(`descriptor validation ${payload.status}: ${payload.summary.passed} passed, ${payload.summary.failed} failed\n`);
464
- for (const violation of payload.violations)
465
- err(`- ${violation}\n`);
466
- }
467
- return payload.status === "pass" ? 0 : 1;
468
- }
469
402
  // ── artifact family ─────────────────────────────────────────────────
470
- const VALIDATE_ARTIFACT_LABELS = [
471
- "CHANGELOG.md",
472
- "DECISIONS.md",
473
- "DESIGN.md",
474
- "DOCS.md",
475
- "HEALTH.md",
476
- "PLAN.md",
477
- "PROGRESS.md",
478
- "TODO.md",
479
- "VISION.md",
480
- ];
481
403
  function validateArtifactLabel(artifact) {
482
404
  validateAgentString(artifact, "artifact");
483
- if (!VALIDATE_ARTIFACT_LABELS.includes(artifact)) {
484
- const valid = VALIDATE_ARTIFACT_LABELS.join(", ");
485
- throw new Error(`unsupported artifact ${pyRepr(artifact)}; valid artifacts: ${valid}. ` +
486
- "Syntax: agentera validate artifact --artifact <ARTIFACT> [--file <PATH>] [--format text|json]. " +
487
- "Example: agentera validate artifact --artifact PLAN.md --file .agentera/plan.yaml --format json");
405
+ if (normalizeArtifactProtocolId(artifact) === null) {
406
+ const valid = VALIDATE_ARTIFACT_PROTOCOL_IDS.join(", ");
407
+ throw new Error(`unsupported artifact ${pyRepr(artifact)}; valid artifact_id values: ${valid}. ` +
408
+ "Syntax: agentera check validate artifact --artifact <ARTIFACT_ID> [--file <PATH>] [--format text|json]. " +
409
+ "Example: agentera check validate artifact --artifact plan --file .agentera/plan.yaml --format json");
488
410
  }
489
411
  }
490
412
  export function cmdValidateArtifact(args, io) {
@@ -493,7 +415,7 @@ export function cmdValidateArtifact(args, io) {
493
415
  const artifact = String(args.artifact);
494
416
  validateArtifactLabel(artifact);
495
417
  const cwd = resolvePath(args.cwd ?? process.cwd());
496
- const adapter = new HookCliAdapter();
418
+ const adapter = new ArtifactValidationAdapter();
497
419
  const [rc, payload] = adapter.runExplicit(artifact, args.file ?? null, cwd);
498
420
  if ((args.format ?? "text") === "json") {
499
421
  const wrapped = {
@@ -512,8 +434,145 @@ export function cmdValidateArtifact(args, io) {
512
434
  out(`status=${payload.status} | artifact=${payload.artifact} | ` +
513
435
  `file=${payload.file} | docs_mapped_default=${payload.docs_mapped_default} | ` +
514
436
  `path_source=${payload.path_source}\n`);
437
+ // cast: payload.violations come from the artifact-validation engine IO boundary
515
438
  for (const violation of payload.violations)
516
439
  err(`${violation}\n`);
517
440
  return rc;
518
441
  }
519
- //# sourceMappingURL=validate.js.map
442
+ export function cmdValidateState(args, io) {
443
+ const out = io.out ?? ((text) => process.stdout.write(text));
444
+ const err = io.err ?? ((text) => process.stderr.write(text));
445
+ const projectRoot = resolvePath(args.cwd ?? process.cwd());
446
+ const payload = validateStatePayload(projectRoot);
447
+ const issues = payload.issues;
448
+ if ((args.format ?? "text") === "json")
449
+ emitStructured(payload, "json", out);
450
+ else {
451
+ out(`status=${payload.status} | entities=${payload.entity_count} | issues=${payload.issue_count} | project_root=${projectRoot}\n`);
452
+ for (const issue of issues)
453
+ err(`${issue.code}: ${issue.message}\nrecovery: ${issue.recovery}\n`);
454
+ if (payload.omitted_issue_count > 0)
455
+ err(`omitted ${payload.omitted_issue_count} additional issues; repair listed issues and rerun agentera check validate state --cwd ${JSON.stringify(projectRoot)}\n`);
456
+ }
457
+ return payload.valid ? 0 : 1;
458
+ }
459
+ function todoReconciliationValidationIssue(diagnosis) {
460
+ const label = diagnosis.state === "inactive" ? "inactive" : diagnosis.state === "unsafe_active" ? "unsafe active" : "invalid lifecycle";
461
+ return {
462
+ code: `todo_reconciliation_${diagnosis.state}`,
463
+ path: "TODO.md",
464
+ artifact: "todo",
465
+ message: `TODO reconciliation is ${label}; the project is not operable through the reconciled TODO surface`,
466
+ recovery: diagnosis.recovery_command,
467
+ diagnosis: diagnosis,
468
+ };
469
+ }
470
+ /** The executable whole-state contract shared by the public command and upgrade verification. */
471
+ export function validateStatePayload(projectRootInput) {
472
+ const projectRoot = resolvePath(projectRootInput);
473
+ const result = validateEntityState(projectRoot);
474
+ const issues = [...result.issues];
475
+ let additionalOmittedIssues = 0;
476
+ let entityMode = false;
477
+ try {
478
+ const binding = detectStateModeBinding(projectRoot);
479
+ if (binding.mode === "entities") {
480
+ entityMode = true;
481
+ binding.publicationContext.close();
482
+ const markerSnapshot = readProjectFileSnapshot(validateRealProjectRoot(projectRoot), ".agentera/state-mode.yaml");
483
+ if (markerSnapshot.kind !== "file")
484
+ throw new Error("entity-mode marker became unavailable during maintenance validation");
485
+ const marker = loadYamlMapping(markerSnapshot.bytes.toString("utf8"));
486
+ if (typeof marker.migration_id === "string" || marker.cutover === "one_way_git") {
487
+ const targets = loadEntityCutoverTargetsForMarker(projectRoot, markerSnapshot.bytes);
488
+ const byPath = new Map(result.entities.map((entity) => [entity.relativePath, entity]));
489
+ for (const target of targets) {
490
+ const actual = byPath.get(target.path);
491
+ if (!actual || actual.classification !== "valid" || (target.id && actual.id !== target.id) || (target.artifact && actual.artifact !== target.artifact)) {
492
+ issues.push({ code: "missing_migrated_entity", path: target.path, id: target.id ?? null, artifact: target.artifact ?? null, message: `cutover target '${target.path}' is missing or no longer has its declared identity`, recovery: "Restore a valid canonical entity at the manifest-declared path; no state was changed." });
493
+ }
494
+ }
495
+ }
496
+ }
497
+ }
498
+ catch (error) {
499
+ const message = error.message;
500
+ if (issues.length < 100)
501
+ issues.push({
502
+ code: message.includes("state mode marker") ? "invalid_lifecycle_state" : "invalid_state_marker_or_manifest",
503
+ path: ".agentera/state-mode.yaml",
504
+ message: message.includes("state mode marker") ? "entity-state lifecycle marker is invalid" : message,
505
+ recovery: "Restore the durable marker and immutable migration evidence, then rerun this read-only check.",
506
+ });
507
+ else
508
+ additionalOmittedIssues += 1;
509
+ }
510
+ if (entityMode) {
511
+ let reconciliation = null;
512
+ try {
513
+ reconciliation = inspectTodoReconciliationState(projectRoot);
514
+ if (reconciliation?.status === "action_required") {
515
+ if (issues.length < 100)
516
+ issues.push(todoReconciliationValidationIssue(reconciliation));
517
+ else
518
+ additionalOmittedIssues += 1;
519
+ }
520
+ }
521
+ catch (error) {
522
+ if (issues.length < 100)
523
+ issues.push({ code: "invalid_todo_reconciliation", path: "TODO.md", artifact: "todo", message: "TODO reconciliation could not be inspected without state changes", recovery: "Restore valid bounded TODO reconciliation state, then rerun this read-only check." });
524
+ else
525
+ additionalOmittedIssues += 1;
526
+ }
527
+ if (reconciliation?.state === "invalid_lifecycle")
528
+ return finishStateValidation(projectRoot, result, issues, additionalOmittedIssues);
529
+ try {
530
+ const reconciliation = inspectTodoReconciliationDrift(projectRoot);
531
+ const driftItems = Array.isArray(reconciliation.items) ? reconciliation.items.filter((item) => item !== null && typeof item === "object" && !Array.isArray(item)) : [];
532
+ const reconciliationOmitted = Number(reconciliation.omitted_count ?? 0);
533
+ const available = Math.max(0, 100 - issues.length);
534
+ for (const item of driftItems.slice(0, available)) {
535
+ const id = String(item.id ?? "unknown");
536
+ const state = String(item.state ?? "drift");
537
+ const fields = [...new Set([
538
+ ...(Array.isArray(item.markdown_changed_fields) ? item.markdown_changed_fields : []),
539
+ ...(Array.isArray(item.entity_changed_fields) ? item.entity_changed_fields : []),
540
+ ...(Array.isArray(item.conflicting_fields) ? item.conflicting_fields : []),
541
+ ].filter((field) => typeof field === "string"))].sort();
542
+ issues.push({
543
+ code: "todo_reconciliation_drift",
544
+ path: "TODO.md",
545
+ id,
546
+ artifact: "todo",
547
+ message: `managed TODO '${id}' has ${state} reconciliation drift${fields.length ? ` in ${fields.join(", ")}` : ""}`,
548
+ recovery: "Review the reported authority and run the intended typed TODO mutation once; the writer reconciles one-sided changes atomically and rejects conflicts before effects.",
549
+ });
550
+ }
551
+ additionalOmittedIssues += Math.max(0, driftItems.length - available) + (Number.isSafeInteger(reconciliationOmitted) && reconciliationOmitted > 0 ? reconciliationOmitted : 0);
552
+ }
553
+ catch (error) {
554
+ if (issues.length < 100)
555
+ issues.push({ code: "invalid_todo_reconciliation", path: "TODO.md", artifact: "todo", message: error.message, recovery: "Restore valid bounded managed TODO Markdown, activation metadata, and public baselines, then rerun this read-only check." });
556
+ else
557
+ additionalOmittedIssues += 1;
558
+ }
559
+ }
560
+ return finishStateValidation(projectRoot, result, issues, additionalOmittedIssues);
561
+ }
562
+ function finishStateValidation(projectRoot, result, issues, additionalOmittedIssues) {
563
+ const omittedIssueCount = result.omittedIssueCount + additionalOmittedIssues;
564
+ const valid = result.valid && issues.length === 0 && omittedIssueCount === 0;
565
+ const payload = {
566
+ command: "check validate state",
567
+ target_family: "state",
568
+ status: valid ? "pass" : "fail",
569
+ valid,
570
+ project_root: projectRoot,
571
+ entity_count: result.entityCount,
572
+ issue_count: issues.length + omittedIssueCount,
573
+ omitted_issue_count: omittedIssueCount,
574
+ valid_artifact_values: result.validArtifactValues,
575
+ issues: issues,
576
+ };
577
+ return payload;
578
+ }