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
@@ -0,0 +1,371 @@
1
+ import path from "node:path";
2
+ import { loadYamlMappingFile } from "../core/yaml.js";
3
+ import { resolveSourceRoot } from "../core/sourceRoot.js";
4
+ export class EvidenceTierContractError extends Error {
5
+ constructor(message) {
6
+ super(message);
7
+ this.name = "EvidenceTierContractError";
8
+ }
9
+ }
10
+ /** Supported source families the contract must never silently omit. */
11
+ export const REQUIRED_SOURCE_FAMILIES = [
12
+ "codex",
13
+ "cursor",
14
+ "opencode",
15
+ "copilot",
16
+ "claude-code",
17
+ ];
18
+ /** Signal semantics whose required meaning must remain available. */
19
+ export const REQUIRED_SIGNAL_KINDS = [
20
+ "correction",
21
+ "decision",
22
+ "question",
23
+ "instruction",
24
+ "configuration",
25
+ "record_identity",
26
+ "date",
27
+ "evidence_anchor",
28
+ ];
29
+ /** Compatibility states that must have deterministic, actionable outcomes. */
30
+ export const REQUIRED_COMPATIBILITY_STATES = [
31
+ "oversized",
32
+ "legacy",
33
+ "missing",
34
+ "corrupt",
35
+ "incomplete",
36
+ ];
37
+ /** Latent startup-analysis reader that must appear in the consumer map. */
38
+ export const STARTUP_ANALYSIS_CONSUMER = "startup_analysis";
39
+ /** Profile-synthesis consumer that must appear in the consumer map. */
40
+ export const PROFILE_SYNTHESIS_CONSUMER = "profile_synthesis";
41
+ /** Signal types the profile_synthesis consumer reads for bounded synthesis. */
42
+ export const PROFILE_SIGNAL_TYPES = [
43
+ "decision",
44
+ "question",
45
+ "correction",
46
+ "instruction",
47
+ "configuration",
48
+ ];
49
+ export function evidenceTierAuthorityPath(root = resolveSourceRoot()) {
50
+ return path.join(root, "references", "analysis", "evidence-tier-authority.yaml");
51
+ }
52
+ function mapping(value) {
53
+ return value !== null && typeof value === "object" && !Array.isArray(value)
54
+ ? value
55
+ : null;
56
+ }
57
+ function asRecord(value, label) {
58
+ const m = mapping(value);
59
+ if (m === null) {
60
+ throw new EvidenceTierContractError(`${label} must be a mapping`);
61
+ }
62
+ return m;
63
+ }
64
+ function asMappingMap(value, label) {
65
+ const m = mapping(value);
66
+ const out = new Map();
67
+ if (m === null) {
68
+ throw new EvidenceTierContractError(`${label} must be a mapping`);
69
+ }
70
+ for (const [key, entry] of Object.entries(m)) {
71
+ const em = mapping(entry);
72
+ if (em === null) {
73
+ throw new EvidenceTierContractError(`${label}.${key} must be a mapping`);
74
+ }
75
+ out.set(key, em);
76
+ }
77
+ return out;
78
+ }
79
+ function asString(value, label) {
80
+ if (typeof value !== "string" || value.length === 0) {
81
+ throw new EvidenceTierContractError(`${label} must be a non-empty string`);
82
+ }
83
+ return value;
84
+ }
85
+ function asStringArray(value, label) {
86
+ if (!Array.isArray(value)) {
87
+ throw new EvidenceTierContractError(`${label} must be an array`);
88
+ }
89
+ return value.map((entry, i) => asString(entry, `${label}[${i}]`));
90
+ }
91
+ function asPositiveInt(value, label) {
92
+ if (typeof value !== "number" || !Number.isFinite(value) || value <= 0 || Math.floor(value) !== value) {
93
+ throw new EvidenceTierContractError(`${label} must be a positive integer`);
94
+ }
95
+ return value;
96
+ }
97
+ function asPositiveNumber(value, label) {
98
+ if (typeof value !== "number" || !Number.isFinite(value) || value <= 0 || value > 1) {
99
+ throw new EvidenceTierContractError(`${label} must be a positive number in (0, 1]`);
100
+ }
101
+ return value;
102
+ }
103
+ /**
104
+ * A family declares either `source_product` (single string) or `source_products`
105
+ * (list, e.g. cursor covers both Cursor and Cursor Agent). Normalize to a list
106
+ * for uniform coverage checks. At least one product is required.
107
+ */
108
+ function resolveSourceProduct(entry, label) {
109
+ const products = entry.source_products ?? entry.source_product;
110
+ if (products === undefined) {
111
+ throw new EvidenceTierContractError(`${label} must declare source_product or source_products`);
112
+ }
113
+ return Array.isArray(products) ? asStringArray(products, `${label}.source_products`) : [asString(products, `${label}.source_product`)];
114
+ }
115
+ /** Load and structurally validate the evidence-tier authority YAML. */
116
+ export function loadEvidenceTierContract(contractPath = evidenceTierAuthorityPath()) {
117
+ let raw;
118
+ try {
119
+ raw = loadYamlMappingFile(contractPath);
120
+ }
121
+ catch (error) {
122
+ throw new EvidenceTierContractError(`evidence tier authority ${contractPath} is unreadable or malformed: ${error.message}`);
123
+ }
124
+ const schemaVersion = asString(raw.schema_version, "schema_version");
125
+ if (schemaVersion !== "agentera.evidenceTierAuthority.v1") {
126
+ throw new EvidenceTierContractError(`evidence tier authority ${contractPath} has unsupported schema_version: ${schemaVersion}`);
127
+ }
128
+ const tiersMap = asMappingMap(raw.tiers, "tiers");
129
+ const tierIds = [];
130
+ for (const [key, entry] of tiersMap) {
131
+ if (key !== "full_evidence" && key !== "signal") {
132
+ throw new EvidenceTierContractError(`tiers.${key} is not a recognized tier id`);
133
+ }
134
+ tierIds.push(key);
135
+ const stored = asRecord(entry.stored_fields, `tiers.${key}.stored_fields`);
136
+ asStringArray(stored.required, `tiers.${key}.stored_fields.required`);
137
+ }
138
+ const familiesMap = asMappingMap(asRecord(raw.source_families, "source_families").families, "source_families.families");
139
+ const families = new Map();
140
+ for (const [familyId, entry] of familiesMap) {
141
+ const sourceClass = asString(entry.source_class, `source_families.families.${familyId}.source_class`);
142
+ if (sourceClass !== "active_runtime" && sourceClass !== "historical_import") {
143
+ throw new EvidenceTierContractError(`source_families.families.${familyId}.source_class must be active_runtime or historical_import`);
144
+ }
145
+ families.set(familyId, {
146
+ family_id: familyId,
147
+ source_class: sourceClass,
148
+ source_product: resolveSourceProduct(entry, `source_families.families.${familyId}`),
149
+ active_runtime: Boolean(entry.active_runtime),
150
+ inclusion_rule: typeof entry.inclusion_rule === "string" ? entry.inclusion_rule : undefined,
151
+ });
152
+ }
153
+ const consumerMapRoot = asRecord(raw.consumer_map, "consumer_map");
154
+ const consumersMap = asMappingMap(consumerMapRoot.consumers, "consumer_map.consumers");
155
+ const consumers = new Map();
156
+ for (const [consumerId, entry] of consumersMap) {
157
+ const tier = asString(entry.tier, `consumer_map.consumers.${consumerId}.tier`);
158
+ if (tier !== "full_evidence" && tier !== "signal") {
159
+ throw new EvidenceTierContractError(`consumer_map.consumers.${consumerId}.tier must be full_evidence or signal`);
160
+ }
161
+ consumers.set(consumerId, {
162
+ consumer_id: consumerId,
163
+ tier,
164
+ purpose: asString(entry.purpose, `consumer_map.consumers.${consumerId}.purpose`),
165
+ required_fields: asStringArray(entry.required_fields, `consumer_map.consumers.${consumerId}.required_fields`),
166
+ source_identity: asString(entry.source_identity, `consumer_map.consumers.${consumerId}.source_identity`),
167
+ input_contract: asString(entry.input_contract, `consumer_map.consumers.${consumerId}.input_contract`),
168
+ });
169
+ }
170
+ const semanticMap = asMappingMap(consumerMapRoot.semantic_consumers, "consumer_map.semantic_consumers");
171
+ const semanticConsumers = new Map();
172
+ for (const [consumerId, entry] of semanticMap) {
173
+ semanticConsumers.set(consumerId, {
174
+ consumer_id: consumerId,
175
+ tier: asString(entry.tier, `consumer_map.semantic_consumers.${consumerId}.tier`),
176
+ status: asString(entry.status, `consumer_map.semantic_consumers.${consumerId}.status`),
177
+ input_scope: typeof entry.input_scope === "string" ? entry.input_scope : undefined,
178
+ excluded_evidence_classes: Array.isArray(entry.excluded_evidence_classes)
179
+ ? asStringArray(entry.excluded_evidence_classes, `consumer_map.semantic_consumers.${consumerId}.excluded_evidence_classes`)
180
+ : [],
181
+ required_semantics: asStringArray(entry.required_semantics, `consumer_map.semantic_consumers.${consumerId}.required_semantics`),
182
+ });
183
+ }
184
+ const semanticsMap = asMappingMap(asRecord(raw.signal_semantics, "signal_semantics").kinds, "signal_semantics.kinds");
185
+ const signalSemantics = new Map();
186
+ for (const [kind, entry] of semanticsMap) {
187
+ signalSemantics.set(kind, {
188
+ kind,
189
+ meaning: asString(entry.meaning, `signal_semantics.kinds.${kind}.meaning`),
190
+ derivable_from: asString(entry.derivable_from, `signal_semantics.kinds.${kind}.derivable_from`),
191
+ consumer: asString(entry.consumer, `signal_semantics.kinds.${kind}.consumer`),
192
+ current_consumer: typeof entry.current_consumer === "string" ? entry.current_consumer : undefined,
193
+ });
194
+ }
195
+ const statesMap = asMappingMap(asRecord(raw.compatibility_states, "compatibility_states").states, "compatibility_states.states");
196
+ const compatibilityStates = new Map();
197
+ for (const [key, entry] of statesMap) {
198
+ if (!REQUIRED_COMPATIBILITY_STATES.includes(key)) {
199
+ throw new EvidenceTierContractError(`compatibility_states.states.${key} is not a recognized state`);
200
+ }
201
+ const stateId = key;
202
+ const outcome = asString(entry.outcome, `compatibility_states.states.${key}.outcome`);
203
+ if (outcome !== "recover" && outcome !== "degrade") {
204
+ throw new EvidenceTierContractError(`compatibility_states.states.${key}.outcome must be recover or degrade`);
205
+ }
206
+ compatibilityStates.set(stateId, {
207
+ state_id: stateId,
208
+ trigger: asString(entry.trigger, `compatibility_states.states.${key}.trigger`),
209
+ status: asString(entry.status, `compatibility_states.states.${key}.status`),
210
+ reason: asString(entry.reason, `compatibility_states.states.${key}.reason`),
211
+ outcome,
212
+ recovery: asString(entry.recovery, `compatibility_states.states.${key}.recovery`),
213
+ });
214
+ }
215
+ const reconciliation = asRecord(raw.decision_55_reconciliation, "decision_55_reconciliation");
216
+ const boundsRoot = asRecord(raw.bounds, "bounds");
217
+ const bounds = {
218
+ readerByteCap: asPositiveInt(boundsRoot.reader_byte_cap, "bounds.reader_byte_cap"),
219
+ shardByteCap: asPositiveInt(boundsRoot.shard_byte_cap, "bounds.shard_byte_cap"),
220
+ signalByteCap: asPositiveInt(boundsRoot.signal_byte_cap, "bounds.signal_byte_cap"),
221
+ };
222
+ const suffRoot = asRecord(raw.profile_sufficiency, "profile_sufficiency");
223
+ const profileSufficiency = {
224
+ profileSignalTypes: asStringArray(suffRoot.profile_signal_types, "profile_sufficiency.profile_signal_types"),
225
+ minimumFamilyRetention: asPositiveNumber(suffRoot.minimum_family_retention, "profile_sufficiency.minimum_family_retention"),
226
+ };
227
+ return {
228
+ schemaVersion,
229
+ status: asString(raw.status, "status"),
230
+ tierIds,
231
+ families,
232
+ consumers,
233
+ semanticConsumers,
234
+ signalSemantics,
235
+ compatibilityStates,
236
+ bounds,
237
+ profileSufficiency,
238
+ decisionNumber: typeof reconciliation.decision_number === "number"
239
+ ? reconciliation.decision_number
240
+ : 0,
241
+ };
242
+ }
243
+ /** All declared source family ids (no family is silently omitted). */
244
+ export function supportedSourceFamilies(contractPath = evidenceTierAuthorityPath()) {
245
+ return [...loadEvidenceTierContract(contractPath).families.keys()];
246
+ }
247
+ /** All declared consumers with their bounded input contract and required fields. */
248
+ export function consumerMap(contractPath = evidenceTierAuthorityPath()) {
249
+ return [...loadEvidenceTierContract(contractPath).consumers.values()];
250
+ }
251
+ /** All declared signal semantics available to current consumers. */
252
+ export function signalSemantics(contractPath = evidenceTierAuthorityPath()) {
253
+ return [...loadEvidenceTierContract(contractPath).signalSemantics.values()];
254
+ }
255
+ /** All declared compatibility states with deterministic, actionable outcomes. */
256
+ export function compatibilityStates(contractPath = evidenceTierAuthorityPath()) {
257
+ return [...loadEvidenceTierContract(contractPath).compatibilityStates.values()];
258
+ }
259
+ /**
260
+ * Projected byte caps for full-evidence shards and the signal tier. These are
261
+ * the bounds the publication writer and direct retriever enforce; they are read
262
+ * from the authority rather than duplicated in callers.
263
+ */
264
+ export function evidenceTierBounds(contractPath = evidenceTierAuthorityPath()) {
265
+ return loadEvidenceTierContract(contractPath).bounds;
266
+ }
267
+ /**
268
+ * Profile-synthesis sufficiency threshold (resolves planning Unknown 2). The
269
+ * profile_signal_types and minimum_family_retention are the authority a bounded
270
+ * profile reader projects when comparing the retained signal distribution
271
+ * against the intended distribution. Callers must not re-declare these.
272
+ */
273
+ export function profileSufficiency(contractPath = evidenceTierAuthorityPath()) {
274
+ return loadEvidenceTierContract(contractPath).profileSufficiency;
275
+ }
276
+ /**
277
+ * Validate the contract against its invariants. Returns a list of human-readable
278
+ * errors; an empty list means the contract satisfies every Task 1 acceptance
279
+ * invariant. Used by tests for both passing (production contract) and failing
280
+ * (mutated fixture) checks.
281
+ */
282
+ export function validateEvidenceTierContract(contractPath = evidenceTierAuthorityPath()) {
283
+ const errors = [];
284
+ let model;
285
+ try {
286
+ model = loadEvidenceTierContract(contractPath);
287
+ }
288
+ catch (error) {
289
+ return [error.message];
290
+ }
291
+ // AC1: every consumer has one bounded input contract supplying required fields
292
+ // with source identity.
293
+ for (const consumer of model.consumers.values()) {
294
+ if (consumer.required_fields.length === 0) {
295
+ errors.push(`consumer ${consumer.consumer_id} declares no required fields`);
296
+ }
297
+ if (!consumer.source_identity) {
298
+ errors.push(`consumer ${consumer.consumer_id} has no source identity`);
299
+ }
300
+ if (!consumer.input_contract) {
301
+ errors.push(`consumer ${consumer.consumer_id} has no input contract`);
302
+ }
303
+ }
304
+ if (!model.consumers.has(STARTUP_ANALYSIS_CONSUMER)) {
305
+ errors.push(`consumer map omits latent ${STARTUP_ANALYSIS_CONSUMER} reader`);
306
+ }
307
+ // AC2: no supported source family is silently omitted.
308
+ for (const family of REQUIRED_SOURCE_FAMILIES) {
309
+ if (!model.families.has(family)) {
310
+ errors.push(`source family ${family} is omitted`);
311
+ }
312
+ }
313
+ // AC3: signal semantics required meaning remains available to current and
314
+ // declared semantic consumers.
315
+ for (const kind of REQUIRED_SIGNAL_KINDS) {
316
+ const semantic = model.signalSemantics.get(kind);
317
+ if (!semantic) {
318
+ errors.push(`signal semantic ${kind} is omitted`);
319
+ continue;
320
+ }
321
+ if (!semantic.consumer) {
322
+ errors.push(`signal semantic ${kind} has no declared consumer`);
323
+ }
324
+ }
325
+ for (const [name, consumer] of model.semanticConsumers) {
326
+ for (const kind of consumer.required_semantics) {
327
+ if (!model.signalSemantics.has(kind)) {
328
+ errors.push(`semantic consumer ${name} requires unknown semantic ${kind}`);
329
+ }
330
+ }
331
+ }
332
+ const glossary = model.semanticConsumers.get("glossary");
333
+ if (glossary?.status !== "active" ||
334
+ glossary.input_scope !== "bounded_personal_history" ||
335
+ !glossary.excluded_evidence_classes.includes("project_file")) {
336
+ errors.push("active glossary evidence must use bounded personal history and exclude project files");
337
+ }
338
+ // AC4: every compatibility state is deterministic and actionable.
339
+ for (const state of REQUIRED_COMPATIBILITY_STATES) {
340
+ const def = model.compatibilityStates.get(state);
341
+ if (!def) {
342
+ errors.push(`compatibility state ${state} is omitted`);
343
+ continue;
344
+ }
345
+ if (def.outcome !== "recover" && def.outcome !== "degrade") {
346
+ errors.push(`compatibility state ${state} has non-deterministic outcome`);
347
+ }
348
+ if (!def.recovery) {
349
+ errors.push(`compatibility state ${state} has no actionable recovery`);
350
+ }
351
+ }
352
+ // Profile-synthesis sufficiency (Unknown 2): the consumer must appear, the
353
+ // sufficiency model must declare profile signal types, and each declared
354
+ // type must be a recognized signal semantic so the comparison is meaningful.
355
+ if (!model.consumers.has(PROFILE_SYNTHESIS_CONSUMER)) {
356
+ errors.push(`consumer map omits ${PROFILE_SYNTHESIS_CONSUMER} consumer`);
357
+ }
358
+ if (model.profileSufficiency.profileSignalTypes.length === 0) {
359
+ errors.push("profile_sufficiency declares no profile_signal_types");
360
+ }
361
+ for (const kind of model.profileSufficiency.profileSignalTypes) {
362
+ if (!model.signalSemantics.has(kind)) {
363
+ errors.push(`profile_sufficiency references unknown signal semantic ${kind}`);
364
+ }
365
+ }
366
+ // Decision 55 reconciliation: the decision is referenced, not rewritten.
367
+ if (model.decisionNumber !== 55) {
368
+ errors.push(`decision_55_reconciliation.decision_number is ${model.decisionNumber}, expected 55`);
369
+ }
370
+ return errors;
371
+ }
@@ -0,0 +1,79 @@
1
+ import { projectGlossaryDevelopmentValue } from "../core/developmentInvocation.js";
2
+ import { loadYamlMappingFile } from "../core/yaml.js";
3
+ import { glossaryEntryAuthorityPath } from "./glossaryEntryContract.js";
4
+ function mapping(value) {
5
+ return value !== null && typeof value === "object" && !Array.isArray(value)
6
+ ? value
7
+ : null;
8
+ }
9
+ function strings(value) {
10
+ return Array.isArray(value) && value.every((item) => typeof item === "string") ? value : [];
11
+ }
12
+ export function glossaryAdviceContract(pathname = glossaryEntryAuthorityPath()) {
13
+ const authority = loadYamlMappingFile(pathname);
14
+ const consumer = mapping(authority.consumer_boundary);
15
+ const acquisition = mapping(consumer?.acquisition);
16
+ const acquisitionBounds = mapping(acquisition?.bounds);
17
+ const availability = mapping(acquisition?.availability);
18
+ const advice = mapping(consumer?.advice_resolution);
19
+ const input = mapping(advice?.input);
20
+ const invocation = mapping(advice?.invocation);
21
+ const hostReview = mapping(input?.host_review);
22
+ const output = mapping(advice?.output);
23
+ const failure = mapping(advice?.failure);
24
+ const selection = mapping(consumer?.primary_selection);
25
+ const matrix = mapping(consumer?.outcome_matrix);
26
+ const advisories = mapping(consumer?.orthogonal_advisories);
27
+ return {
28
+ implementation: typeof advice?.implementation === "string" ? advice.implementation : "",
29
+ runtime: typeof advice?.runtime === "string" ? advice.runtime : "",
30
+ command: projectGlossaryDevelopmentValue(invocation?.command, "advice.command"),
31
+ requestSchemaVersion: typeof invocation?.request_schema_version === "string" ? invocation.request_schema_version : "",
32
+ requestFields: strings(invocation?.request_fields),
33
+ maxRequestUtf8Bytes: typeof invocation?.max_request_utf8_bytes === "number" ? invocation.max_request_utf8_bytes : 0,
34
+ maxRequestedTermUtf8Bytes: typeof acquisitionBounds?.max_source_utf8_bytes === "number"
35
+ ? acquisitionBounds.max_source_utf8_bytes
36
+ : 0,
37
+ maxEntries: typeof acquisitionBounds?.max_entries === "number" ? acquisitionBounds.max_entries : 0,
38
+ availabilityStates: strings(availability?.states),
39
+ hostReviewRelations: strings(hostReview?.relations),
40
+ hostReviewCandidateOwners: strings(hostReview?.candidate_owners),
41
+ hostReviewFields: strings(hostReview?.fields),
42
+ schemaVersion: typeof output?.schema_version === "string" ? output.schema_version : "",
43
+ outputFields: strings(output?.fields),
44
+ advisoryFields: strings(output?.advisory_fields),
45
+ failureClasses: strings(failure?.classes),
46
+ dimensions: Object.fromEntries(Object.entries(mapping(selection?.dimensions) ?? {}).map(([name, values]) => [
47
+ name,
48
+ strings(values),
49
+ ])),
50
+ rows: strings(selection?.order).map((name) => {
51
+ const row = mapping(matrix?.[name]);
52
+ return {
53
+ name,
54
+ match: Object.fromEntries(Object.entries(mapping(row?.match) ?? {}).map(([dimension, values]) => [
55
+ dimension,
56
+ strings(values),
57
+ ])),
58
+ selectedOwner: typeof row?.selected_owner === "string" ? row.selected_owner : "",
59
+ selectedMeaning: typeof row?.selected_meaning === "string" ? row.selected_meaning : "",
60
+ review: typeof row?.review === "string" ? row.review : "",
61
+ tension: typeof row?.tension === "string" ? row.tension : "",
62
+ };
63
+ }),
64
+ advisories: Object.entries(advisories ?? {}).map(([name, value]) => {
65
+ const advisory = mapping(value);
66
+ return {
67
+ name,
68
+ primaryOutcome: typeof advisory?.primary_outcome === "string" ? advisory.primary_outcome : "",
69
+ match: Object.fromEntries(Object.entries(mapping(advisory?.match) ?? {}).map(([dimension, values]) => [
70
+ dimension,
71
+ strings(values),
72
+ ])),
73
+ caveatReason: typeof advisory?.caveat_reason === "string" ? advisory.caveat_reason : "",
74
+ ownershipState: typeof advisory?.ownership_state === "string" ? advisory.ownership_state : "",
75
+ review: typeof advisory?.review === "string" ? advisory.review : null,
76
+ };
77
+ }),
78
+ };
79
+ }
@@ -0,0 +1,67 @@
1
+ import { loadYamlMappingFile } from "../core/yaml.js";
2
+ import { glossaryEntryAuthorityPath } from "./glossaryEntryContract.js";
3
+ function mapping(value) {
4
+ return value !== null && typeof value === "object" && !Array.isArray(value)
5
+ ? value
6
+ : null;
7
+ }
8
+ function strings(value) {
9
+ return Array.isArray(value) && value.every((item) => typeof item === "string") ? value : [];
10
+ }
11
+ function fixedValues(value) {
12
+ const source = mapping(value);
13
+ if (!source)
14
+ return {};
15
+ return Object.fromEntries(Object.entries(source).filter((entry) => typeof entry[1] === "string" || entry[1] === null));
16
+ }
17
+ function allowedPairs(value) {
18
+ if (!Array.isArray(value))
19
+ return [];
20
+ return value.flatMap((candidate) => {
21
+ const pair = mapping(candidate);
22
+ return typeof pair?.reason === "string" && typeof pair.ownership_state === "string"
23
+ ? [{ reason: pair.reason, ownershipState: pair.ownership_state }]
24
+ : [];
25
+ });
26
+ }
27
+ export function glossaryCaveatPairAllowed(contract, reason, ownershipState) {
28
+ return contract.allowedCurrentPairs.some((pair) => pair.reason === reason && pair.ownershipState === ownershipState);
29
+ }
30
+ export function glossaryCaveatContract(pathname = glossaryEntryAuthorityPath()) {
31
+ return glossaryCaveatContractFromDocument(loadYamlMappingFile(pathname));
32
+ }
33
+ export function glossaryCaveatContractFromDocument(authority) {
34
+ const caveat = mapping(mapping(authority.consumer_boundary)?.autonomous_caveat);
35
+ const identity = mapping(caveat?.identity);
36
+ const envelope = mapping(caveat?.envelope);
37
+ const currentAppend = mapping(envelope?.current_append);
38
+ const primeProjection = mapping(caveat?.prime_projection);
39
+ const primeSource = mapping(primeProjection?.source);
40
+ const primeCapacity = mapping(primeProjection?.capacity);
41
+ return {
42
+ fields: strings(envelope?.fields),
43
+ currentAppendCallerFields: strings(currentAppend?.caller_fields),
44
+ currentAppendCallerFixedValues: Object.fromEntries(Object.entries(fixedValues(currentAppend?.caller_fixed_values)).filter((entry) => typeof entry[1] === "string")),
45
+ currentAppendWriterFields: strings(currentAppend?.writer_fields),
46
+ currentAppendWriterFixedValues: fixedValues(currentAppend?.writer_fixed_values),
47
+ events: strings(envelope?.events),
48
+ capabilities: strings(envelope?.capabilities),
49
+ reasons: strings(envelope?.reasons),
50
+ ownershipStates: strings(envelope?.ownership_states),
51
+ allowedCurrentPairs: allowedPairs(caveat?.allowed_current_pairs),
52
+ idAlphabet: typeof identity?.alphabet === "string" ? identity.alphabet : "",
53
+ idLength: typeof identity?.length === "number" ? identity.length : 0,
54
+ idPattern: new RegExp(typeof identity?.pattern === "string" ? identity.pattern : "a^"),
55
+ maxStringUtf8Bytes: typeof envelope?.max_string_utf8_bytes === "number" ? envelope.max_string_utf8_bytes : 0,
56
+ primeAttentionText: typeof primeProjection?.attention_text === "string" ? primeProjection.attention_text : "",
57
+ primeSourceArtifact: typeof primeSource?.artifact === "string" ? primeSource.artifact : "",
58
+ primeSourceBoundary: typeof primeSource?.boundary === "string" ? primeSource.boundary : "",
59
+ primeSourceCapability: typeof primeSource?.capability === "string" ? primeSource.capability : "",
60
+ primePublicAttentionLimit: typeof primeCapacity?.public_attention_limit === "number"
61
+ ? primeCapacity.public_attention_limit
62
+ : 0,
63
+ primeReservedGlossarySlots: typeof primeCapacity?.reserved_glossary_slots === "number"
64
+ ? primeCapacity.reserved_glossary_slots
65
+ : 0,
66
+ };
67
+ }