agentera 3.0.0-dev.5 → 3.0.0-dev.51

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 (598) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +119 -22
  3. package/bundle/CHANGELOG.md +1351 -0
  4. package/bundle/DESIGN.md +229 -0
  5. package/bundle/LICENSE +201 -0
  6. package/bundle/README.md +143 -0
  7. package/bundle/UPGRADE.md +236 -0
  8. package/bundle/extract-corpus-parity.json +21 -0
  9. package/bundle/fixtures/routing/hybrid-corpus.yaml +154 -0
  10. package/bundle/references/adapters/package-publication.json +437 -0
  11. package/bundle/references/adapters/package-registry.yaml +435 -189
  12. package/bundle/references/adapters/package-surface-characterization.md +66 -35
  13. package/bundle/references/adapters/runtime-lifecycle-adapters.yaml +74 -0
  14. package/bundle/references/adapters/runtime-lifecycle-authority.yaml +62 -0
  15. package/bundle/references/adapters/runtime-lifecycle-operation-contract.yaml +84 -0
  16. package/bundle/references/adapters/runtime-retired-resources.yaml +333 -0
  17. package/bundle/references/analysis/evidence-tier-authority.yaml +518 -0
  18. package/bundle/references/analysis/verification-policy.yaml +191 -0
  19. package/bundle/references/artifacts/artifact-registry-interface-model.yaml +20 -10
  20. package/bundle/references/artifacts/glossary-entry-contract.yaml +1254 -0
  21. package/bundle/references/artifacts/state-storage-authority.yaml +3022 -0
  22. package/bundle/references/artifacts/verbosity-budget-authority.yaml +42 -0
  23. package/bundle/references/cli/app-lifecycle-vocabulary.yaml +7 -8
  24. package/bundle/references/cli/capability-instruction-contract.yaml +11 -14
  25. package/bundle/references/cli/hybrid-route-contract.yaml +438 -0
  26. package/bundle/references/cli/routing-model.md +155 -0
  27. package/bundle/references/cli/trigger-schema-enrichment.md +147 -0
  28. package/bundle/references/cli/update-channels.yaml +19 -1
  29. package/bundle/references/cli/vocabulary-index.yaml +20 -17
  30. package/bundle/references/cli/vocabulary.md +326 -361
  31. package/bundle/references/meta/retained-reference-authority.yaml +151 -0
  32. package/bundle/registry.json +13 -13
  33. package/bundle/skills/agentera/SKILL.md +224 -422
  34. package/bundle/skills/agentera/capabilities/audit/schemas/artifacts.yaml +84 -0
  35. package/bundle/skills/agentera/capabilities/{inspektera → audit}/schemas/exit.yaml +2 -2
  36. package/bundle/skills/agentera/capabilities/audit/schemas/triggers.yaml +25 -0
  37. package/bundle/skills/agentera/capabilities/{inspektera → audit}/schemas/validation.yaml +37 -18
  38. package/bundle/skills/agentera/capabilities/build/schemas/artifacts.yaml +102 -0
  39. package/bundle/skills/agentera/capabilities/{realisera → build}/schemas/exit.yaml +6 -5
  40. package/bundle/skills/agentera/capabilities/build/schemas/triggers.yaml +27 -0
  41. package/bundle/skills/agentera/capabilities/build/schemas/validation.yaml +176 -0
  42. package/bundle/skills/agentera/capabilities/{visualisera → design}/schemas/artifacts.yaml +12 -12
  43. package/bundle/skills/agentera/capabilities/{visualisera → design}/schemas/exit.yaml +5 -5
  44. package/bundle/skills/agentera/capabilities/design/schemas/triggers.yaml +16 -0
  45. package/bundle/skills/agentera/capabilities/{visualisera → design}/schemas/validation.yaml +7 -7
  46. package/bundle/skills/agentera/capabilities/discuss/schemas/artifacts.yaml +51 -0
  47. package/bundle/skills/agentera/capabilities/{resonera → discuss}/schemas/exit.yaml +2 -2
  48. package/bundle/skills/agentera/capabilities/discuss/schemas/triggers.yaml +20 -0
  49. package/bundle/skills/agentera/capabilities/discuss/schemas/validation.yaml +144 -0
  50. package/bundle/skills/agentera/capabilities/document/schemas/artifacts.yaml +80 -0
  51. package/bundle/skills/agentera/capabilities/document/schemas/triggers.yaml +16 -0
  52. package/bundle/skills/agentera/capabilities/{dokumentera → document}/schemas/validation.yaml +18 -18
  53. package/bundle/skills/agentera/capabilities/{optimera → optimize}/schemas/artifacts.yaml +18 -18
  54. package/bundle/skills/agentera/capabilities/{optimera → optimize}/schemas/exit.yaml +2 -2
  55. package/bundle/skills/agentera/capabilities/optimize/schemas/triggers.yaml +16 -0
  56. package/bundle/skills/agentera/capabilities/{optimera → optimize}/schemas/validation.yaml +9 -9
  57. package/bundle/skills/agentera/capabilities/orchestrate/schemas/artifacts.yaml +76 -0
  58. package/bundle/skills/agentera/capabilities/{orkestrera → orchestrate}/schemas/exit.yaml +9 -7
  59. package/bundle/skills/agentera/capabilities/orchestrate/schemas/triggers.yaml +23 -0
  60. package/bundle/skills/agentera/capabilities/orchestrate/schemas/validation.yaml +121 -0
  61. package/bundle/skills/agentera/capabilities/plan/schemas/artifacts.yaml +66 -0
  62. package/bundle/skills/agentera/capabilities/{planera → plan}/schemas/exit.yaml +2 -2
  63. package/bundle/skills/agentera/capabilities/plan/schemas/triggers.yaml +23 -0
  64. package/bundle/skills/agentera/capabilities/plan/schemas/validation.yaml +121 -0
  65. package/bundle/skills/agentera/capabilities/profile/schemas/artifacts.yaml +23 -0
  66. package/bundle/skills/agentera/capabilities/{profilera → profile}/schemas/exit.yaml +6 -5
  67. package/bundle/skills/agentera/capabilities/profile/schemas/triggers.yaml +20 -0
  68. package/bundle/skills/agentera/capabilities/profile/schemas/validation.yaml +115 -0
  69. package/bundle/skills/agentera/capabilities/research/schemas/artifacts.yaml +24 -0
  70. package/bundle/skills/agentera/capabilities/research/schemas/triggers.yaml +16 -0
  71. package/bundle/skills/agentera/capabilities/{inspirera → research}/schemas/validation.yaml +2 -2
  72. package/bundle/skills/agentera/capabilities/status/schemas/artifacts.yaml +73 -0
  73. package/bundle/skills/agentera/capabilities/status/schemas/triggers.yaml +22 -0
  74. package/bundle/skills/agentera/capabilities/{hej → status}/schemas/validation.yaml +5 -5
  75. package/bundle/skills/agentera/capabilities/{visionera → vision}/schemas/artifacts.yaml +16 -16
  76. package/bundle/skills/agentera/capabilities/{visionera → vision}/schemas/exit.yaml +7 -6
  77. package/bundle/skills/agentera/capabilities/vision/schemas/triggers.yaml +23 -0
  78. package/bundle/skills/agentera/capabilities/{visionera → vision}/schemas/validation.yaml +18 -20
  79. package/bundle/skills/agentera/capability_schema_contract.yaml +178 -34
  80. package/bundle/skills/agentera/protocol.yaml +31 -31
  81. package/bundle/skills/agentera/route-phrases.yaml +81 -0
  82. package/bundle/skills/agentera/schemas/artifacts/changelog.yaml +5 -4
  83. package/bundle/skills/agentera/schemas/artifacts/decisions.yaml +39 -21
  84. package/bundle/skills/agentera/schemas/artifacts/design.yaml +5 -4
  85. package/bundle/skills/agentera/schemas/artifacts/docs.yaml +15 -19
  86. package/bundle/skills/agentera/schemas/artifacts/experiments.yaml +145 -14
  87. package/bundle/skills/agentera/schemas/artifacts/glossary.yaml +82 -0
  88. package/bundle/skills/agentera/schemas/artifacts/health.yaml +58 -21
  89. package/bundle/skills/agentera/schemas/artifacts/objective.yaml +22 -8
  90. package/bundle/skills/agentera/schemas/artifacts/plan.yaml +458 -36
  91. package/bundle/skills/agentera/schemas/artifacts/progress.yaml +128 -17
  92. package/bundle/skills/agentera/schemas/artifacts/todo.yaml +342 -42
  93. package/bundle/skills/agentera/schemas/artifacts/vision.yaml +3 -3
  94. package/dist/analytics/extractCorpus/cli.js +190 -0
  95. package/dist/analytics/extractCorpus/copilotSessions.js +275 -0
  96. package/dist/analytics/extractCorpus/core.js +392 -0
  97. package/dist/analytics/extractCorpus/corpus.js +167 -0
  98. package/dist/analytics/extractCorpus/coverageAudit.js +260 -0
  99. package/dist/analytics/extractCorpus/cursorSessions.js +425 -0
  100. package/dist/analytics/extractCorpus/evidenceTiers.js +603 -0
  101. package/dist/analytics/extractCorpus/extractCorpusParity.js +105 -0
  102. package/dist/analytics/extractCorpus/filesystemSources.js +118 -0
  103. package/dist/analytics/extractCorpus/index.js +14 -0
  104. package/dist/analytics/extractCorpus/jsonlSessions.js +204 -0
  105. package/dist/analytics/extractCorpus/sqliteCaps.js +43 -0
  106. package/dist/analytics/extractCorpus/sqliteSessions.js +367 -0
  107. package/dist/analytics/extractCorpus/tierReader.js +108 -0
  108. package/dist/analytics/extractCorpus.js +2 -1791
  109. package/dist/analytics/glossaryAdviceResolution.js +166 -0
  110. package/dist/analytics/glossaryInputAcquisition.js +319 -0
  111. package/dist/analytics/personalGlossaryAdmission.js +133 -0
  112. package/dist/analytics/personalGlossaryProfile.js +219 -0
  113. package/dist/analytics/profileSignals.js +211 -0
  114. package/dist/analytics/usageStats.js +169 -42
  115. package/dist/audit/terminologyDrift.js +281 -0
  116. package/dist/bin/agentera.js +3 -2
  117. package/dist/capabilities/audit/instructions.js +16 -0
  118. package/dist/capabilities/build/instructions.js +56 -0
  119. package/dist/capabilities/design/instructions.js +4 -0
  120. package/dist/capabilities/discuss/instructions.js +29 -0
  121. package/dist/capabilities/document/instructions.js +11 -0
  122. package/dist/capabilities/index.js +29 -27
  123. package/dist/capabilities/optimize/instructions.js +14 -0
  124. package/dist/capabilities/orchestrate/instructions.js +42 -0
  125. package/dist/capabilities/plan/instructions.js +33 -0
  126. package/dist/capabilities/profile/instructions.js +70 -0
  127. package/dist/capabilities/research/instructions.js +5 -0
  128. package/dist/capabilities/status/instructions.js +15 -0
  129. package/dist/capabilities/status/startupInstructions.js +34 -0
  130. package/dist/capabilities/vision/instructions.js +4 -0
  131. package/dist/cli/appContext.js +30 -24
  132. package/dist/cli/argvalidate.js +0 -1
  133. package/dist/cli/capabilityContext/benchmark.js +565 -0
  134. package/dist/cli/capabilityContext/bespoke.js +44 -0
  135. package/dist/cli/capabilityContext/build.js +242 -0
  136. package/dist/cli/capabilityContext/closeout.js +233 -0
  137. package/dist/cli/capabilityContext/contract.js +179 -0
  138. package/dist/cli/capabilityContext/evidence.js +463 -0
  139. package/dist/cli/capabilityContext/index.js +3 -0
  140. package/dist/cli/capabilityContext/orchestration.js +131 -0
  141. package/dist/cli/capabilityContext/planState.js +260 -0
  142. package/dist/cli/capabilityContext/progress.js +142 -0
  143. package/dist/cli/capabilityContext/projectVerification.js +409 -0
  144. package/dist/cli/capabilityContext/shared.js +83 -0
  145. package/dist/cli/capabilityContext/slim.js +152 -0
  146. package/dist/cli/capabilityContext/startup.js +150 -0
  147. package/dist/cli/capabilityContext/startupAggregation.js +68 -0
  148. package/dist/cli/capabilityContext/types.js +56 -0
  149. package/dist/cli/capabilityContext.js +1 -2487
  150. package/dist/cli/commands/appHome.js +22 -0
  151. package/dist/cli/commands/capability.js +4 -4
  152. package/dist/cli/commands/compact.js +164 -14
  153. package/dist/cli/commands/doctor.js +122 -97
  154. package/dist/cli/commands/durability.js +81 -0
  155. package/dist/cli/commands/glossaryAdvice.js +138 -0
  156. package/dist/cli/commands/lint.js +26 -44
  157. package/dist/cli/commands/personalGlossary.js +176 -0
  158. package/dist/cli/commands/prime/briefOrientation.js +747 -0
  159. package/dist/cli/commands/prime/buildExecutionRequest.js +165 -0
  160. package/dist/cli/commands/prime/bundleStatus.js +190 -0
  161. package/dist/cli/commands/prime/collectEntityOrientation.js +326 -0
  162. package/dist/cli/commands/prime/collectOrientationState.js +212 -0
  163. package/dist/cli/commands/prime/orientationOutput.js +399 -0
  164. package/dist/cli/commands/prime/types.js +1 -0
  165. package/dist/cli/commands/prime/v1Migration.js +38 -0
  166. package/dist/cli/commands/prime.js +80 -558
  167. package/dist/cli/commands/profileGrounding.js +55 -0
  168. package/dist/cli/commands/query.js +78 -53
  169. package/dist/cli/commands/report.js +96 -25
  170. package/dist/cli/commands/route.js +142 -0
  171. package/dist/cli/commands/schema.js +266 -143
  172. package/dist/cli/commands/state/decisions.js +387 -0
  173. package/dist/cli/commands/state/docs.js +70 -0
  174. package/dist/cli/commands/state/experimentRecords.js +151 -0
  175. package/dist/cli/commands/state/experiments.js +14 -0
  176. package/dist/cli/commands/state/get.js +129 -0
  177. package/dist/cli/commands/state/health.js +14 -0
  178. package/dist/cli/commands/state/index.js +16 -0
  179. package/dist/cli/commands/state/list.js +194 -0
  180. package/dist/cli/commands/state/objective.js +25 -0
  181. package/dist/cli/commands/state/plan.js +14 -0
  182. package/dist/cli/commands/state/planTasks.js +154 -0
  183. package/dist/cli/commands/state/plans.js +154 -0
  184. package/dist/cli/commands/state/progress.js +13 -0
  185. package/dist/cli/commands/state/shared.js +14 -0
  186. package/dist/cli/commands/state/todo.js +42 -0
  187. package/dist/cli/commands/state/write.js +430 -0
  188. package/dist/cli/commands/upgrade.js +146 -5
  189. package/dist/cli/commands/upgradeVerify.js +118 -0
  190. package/dist/cli/commands/validate.js +272 -223
  191. package/dist/cli/commands/verify.js +24 -9
  192. package/dist/cli/contracts/bundleStatus.js +1 -0
  193. package/dist/cli/contracts/orientationState.js +1 -0
  194. package/dist/cli/dispatch/argvParser.js +32 -0
  195. package/dist/cli/dispatch/check.js +372 -0
  196. package/dist/cli/dispatch/commands.js +27 -0
  197. package/dist/cli/dispatch/index.js +207 -0
  198. package/dist/cli/dispatch/lifecycle.js +652 -0
  199. package/dist/cli/dispatch/prime.js +139 -0
  200. package/dist/cli/dispatch/projections.js +17 -0
  201. package/dist/cli/dispatch/shared.js +63 -0
  202. package/dist/cli/dispatch/state.js +140 -0
  203. package/dist/cli/dispatch.js +1 -1294
  204. package/dist/cli/errors.js +16 -17
  205. package/dist/cli/help.js +394 -43
  206. package/dist/cli/migrationRequired.js +87 -0
  207. package/dist/cli/orientation/attention.js +61 -0
  208. package/dist/cli/orientation/corpusCoverage.js +102 -0
  209. package/dist/cli/orientation.js +438 -170
  210. package/dist/cli/planArtifacts.js +350 -0
  211. package/dist/cli/planEvidence.js +157 -0
  212. package/dist/cli/planLifecycleState.js +36 -0
  213. package/dist/cli/planTaskIndex.js +11 -0
  214. package/dist/cli/preCutoverCommand.js +32 -0
  215. package/dist/cli/prime-blob.js +71 -3
  216. package/dist/cli/profileAcquisition.js +167 -0
  217. package/dist/cli/startupCompletenessContract.js +59 -0
  218. package/dist/cli/stateQuery.js +56 -14
  219. package/dist/cli/structured.js +0 -1
  220. package/dist/cli/todoMarkdown.js +25 -12
  221. package/dist/cli/todoReadinessSelection.js +192 -0
  222. package/dist/cli/todoSeverity.js +18 -0
  223. package/dist/core/atomicWriter.js +20 -0
  224. package/dist/core/developmentChannel.js +1 -0
  225. package/dist/core/developmentInvocation.js +374 -0
  226. package/dist/core/difflib.js +0 -1
  227. package/dist/core/envPaths.js +20 -0
  228. package/dist/core/jsonValue.js +5 -0
  229. package/dist/core/paths.js +0 -1
  230. package/dist/core/pyjson.js +67 -3
  231. package/dist/core/shell.js +4 -0
  232. package/dist/core/skillIdentity.js +23 -0
  233. package/dist/core/sourceRoot.js +9 -12
  234. package/dist/core/text.js +10 -0
  235. package/dist/core/toml.js +0 -1
  236. package/dist/core/yaml.js +8 -1
  237. package/dist/eval/evalSkills.js +30 -26
  238. package/dist/eval/hybridRouteEvaluation.js +155 -0
  239. package/dist/eval/semanticEval.js +43 -20
  240. package/dist/eval/semanticFixtures.js +16 -5
  241. package/dist/hooks/common.js +11 -79
  242. package/dist/hooks/compaction/apply.js +446 -0
  243. package/dist/hooks/compaction/dryRun.js +184 -0
  244. package/dist/hooks/compaction/index.js +22 -0
  245. package/dist/hooks/compaction/parse.js +325 -0
  246. package/dist/hooks/compaction/retention.js +202 -0
  247. package/dist/hooks/compaction/status.js +360 -0
  248. package/dist/hooks/compaction/types.js +5 -0
  249. package/dist/hooks/validateArtifact/agentFacing.js +9 -0
  250. package/dist/hooks/validateArtifact/index.js +92 -0
  251. package/dist/hooks/validateArtifact/markdown.js +145 -0
  252. package/dist/hooks/validateArtifact/schema.js +546 -0
  253. package/dist/hooks/validateArtifact/traversal.js +107 -0
  254. package/dist/hooks/validateArtifact/violations.js +107 -0
  255. package/dist/migrate/v2HandoffManifest.js +452 -0
  256. package/dist/registries/activationContract.js +2 -0
  257. package/dist/registries/activationTuples.js +107 -0
  258. package/dist/registries/artifactProtocolIds.js +78 -0
  259. package/dist/registries/artifactRegistry.js +224 -63
  260. package/dist/registries/artifactSchemaProjection.js +45 -0
  261. package/dist/registries/capabilityContract.js +129 -2
  262. package/dist/registries/evaluatorHandoffContract.js +2 -3
  263. package/dist/registries/evidenceTierContract.js +371 -0
  264. package/dist/registries/glossaryAdviceContract.js +79 -0
  265. package/dist/registries/glossaryCaveatContract.js +67 -0
  266. package/dist/registries/glossaryConsumerContractValidation.js +787 -0
  267. package/dist/registries/glossaryEntryContract.js +757 -0
  268. package/dist/registries/glossaryTermIdentity.js +17 -0
  269. package/dist/registries/glossaryTermOccurrence.js +20 -0
  270. package/dist/registries/hybridRoute.js +274 -0
  271. package/dist/registries/hybridRouteReceipt.js +221 -0
  272. package/dist/registries/packagePublication.js +229 -0
  273. package/dist/registries/packageRegistry.js +187 -211
  274. package/dist/registries/todoReadinessContract.js +448 -0
  275. package/dist/registries/triggerLoader.js +174 -0
  276. package/dist/registries/verbosityBudgetContract.js +205 -0
  277. package/dist/release/releaseMetadata.js +385 -0
  278. package/dist/runtime/lifecycleAdapterContract.js +457 -0
  279. package/dist/runtime/lifecycleAdapters.js +777 -0
  280. package/dist/runtime/lifecycleAuthority.js +453 -0
  281. package/dist/runtime/lifecycleOperationContract.js +123 -0
  282. package/dist/runtime/lifecycleOperations.js +634 -0
  283. package/dist/runtime/lifecycleOwnershipJournal.js +622 -0
  284. package/dist/runtime/lifecyclePublication.js +415 -0
  285. package/dist/runtime/lifecycleSnapshot.js +438 -0
  286. package/dist/runtime/nativeResourceCleanup.js +502 -0
  287. package/dist/setup/opencode.js +20 -0
  288. package/dist/setup/opencodeConstants.js +1 -0
  289. package/dist/setup/sharedSkill.js +45 -0
  290. package/dist/setup/smokeChecks.js +21 -82
  291. package/dist/state/archiveDiscovery.js +580 -0
  292. package/dist/state/archivePublication.js +225 -0
  293. package/dist/state/archiveRecovery.js +237 -0
  294. package/dist/state/archiveReplay.js +53 -0
  295. package/dist/state/canonicalMigrationRecord.js +36 -0
  296. package/dist/state/changelog.js +221 -0
  297. package/dist/state/decisionEntities.js +367 -0
  298. package/dist/state/decisionLegacyValidation.js +215 -0
  299. package/dist/state/decisionMigrationProvenance.js +199 -0
  300. package/dist/state/decisionOverlay.js +254 -0
  301. package/dist/state/decisionRevision.js +256 -0
  302. package/dist/state/decisionRevisionMigration.js +89 -0
  303. package/dist/state/directRetrieval.js +323 -0
  304. package/dist/state/durability.js +324 -0
  305. package/dist/state/entityCutover.js +459 -0
  306. package/dist/state/entityCutoverGit.js +127 -0
  307. package/dist/state/entityGlossaryAuthority.js +13 -0
  308. package/dist/state/entityListProjection.js +187 -0
  309. package/dist/state/entityListRuntimeRegistry.js +85 -0
  310. package/dist/state/entityMigrationCausality.js +97 -0
  311. package/dist/state/entityMigrationIdentity.js +5 -0
  312. package/dist/state/entityMigrationPreview.js +846 -0
  313. package/dist/state/entityMigrationTodo.js +133 -0
  314. package/dist/state/entityPublicationContext.js +806 -0
  315. package/dist/state/entityRetrievalHelp.js +506 -0
  316. package/dist/state/entityStorage.js +899 -0
  317. package/dist/state/exactReplacementRecovery.js +18 -0
  318. package/dist/state/experimentArchive.js +63 -0
  319. package/dist/state/experimentIdentity.js +202 -0
  320. package/dist/state/healthEntities.js +262 -0
  321. package/dist/state/healthEntityValidation.js +18 -0
  322. package/dist/state/healthRepair.js +69 -0
  323. package/dist/state/installRoot.js +64 -25
  324. package/dist/state/legacyEntityCutoverEvidence.js +65 -0
  325. package/dist/state/legacyIdentity.js +47 -0
  326. package/dist/state/legacySummaryRecord.js +6 -0
  327. package/dist/state/listAccounting.js +54 -0
  328. package/dist/state/listClassification.js +17 -0
  329. package/dist/state/listCursor.js +42 -0
  330. package/dist/state/listRetrieval.js +781 -0
  331. package/dist/state/migrationSourceBinding.js +30 -0
  332. package/dist/state/objectiveExperimentEntities.js +322 -0
  333. package/dist/state/planEntities.js +982 -0
  334. package/dist/state/planIdentity.js +47 -0
  335. package/dist/state/planLineageValidation.js +52 -0
  336. package/dist/state/planReplacementTransaction.js +475 -0
  337. package/dist/state/planRetrieval.js +313 -0
  338. package/dist/state/planTaskRetrieval.js +294 -0
  339. package/dist/state/progressEntities.js +512 -0
  340. package/dist/state/progressGlossaryCaveat.js +168 -0
  341. package/dist/state/progressPublicationOrder.js +19 -0
  342. package/dist/state/projectRoot.js +62 -0
  343. package/dist/state/projectionPolicy.js +190 -0
  344. package/dist/state/retrievalAuthority.js +156 -0
  345. package/dist/state/safeProjectFile.js +155 -0
  346. package/dist/state/startupAnalysis/benchmark.js +432 -0
  347. package/dist/state/startupAnalysis/contract.js +160 -0
  348. package/dist/state/startupAnalysis/helpers.js +286 -0
  349. package/dist/state/startupAnalysis/index.js +6 -0
  350. package/dist/state/startupAnalysis/metrics.js +340 -0
  351. package/dist/state/startupAnalysis/records.js +198 -0
  352. package/dist/state/startupAnalysis/report.js +111 -0
  353. package/dist/state/startupAnalysis/threshold.js +512 -0
  354. package/dist/state/startupAnalysis.js +2 -1953
  355. package/dist/state/startupProjection.js +499 -0
  356. package/dist/state/stateMode.js +85 -0
  357. package/dist/state/stateStorageAuthority.js +47 -0
  358. package/dist/state/summaryEntityRead.js +25 -0
  359. package/dist/state/summaryMigrationProvenance.js +66 -0
  360. package/dist/state/summarySourceRowAuthority.js +36 -0
  361. package/dist/state/todoActivationSafety.js +58 -0
  362. package/dist/state/todoDocsEntities.js +1069 -0
  363. package/dist/state/todoDocsEntityValidation.js +158 -0
  364. package/dist/state/todoMarkdownProjection.js +51 -0
  365. package/dist/state/todoReconciliationActivation.js +140 -0
  366. package/dist/state/todoReconciliationInspection.js +169 -0
  367. package/dist/state/todoReconciliationRepair.js +170 -0
  368. package/dist/state/todoReconciliationTransaction.js +582 -0
  369. package/dist/state/write/assign.js +20 -0
  370. package/dist/state/write/candidateMutation.js +269 -0
  371. package/dist/state/write/errors.js +11 -0
  372. package/dist/state/write/experimentPublication.js +192 -0
  373. package/dist/state/write/explain.js +363 -0
  374. package/dist/state/write/fields.js +61 -0
  375. package/dist/state/write/glossaryPublication.js +263 -0
  376. package/dist/state/write/grammar.js +285 -0
  377. package/dist/state/write/helpers.js +29 -0
  378. package/dist/state/write/index.js +12 -0
  379. package/dist/state/write/input.js +367 -0
  380. package/dist/state/write/lock.js +837 -0
  381. package/dist/state/write/mutation.js +234 -0
  382. package/dist/state/write/operations.js +170 -0
  383. package/dist/state/write/planEvaluation.js +128 -0
  384. package/dist/state/write/planPublication.js +179 -0
  385. package/dist/state/write/runtimeOperations.js +144 -0
  386. package/dist/state/write/serialize.js +1 -0
  387. package/dist/state/write/transaction.js +52 -0
  388. package/dist/state/write/validate.js +7 -0
  389. package/dist/upgrade/appContentRefresh.js +383 -0
  390. package/dist/upgrade/appModel.js +8 -7
  391. package/dist/upgrade/atomicWriter.js +1 -0
  392. package/dist/upgrade/bundleEvidence.js +33 -0
  393. package/dist/upgrade/channels.js +12 -8
  394. package/dist/upgrade/compatibility.js +56 -21
  395. package/dist/upgrade/doctor.js +197 -192
  396. package/dist/upgrade/doctorClassifier.js +187 -0
  397. package/dist/upgrade/installedHooksRetirement.js +196 -0
  398. package/dist/upgrade/legacyAgentCleanup.js +282 -0
  399. package/dist/upgrade/lifecycleUpgrade.js +113 -0
  400. package/dist/upgrade/migrateArtifactsV2ToV3.js +367 -149
  401. package/dist/upgrade/migrationPublication.js +122 -0
  402. package/dist/upgrade/nextMajorDoctor.js +42 -8
  403. package/dist/upgrade/npxPlatformStatus.js +22 -0
  404. package/dist/upgrade/projectIntegration.js +145 -187
  405. package/dist/upgrade/projectIntegrationDecision.js +50 -0
  406. package/dist/upgrade/retiredResourceDiagnostics.js +117 -0
  407. package/dist/upgrade/runtimeMigration.js +273 -363
  408. package/dist/upgrade/upgradeCommands.js +14 -1
  409. package/dist/upgrade/upgradeLock.js +85 -0
  410. package/dist/upgrade/upgradeOrchestrator.js +263 -59
  411. package/dist/upgrade/v3CapabilitySurface.js +14 -0
  412. package/dist/upgrade/versionResolution.js +8 -1
  413. package/dist/validate/activationArtifactEvidence.js +844 -0
  414. package/dist/validate/activationConjunction.js +816 -0
  415. package/dist/validate/activationEvidenceManifest.js +515 -0
  416. package/dist/validate/activationPackageSemantics.js +29 -0
  417. package/dist/validate/appHomeContract.js +5 -11
  418. package/dist/validate/bootstrapAuthority.js +44 -0
  419. package/dist/validate/capability.js +133 -12
  420. package/dist/validate/crossCapability.js +15 -10
  421. package/dist/validate/retainedReferenceAuthority.js +879 -0
  422. package/dist/validate/selfAudit.js +73 -37
  423. package/dist/validate/v1LegacyCruft.js +131 -0
  424. package/dist/validate/vocabularyAuthority.js +303 -0
  425. package/package.json +53 -27
  426. package/bundle/references/adapters/cursor.md +0 -213
  427. package/bundle/references/adapters/opencode.md +0 -530
  428. package/bundle/references/adapters/package-manifest-interface-model.yaml +0 -337
  429. package/bundle/references/adapters/runtime-adapter-characterization.md +0 -79
  430. package/bundle/references/adapters/runtime-adapter-interface-model.yaml +0 -200
  431. package/bundle/references/adapters/runtime-adapter-registry.yaml +0 -548
  432. package/bundle/references/adapters/runtime-feature-parity.md +0 -189
  433. package/bundle/references/analysis/benchmark.md +0 -267
  434. package/bundle/references/analysis/startup-measurement-contract.yaml +0 -424
  435. package/bundle/references/cli/agent-ready-state-contract.yaml +0 -953
  436. package/bundle/references/cli/audience-namespace-cli-migration.yaml +0 -355
  437. package/bundle/references/cli/bundle-skill-vocabulary.yaml +0 -278
  438. package/bundle/references/cli/capability-tool-classification.yaml +0 -53
  439. package/bundle/references/cli/routing-execution-vocabulary.yaml +0 -281
  440. package/bundle/references/meta/documentation-inventory.md +0 -43
  441. package/bundle/references/v1-section-mapping.md +0 -47
  442. package/bundle/skills/agentera/.claude-plugin/plugin.json +0 -27
  443. package/bundle/skills/agentera/agents/dokumentera.toml +0 -6
  444. package/bundle/skills/agentera/agents/hej.toml +0 -6
  445. package/bundle/skills/agentera/agents/inspektera.toml +0 -6
  446. package/bundle/skills/agentera/agents/inspirera.toml +0 -6
  447. package/bundle/skills/agentera/agents/optimera.toml +0 -6
  448. package/bundle/skills/agentera/agents/orkestrera.toml +0 -6
  449. package/bundle/skills/agentera/agents/planera.toml +0 -6
  450. package/bundle/skills/agentera/agents/profilera.toml +0 -6
  451. package/bundle/skills/agentera/agents/realisera.toml +0 -6
  452. package/bundle/skills/agentera/agents/resonera.toml +0 -6
  453. package/bundle/skills/agentera/agents/visionera.toml +0 -6
  454. package/bundle/skills/agentera/agents/visualisera.toml +0 -6
  455. package/bundle/skills/agentera/capabilities/dokumentera/schemas/artifacts.yaml +0 -73
  456. package/bundle/skills/agentera/capabilities/dokumentera/schemas/triggers.yaml +0 -35
  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/schemas/artifacts.yaml +0 -76
  460. package/bundle/skills/agentera/capabilities/inspektera/schemas/triggers.yaml +0 -38
  461. package/bundle/skills/agentera/capabilities/inspirera/schemas/artifacts.yaml +0 -24
  462. package/bundle/skills/agentera/capabilities/inspirera/schemas/triggers.yaml +0 -34
  463. package/bundle/skills/agentera/capabilities/optimera/schemas/triggers.yaml +0 -39
  464. package/bundle/skills/agentera/capabilities/orkestrera/schemas/artifacts.yaml +0 -64
  465. package/bundle/skills/agentera/capabilities/orkestrera/schemas/triggers.yaml +0 -42
  466. package/bundle/skills/agentera/capabilities/orkestrera/schemas/validation.yaml +0 -120
  467. package/bundle/skills/agentera/capabilities/planera/schemas/artifacts.yaml +0 -62
  468. package/bundle/skills/agentera/capabilities/planera/schemas/triggers.yaml +0 -34
  469. package/bundle/skills/agentera/capabilities/planera/schemas/validation.yaml +0 -61
  470. package/bundle/skills/agentera/capabilities/profilera/schemas/artifacts.yaml +0 -18
  471. package/bundle/skills/agentera/capabilities/profilera/schemas/triggers.yaml +0 -45
  472. package/bundle/skills/agentera/capabilities/profilera/schemas/validation.yaml +0 -57
  473. package/bundle/skills/agentera/capabilities/realisera/schemas/artifacts.yaml +0 -80
  474. package/bundle/skills/agentera/capabilities/realisera/schemas/triggers.yaml +0 -39
  475. package/bundle/skills/agentera/capabilities/realisera/schemas/validation.yaml +0 -110
  476. package/bundle/skills/agentera/capabilities/resonera/schemas/artifacts.yaml +0 -47
  477. package/bundle/skills/agentera/capabilities/resonera/schemas/triggers.yaml +0 -46
  478. package/bundle/skills/agentera/capabilities/resonera/schemas/validation.yaml +0 -77
  479. package/bundle/skills/agentera/capabilities/visionera/schemas/triggers.yaml +0 -41
  480. package/bundle/skills/agentera/capabilities/visualisera/schemas/triggers.yaml +0 -33
  481. package/bundle/skills/agentera/references/contract.md +0 -1039
  482. package/bundle/skills/hej/.claude-plugin/plugin.json +0 -6
  483. package/bundle/skills/hej/SKILL.md +0 -69
  484. package/bundle/skills/hej/agents/hej.toml +0 -11
  485. package/bundle/skills/hej/agents/openai.yaml +0 -8
  486. package/dist/analytics/extractCorpus.js.map +0 -1
  487. package/dist/analytics/usageStats.js.map +0 -1
  488. package/dist/bin/agentera.js.map +0 -1
  489. package/dist/capabilities/dokumentera/instructions.js +0 -6
  490. package/dist/capabilities/dokumentera/instructions.js.map +0 -1
  491. package/dist/capabilities/hej/instructions.js +0 -6
  492. package/dist/capabilities/hej/instructions.js.map +0 -1
  493. package/dist/capabilities/index.js.map +0 -1
  494. package/dist/capabilities/inspektera/instructions.js +0 -6
  495. package/dist/capabilities/inspektera/instructions.js.map +0 -1
  496. package/dist/capabilities/inspirera/instructions.js +0 -6
  497. package/dist/capabilities/inspirera/instructions.js.map +0 -1
  498. package/dist/capabilities/optimera/instructions.js +0 -6
  499. package/dist/capabilities/optimera/instructions.js.map +0 -1
  500. package/dist/capabilities/orkestrera/instructions.js +0 -6
  501. package/dist/capabilities/orkestrera/instructions.js.map +0 -1
  502. package/dist/capabilities/planera/instructions.js +0 -6
  503. package/dist/capabilities/planera/instructions.js.map +0 -1
  504. package/dist/capabilities/profilera/instructions.js +0 -6
  505. package/dist/capabilities/profilera/instructions.js.map +0 -1
  506. package/dist/capabilities/realisera/instructions.js +0 -6
  507. package/dist/capabilities/realisera/instructions.js.map +0 -1
  508. package/dist/capabilities/resonera/instructions.js +0 -6
  509. package/dist/capabilities/resonera/instructions.js.map +0 -1
  510. package/dist/capabilities/visionera/instructions.js +0 -6
  511. package/dist/capabilities/visionera/instructions.js.map +0 -1
  512. package/dist/capabilities/visualisera/instructions.js +0 -6
  513. package/dist/capabilities/visualisera/instructions.js.map +0 -1
  514. package/dist/cli/appContext.js.map +0 -1
  515. package/dist/cli/argvalidate.js.map +0 -1
  516. package/dist/cli/capabilityContext.js.map +0 -1
  517. package/dist/cli/commands/capability.js.map +0 -1
  518. package/dist/cli/commands/compact.js.map +0 -1
  519. package/dist/cli/commands/doctor.js.map +0 -1
  520. package/dist/cli/commands/lint.js.map +0 -1
  521. package/dist/cli/commands/prime.js.map +0 -1
  522. package/dist/cli/commands/query.js.map +0 -1
  523. package/dist/cli/commands/report.js.map +0 -1
  524. package/dist/cli/commands/schema.js.map +0 -1
  525. package/dist/cli/commands/state.js +0 -1023
  526. package/dist/cli/commands/state.js.map +0 -1
  527. package/dist/cli/commands/upgrade.js.map +0 -1
  528. package/dist/cli/commands/validate.js.map +0 -1
  529. package/dist/cli/commands/verify.js.map +0 -1
  530. package/dist/cli/dispatch.js.map +0 -1
  531. package/dist/cli/errors.js.map +0 -1
  532. package/dist/cli/help.js.map +0 -1
  533. package/dist/cli/orientation.js.map +0 -1
  534. package/dist/cli/prime-blob.js.map +0 -1
  535. package/dist/cli/stateQuery.js.map +0 -1
  536. package/dist/cli/structured.js.map +0 -1
  537. package/dist/cli/todoMarkdown.js.map +0 -1
  538. package/dist/core/difflib.js.map +0 -1
  539. package/dist/core/paths.js.map +0 -1
  540. package/dist/core/pyjson.js.map +0 -1
  541. package/dist/core/sourceRoot.js.map +0 -1
  542. package/dist/core/toml.js.map +0 -1
  543. package/dist/core/yaml.js.map +0 -1
  544. package/dist/eval/evalSkills.js.map +0 -1
  545. package/dist/eval/semanticEval.js.map +0 -1
  546. package/dist/eval/semanticFixtures.js.map +0 -1
  547. package/dist/hooks/common.js.map +0 -1
  548. package/dist/hooks/compaction.js +0 -935
  549. package/dist/hooks/compaction.js.map +0 -1
  550. package/dist/hooks/cursorPreToolUse.js +0 -19
  551. package/dist/hooks/cursorPreToolUse.js.map +0 -1
  552. package/dist/hooks/cursorSessionStart.js +0 -71
  553. package/dist/hooks/cursorSessionStart.js.map +0 -1
  554. package/dist/hooks/sessionStart.js +0 -209
  555. package/dist/hooks/sessionStart.js.map +0 -1
  556. package/dist/hooks/sessionStop.js +0 -212
  557. package/dist/hooks/sessionStop.js.map +0 -1
  558. package/dist/hooks/validateArtifact.js +0 -935
  559. package/dist/hooks/validateArtifact.js.map +0 -1
  560. package/dist/registries/artifactRegistry.js.map +0 -1
  561. package/dist/registries/capabilityContract.js.map +0 -1
  562. package/dist/registries/evaluatorHandoffContract.js.map +0 -1
  563. package/dist/registries/packageRegistry.js.map +0 -1
  564. package/dist/registries/runtimeAdapterRegistry.js +0 -315
  565. package/dist/registries/runtimeAdapterRegistry.js.map +0 -1
  566. package/dist/setup/codex.js +0 -1197
  567. package/dist/setup/codex.js.map +0 -1
  568. package/dist/setup/copilot.js +0 -227
  569. package/dist/setup/copilot.js.map +0 -1
  570. package/dist/setup/cursor.js +0 -127
  571. package/dist/setup/cursor.js.map +0 -1
  572. package/dist/setup/doctor.js +0 -1297
  573. package/dist/setup/doctor.js.map +0 -1
  574. package/dist/setup/smokeChecks.js.map +0 -1
  575. package/dist/state/installRoot.js.map +0 -1
  576. package/dist/state/startupAnalysis.js.map +0 -1
  577. package/dist/upgrade/appModel.js.map +0 -1
  578. package/dist/upgrade/channels.js.map +0 -1
  579. package/dist/upgrade/compatibility.js.map +0 -1
  580. package/dist/upgrade/doctor.js.map +0 -1
  581. package/dist/upgrade/migrateArtifactsV1ToV2.js +0 -570
  582. package/dist/upgrade/migrateArtifactsV1ToV2.js.map +0 -1
  583. package/dist/upgrade/migrateArtifactsV2ToV3.js.map +0 -1
  584. package/dist/upgrade/nextMajorDoctor.js.map +0 -1
  585. package/dist/upgrade/projectIntegration.js.map +0 -1
  586. package/dist/upgrade/runtimeMigration.js.map +0 -1
  587. package/dist/upgrade/upgradeCommands.js.map +0 -1
  588. package/dist/upgrade/upgradeOrchestrator.js.map +0 -1
  589. package/dist/upgrade/versionResolution.js.map +0 -1
  590. package/dist/validate/appHomeContract.js.map +0 -1
  591. package/dist/validate/capability.js.map +0 -1
  592. package/dist/validate/crossCapability.js.map +0 -1
  593. package/dist/validate/lifecycleAdapters.js +0 -772
  594. package/dist/validate/lifecycleAdapters.js.map +0 -1
  595. package/dist/validate/selfAudit.js.map +0 -1
  596. /package/bundle/skills/agentera/capabilities/{dokumentera → document}/schemas/exit.yaml +0 -0
  597. /package/bundle/skills/agentera/capabilities/{inspirera → research}/schemas/exit.yaml +0 -0
  598. /package/bundle/skills/agentera/capabilities/{hej → status}/schemas/exit.yaml +0 -0
@@ -2,27 +2,7 @@
2
2
  * Self-audit checks for artifact writing conventions. Faithful TS port of
3
3
  * `scripts/self_audit.py`. Advisory only — report but do not block writes.
4
4
  */
5
- const FULL_FILE_BUDGETS = {
6
- "PROGRESS.md": 3000,
7
- "EXPERIMENTS.md": 2500,
8
- "HEALTH.md": 2000,
9
- "DECISIONS.md": 5000,
10
- "TODO.md": 5000,
11
- "CHANGELOG.md": 5000,
12
- "PLAN.md": 2500,
13
- "VISION.md": 1500,
14
- "DESIGN.md": 2000,
15
- "DOCS.md": 2000,
16
- };
17
- const PER_ENTRY_BUDGETS = {
18
- "PROGRESS.md": 500,
19
- "EXPERIMENTS.md": 300,
20
- "HEALTH.md": 150,
21
- "DECISIONS.md": 200,
22
- "TODO.md": 100,
23
- "CHANGELOG.md": 300,
24
- "PLAN.md": 100,
25
- };
5
+ import { inspectArtifactVerbosityBudget, } from "../registries/verbosityBudgetContract.js";
26
6
  const FILE_PATH_RE = /\b(?:[A-Za-z0-9_.-]+\/)+[A-Za-z0-9_.-]+\.[A-Za-z]{1,10}\b/;
27
7
  const REPO_PATH_RE = /\b(?:internal|src|lib|pkg|cmd|app|test|tests|doc|docs|script|scripts|skill|skills|hook|hooks|fixture|fixtures|reference|references)(?:\/[A-Za-z0-9_.-]+)+\b/;
28
8
  const LINE_NUMBER_RE = /:\d{2,}\b/;
@@ -45,33 +25,56 @@ const BANNED_PATTERNS = [
45
25
  ["filler introductions", /After\s+careful\s+consideration\b/i],
46
26
  ["summary preambles", /\bIn\s+summary\b/i],
47
27
  ["summary preambles", /\bTo\s+recap\b/i],
48
- ["summary preambles", /\bOverall\b/i],
28
+ ["summary preambles", /\bOverall\b(?!\s+acceptance\b)/i],
49
29
  ["excessive justification", /I\s+chose\s+this\s+approach\s+because\b/i],
50
30
  ];
51
31
  /** Count non-whitespace tokens, matching Python's str.split(). */
52
32
  function wordCount(text) {
53
33
  return (text.match(/\S+/g) ?? []).length;
54
34
  }
55
- export function checkVerbosity(text, artifact, budgets = null) {
56
- const count = wordCount(text);
57
- const table = budgets ?? PER_ENTRY_BUDGETS;
58
- let perEntryBudget = table[artifact];
59
- if (perEntryBudget === undefined) {
60
- const fullBudget = FULL_FILE_BUDGETS[artifact];
61
- perEntryBudget = fullBudget !== undefined ? Math.floor(fullBudget / 5) : 500;
35
+ export function checkVerbosity(text, artifact, contractPath) {
36
+ return checkAuthoritativeWordBudget(text, artifact, false, contractPath);
37
+ }
38
+ export function checkFullFileVerbosity(text, artifact, contractPath) {
39
+ return checkAuthoritativeWordBudget(text, artifact, true, contractPath);
40
+ }
41
+ function authorityError(artifact, detail) {
42
+ return [
43
+ false,
44
+ `verbosity authority error for ${JSON.stringify(artifact)}: ${detail}; ` +
45
+ "repair the declared owner in references/artifacts/verbosity-budget-authority.yaml",
46
+ ];
47
+ }
48
+ function applicableDimensions(dimensions, fullArtifact) {
49
+ return dimensions.filter((dimension) => fullArtifact ? dimension.scope === "full_file" : dimension.scope !== "full_file");
50
+ }
51
+ function checkAuthoritativeWordBudget(text, artifact, fullArtifact, contractPath) {
52
+ let dimensions;
53
+ try {
54
+ dimensions = inspectArtifactVerbosityBudget(artifact, contractPath).dimensions;
55
+ }
56
+ catch (error) {
57
+ return authorityError(artifact, error.message);
58
+ }
59
+ const invalid = dimensions.filter((dimension) => dimension.classification === "invalid_declaration");
60
+ if (invalid.length > 0) {
61
+ return authorityError(artifact, invalid.map((dimension) => `${dimension.scope}: ${dimension.error ?? "invalid declaration"}`).join("; "));
62
+ }
63
+ const applicable = applicableDimensions(dimensions, fullArtifact);
64
+ if (applicable.length > 1) {
65
+ const kind = fullArtifact ? "full-file" : "per-entry";
66
+ return authorityError(artifact, `multiple ${kind} declarations apply: ${applicable.map((d) => d.scope).join(", ")}`);
62
67
  }
63
- if (count <= perEntryBudget) {
68
+ const dimension = applicable[0];
69
+ if (!dimension || dimension.classification !== "numeric_limit") {
64
70
  return [true, ""];
65
71
  }
66
- return [false, `verbosity mismatch: ${count} words exceeds ${perEntryBudget} budget`];
67
- }
68
- export function checkFullFileVerbosity(text, artifact) {
69
72
  const count = wordCount(text);
70
- const budget = FULL_FILE_BUDGETS[artifact] ?? 2500;
71
- if (count <= budget) {
73
+ if (count <= dimension.limit) {
72
74
  return [true, ""];
73
75
  }
74
- return [false, `verbosity mismatch: ${count} words exceeds ${budget} full-file budget`];
76
+ const qualifier = fullArtifact ? " full-file" : "";
77
+ return [false, `verbosity mismatch: ${count} words exceeds ${dimension.limit}${qualifier} budget`];
75
78
  }
76
79
  export function checkAbstraction(text) {
77
80
  for (const re of [
@@ -104,4 +107,37 @@ export function checkFiller(text) {
104
107
  }
105
108
  return [false, "filler: " + matched.join(", ")];
106
109
  }
107
- //# sourceMappingURL=selfAudit.js.map
110
+ /** Smoke-validate that self-audit conventions and budgets are wired. */
111
+ export function validateSelfAuditConventions() {
112
+ const errors = [];
113
+ const sample = "concrete anchor `scripts/agentera` at line 42 with 12 words total here";
114
+ const [verbosityOk] = checkVerbosity(sample, "progress");
115
+ if (!verbosityOk) {
116
+ errors.push("self-audit: verbosity check failed on smoke sample");
117
+ }
118
+ const [abstractionOk] = checkAbstraction(sample);
119
+ if (!abstractionOk) {
120
+ errors.push("self-audit: abstraction check failed to detect concrete anchor in smoke sample");
121
+ }
122
+ const [fillerOk] = checkFiller("Shipped the plan task with a concrete file path.");
123
+ if (!fillerOk) {
124
+ errors.push("self-audit: filler check false-positive on clean smoke sample");
125
+ }
126
+ const [fillerFailOk, fillerDetail] = checkFiller("In summary, the work is done.");
127
+ if (fillerFailOk || !fillerDetail.includes("filler")) {
128
+ errors.push("self-audit: filler check must flag banned summary preambles");
129
+ }
130
+ return errors;
131
+ }
132
+ export function selfAuditMain(opts = {}) {
133
+ const out = opts.out ?? ((line) => process.stdout.write(line + "\n"));
134
+ const errors = validateSelfAuditConventions();
135
+ if (errors.length > 0) {
136
+ out("self-audit validation failed:");
137
+ for (const error of errors)
138
+ out(`- ${error}`);
139
+ return 1;
140
+ }
141
+ out("self-audit conventions ok");
142
+ return 0;
143
+ }
@@ -0,0 +1,131 @@
1
+ import crypto from "node:crypto";
2
+ import fs from "node:fs";
3
+ import path from "node:path";
4
+ import YAML from "yaml";
5
+ import { resolvePath } from "../core/paths.js";
6
+ import { confirmedVariantGuardContract } from "../registries/glossaryEntryContract.js";
7
+ import { containsGlossaryTerm } from "../registries/glossaryTermOccurrence.js";
8
+ import { loadProjectGlossaryDocument, } from "../state/write/glossaryPublication.js";
9
+ const EXCLUDED_DIRECTORIES = new Set(confirmedVariantGuardContract().excludedDirectories);
10
+ // Lowercased extensions classify ASCII path suffixes; they are not term identities.
11
+ const TEXT_EXTENSIONS = new Set([
12
+ ".cjs", ".css", ".go", ".html", ".js", ".json", ".jsonc", ".jsx",
13
+ ".md", ".mjs", ".py", ".rs", ".sh", ".toml", ".ts", ".tsx", ".txt",
14
+ ".xml", ".yaml", ".yml",
15
+ ]);
16
+ const RERUN = "pnpm -C packages/cli exec vitest run test/cli/v1LegacyCruft.test.ts";
17
+ function fixedLegacyViolations(root) {
18
+ const violations = [];
19
+ if (fs.existsSync(path.join(root, "skills/hej")))
20
+ violations.push("skills/hej/ bridge directory present");
21
+ if (fs.existsSync(path.join(root, "references/v1-section-mapping.md"))) {
22
+ violations.push("references/v1-section-mapping.md present");
23
+ }
24
+ if (fs.existsSync(path.join(root, ".opencode/commands/hej.md"))) {
25
+ violations.push(".opencode/commands/hej.md legacy bridge command present");
26
+ }
27
+ const marketplacePath = path.join(root, ".claude-plugin/marketplace.json");
28
+ if (fs.existsSync(marketplacePath)) {
29
+ const marketplace = JSON.parse(fs.readFileSync(marketplacePath, "utf8"));
30
+ const names = (marketplace.plugins ?? []).map((item) => item.name);
31
+ if (names.includes("status"))
32
+ violations.push(".claude-plugin/marketplace.json still lists hej plugin");
33
+ }
34
+ const codexPath = path.join(root, ".codex-plugin/plugin.json");
35
+ if (fs.existsSync(codexPath)) {
36
+ const codex = JSON.parse(fs.readFileSync(codexPath, "utf8"));
37
+ const names = (codex.skillMetadata ?? []).map((item) => item.name);
38
+ if (names.includes("status"))
39
+ violations.push(".codex-plugin/plugin.json still lists hej skillMetadata");
40
+ }
41
+ const packageRegistryPath = path.join(root, "references/adapters/package-registry.yaml");
42
+ if (fs.existsSync(packageRegistryPath)) {
43
+ const registry = YAML.parse(fs.readFileSync(packageRegistryPath, "utf8"));
44
+ const versionFiles = registry.records?.[0]?.docs_targets?.version_files ?? [];
45
+ if (versionFiles.includes("skills/hej/SKILL.md")) {
46
+ violations.push("package-registry docs_targets still lists skills/hej/SKILL.md");
47
+ }
48
+ }
49
+ return violations;
50
+ }
51
+ function confirmedVariants(document) {
52
+ return document.approvals.flatMap((approval, index) => {
53
+ const entry = document.entries[index];
54
+ const canonical = String(entry.term);
55
+ // Project-glossary validation already rejects every canonical/variant
56
+ // identity collision. Preserve all validated variants for guard scanning.
57
+ return approval.proposal.variants
58
+ .map(({ term, evidence }) => ({
59
+ variant: term,
60
+ canonical,
61
+ approvalDigest: approval.proposal_digest,
62
+ evidence,
63
+ }));
64
+ });
65
+ }
66
+ function projectTextFiles(root) {
67
+ const files = [];
68
+ const visit = (directory) => {
69
+ for (const entry of fs.readdirSync(directory, { withFileTypes: true }).sort((a, b) => a.name.localeCompare(b.name))) {
70
+ if (entry.isSymbolicLink())
71
+ continue;
72
+ const target = path.join(directory, entry.name);
73
+ if (entry.isDirectory()) {
74
+ if (!EXCLUDED_DIRECTORIES.has(entry.name))
75
+ visit(target);
76
+ }
77
+ else if (entry.isFile() && TEXT_EXTENSIONS.has(path.extname(entry.name).toLocaleLowerCase())) {
78
+ files.push(target);
79
+ }
80
+ }
81
+ };
82
+ visit(root);
83
+ return files;
84
+ }
85
+ function lineDigest(line) {
86
+ return crypto.createHash("sha256").update(line).digest("hex");
87
+ }
88
+ function isApprovedEvidence(variant, sourcePath, line, text) {
89
+ const digest = lineDigest(text);
90
+ return variant.evidence.some((item) => item.source_path === sourcePath && item.line === line && item.source_record_sha256 === digest);
91
+ }
92
+ function variantViolations(root, document, glossaryPath) {
93
+ const violations = [];
94
+ const seen = new Set();
95
+ for (const file of projectTextFiles(root)) {
96
+ if (path.resolve(file) === path.resolve(glossaryPath))
97
+ continue;
98
+ const sourcePath = path.relative(root, file).split(path.sep).join(path.posix.sep);
99
+ const lines = fs.readFileSync(file, "utf8").split(/\r?\n/);
100
+ for (const variant of confirmedVariants(document)) {
101
+ for (const [index, text] of lines.entries()) {
102
+ const line = index + 1;
103
+ if (!containsGlossaryTerm(text, variant.variant) || isApprovedEvidence(variant, sourcePath, line, text))
104
+ continue;
105
+ const identity = `${variant.approvalDigest}\0${variant.variant}\0${sourcePath}\0${line}`;
106
+ if (seen.has(identity))
107
+ continue;
108
+ seen.add(identity);
109
+ const evidence = variant.evidence.map((item) => `${item.source_path}:${item.line}`).join(", ");
110
+ violations.push(`confirmed variant '${variant.variant}' reintroduced at ${sourcePath}:${line}; canonical term '${variant.canonical}' ` +
111
+ `from approval ${variant.approvalDigest} (confirmed variant evidence: ${evidence}). ` +
112
+ `Correction: replace '${variant.variant}' with '${variant.canonical}' at ${sourcePath}:${line}; rerun: ${RERUN}`);
113
+ }
114
+ }
115
+ }
116
+ return violations.sort();
117
+ }
118
+ export function scanPost30CruftViolations(root) {
119
+ const resolved = resolvePath(root);
120
+ const violations = fixedLegacyViolations(resolved);
121
+ try {
122
+ const loaded = loadProjectGlossaryDocument(resolved);
123
+ if (loaded)
124
+ violations.push(...variantViolations(resolved, loaded.document, loaded.path));
125
+ }
126
+ catch (error) {
127
+ violations.push(`project glossary is malformed: ${error.message}. ` +
128
+ `Correction: restore a valid confirmed document or rerun agentera state glossary publish --input REQUEST.yaml --format json; rerun: ${RERUN}`);
129
+ }
130
+ return violations.sort();
131
+ }
@@ -0,0 +1,303 @@
1
+ import fs from "node:fs";
2
+ import path from "node:path";
3
+ import { resolvePath } from "../core/paths.js";
4
+ import { resolveSourceRoot } from "../core/sourceRoot.js";
5
+ import { loadYamlMappingFile } from "../core/yaml.js";
6
+ import { APP_MANUAL_REVIEW_NEEDED, APP_MIGRATION_NEEDED, APP_OUTDATED, APP_REPAIR_NEEDED, APP_UP_TO_DATE, } from "../upgrade/doctor.js";
7
+ import { validateGlossaryEntryContract } from "../registries/glossaryEntryContract.js";
8
+ /**
9
+ * Validate vocabulary authority YAML contracts (Decision 54 lifecycle status
10
+ * vocabulary, Decision 57 first_invocation_read, update channels, index order).
11
+ * Emits the same delegated validate envelope shape as lifecycle-adapters.
12
+ */
13
+ const EXPECTED_STATUSES = [
14
+ "up_to_date",
15
+ "outdated",
16
+ "repair_needed",
17
+ "migration_needed",
18
+ "manual_review_needed",
19
+ "ready_to_apply",
20
+ "applied",
21
+ "no_changes_needed",
22
+ ];
23
+ const EXPECTED_VERBS = ["install", "repair", "update", "migrate", "upgrade", "refresh"];
24
+ const EXPECTED_LIFECYCLE_CONSUMERS = ["doctor", "status", "upgrade", "docs", "tests"];
25
+ const EXPECTED_CHANNELS = ["stable", "development"];
26
+ const EXPECTED_CHANNEL_CONSUMERS = ["upgrade", "doctor", "prime", "docs", "tests"];
27
+ function rootDefault() {
28
+ return resolveSourceRoot();
29
+ }
30
+ function authorityPath(root, relative) {
31
+ return path.join(root, relative);
32
+ }
33
+ function canonicalStatuses(authority) {
34
+ return new Set(Object.keys(authority.canonical_statuses));
35
+ }
36
+ function rejectedLifecycleStatusValues(authority) {
37
+ const statuses = authority.canonical_statuses;
38
+ const verbs = authority.operation_verbs;
39
+ const deprecated = Object.values(statuses).flatMap((entry) => {
40
+ const aliases = entry.deprecated_aliases;
41
+ return Array.isArray(aliases) ? aliases : [];
42
+ });
43
+ const nonLifecycleVerbs = Object.entries(verbs)
44
+ .filter(([, entry]) => entry.lifecycle_allowed === false)
45
+ .map(([name]) => name);
46
+ return new Set([...deprecated, ...nonLifecycleVerbs].map(String));
47
+ }
48
+ function validateLifecycleAuthority(root) {
49
+ const errors = [];
50
+ const p = authorityPath(root, "references/cli/app-lifecycle-vocabulary.yaml");
51
+ let authority;
52
+ try {
53
+ authority = loadYamlMappingFile(p); // cast: YAML parse IO boundary
54
+ }
55
+ catch (exc) {
56
+ return [`app-lifecycle-vocabulary.yaml: ${exc.message}`];
57
+ }
58
+ if (!Array.isArray(authority.canonical_status_order) || authority.canonical_status_order.length === 0) {
59
+ errors.push("app-lifecycle-vocabulary.yaml: canonical_status_order is required");
60
+ }
61
+ else if (JSON.stringify(authority.canonical_status_order) !== JSON.stringify([...EXPECTED_STATUSES])) {
62
+ errors.push("app-lifecycle-vocabulary.yaml: canonical_status_order drifted from Decision 54 pin");
63
+ }
64
+ const statusKeys = Object.keys(authority.canonical_statuses);
65
+ if (JSON.stringify(statusKeys) !== JSON.stringify([...EXPECTED_STATUSES])) {
66
+ errors.push("app-lifecycle-vocabulary.yaml: canonical_statuses keys drifted from Decision 54 pin");
67
+ }
68
+ for (const status of EXPECTED_STATUSES) {
69
+ const entry = authority.canonical_statuses[status];
70
+ if (!entry || !String(entry.concept ?? "").trim() || !String(entry.definition ?? "").trim()) {
71
+ errors.push(`app-lifecycle-vocabulary.yaml: canonical status '${status}' is incomplete`);
72
+ }
73
+ }
74
+ const aliasToStatus = new Map();
75
+ for (const [status, raw] of Object.entries(authority.canonical_statuses)) {
76
+ for (const alias of raw.deprecated_aliases) {
77
+ aliasToStatus.set(alias, status);
78
+ }
79
+ }
80
+ const expectedAliases = {
81
+ fresh: "up_to_date",
82
+ stale: "outdated",
83
+ refresh_required: "repair_needed",
84
+ fixed: "applied",
85
+ noop: "no_changes_needed",
86
+ };
87
+ for (const [alias, status] of Object.entries(expectedAliases)) {
88
+ if (aliasToStatus.get(alias) !== status) {
89
+ errors.push(`app-lifecycle-vocabulary.yaml: deprecated alias '${alias}' must map to '${status}'`);
90
+ }
91
+ }
92
+ const doctorAllowed = new Set(authority.consumers.doctor.may_emit_statuses);
93
+ const observed = [
94
+ APP_UP_TO_DATE,
95
+ APP_OUTDATED,
96
+ APP_REPAIR_NEEDED,
97
+ APP_MIGRATION_NEEDED,
98
+ APP_MANUAL_REVIEW_NEEDED,
99
+ ];
100
+ for (const status of observed) {
101
+ if (!canonicalStatuses(authority).has(status)) {
102
+ errors.push(`doctor constant '${status}' is not a canonical lifecycle status`);
103
+ }
104
+ else if (!doctorAllowed.has(status)) {
105
+ errors.push(`doctor consumer may not emit canonical status '${status}'`);
106
+ }
107
+ else if (rejectedLifecycleStatusValues(authority).has(status)) {
108
+ errors.push(`doctor constant '${status}' is a rejected lifecycle alias or verb`);
109
+ }
110
+ }
111
+ if (!Array.isArray(authority.consumer_order) || authority.consumer_order.length === 0) {
112
+ errors.push("app-lifecycle-vocabulary.yaml: consumer_order is required");
113
+ }
114
+ else if (JSON.stringify(authority.consumer_order) !== JSON.stringify([...EXPECTED_LIFECYCLE_CONSUMERS])) {
115
+ errors.push("app-lifecycle-vocabulary.yaml: consumer_order drifted from Decision 54 pin");
116
+ }
117
+ const allowedStatuses = new Set(EXPECTED_STATUSES);
118
+ const allowedVerbs = new Set(EXPECTED_VERBS);
119
+ for (const consumer of EXPECTED_LIFECYCLE_CONSUMERS) {
120
+ const entry = authority.consumers[consumer];
121
+ if (!entry) {
122
+ errors.push(`app-lifecycle-vocabulary.yaml: missing consumer '${consumer}'`);
123
+ continue;
124
+ }
125
+ if (entry.may_define_new_statuses !== false) {
126
+ errors.push(`app-lifecycle-vocabulary.yaml: consumer '${consumer}' must not define new statuses`);
127
+ }
128
+ for (const status of entry.may_emit_statuses ?? []) {
129
+ if (!allowedStatuses.has(status)) {
130
+ errors.push(`app-lifecycle-vocabulary.yaml: consumer '${consumer}' emits unknown status '${status}'`);
131
+ }
132
+ }
133
+ for (const verb of entry.may_use_verbs ?? []) {
134
+ if (!allowedVerbs.has(verb)) {
135
+ errors.push(`app-lifecycle-vocabulary.yaml: consumer '${consumer}' uses unknown verb '${verb}'`);
136
+ }
137
+ }
138
+ }
139
+ const delegation = authority.docs_delegation;
140
+ if (delegation?.document !== "references/cli/vocabulary.md" ||
141
+ delegation?.required_anchor !== "App lifecycle status vocabulary" ||
142
+ delegation?.authority_path !== "references/cli/app-lifecycle-vocabulary.yaml") {
143
+ errors.push("app-lifecycle-vocabulary.yaml: docs_delegation contract drifted");
144
+ }
145
+ return errors;
146
+ }
147
+ function validateUpdateChannelsAuthority(root) {
148
+ const errors = [];
149
+ const p = authorityPath(root, "references/cli/update-channels.yaml");
150
+ let authority;
151
+ try {
152
+ authority = loadYamlMappingFile(p); // cast: YAML parse IO boundary
153
+ }
154
+ catch (exc) {
155
+ return [`update-channels.yaml: ${exc.message}`];
156
+ }
157
+ if (authority.default_channel !== "stable") {
158
+ errors.push("update-channels.yaml: default_channel must be stable");
159
+ }
160
+ if (JSON.stringify(authority.channel_order) !== JSON.stringify([...EXPECTED_CHANNELS])) {
161
+ errors.push("update-channels.yaml: channel_order drifted");
162
+ }
163
+ const stable = authority.channels.stable;
164
+ const development = authority.channels.development;
165
+ if (!stable || !development) {
166
+ errors.push("update-channels.yaml: stable and development channels are required");
167
+ }
168
+ else {
169
+ const stableNpm = stable.resolution?.npm;
170
+ const devNpm = development.resolution?.npm;
171
+ if (stableNpm?.dist_tag !== "latest" || devNpm?.dist_tag !== "next") {
172
+ errors.push("update-channels.yaml: npm dist_tag pins drifted");
173
+ }
174
+ if (!String(stableNpm?.update_command ?? "").includes("@latest")) {
175
+ errors.push("update-channels.yaml: stable npm update_command must reference @latest");
176
+ }
177
+ if (!String(devNpm?.update_command ?? "").includes("@next")) {
178
+ errors.push("update-channels.yaml: development npm update_command must reference @next");
179
+ }
180
+ if (development.resolution?.git && development.resolution.git) {
181
+ const devGit = development.resolution.git;
182
+ if (devGit.supported !== false) {
183
+ errors.push("update-channels.yaml: development git resolution must be unsupported");
184
+ }
185
+ }
186
+ }
187
+ if (!Array.isArray(authority.consumer_order)) {
188
+ errors.push("update-channels.yaml: consumer_order is required");
189
+ }
190
+ else if (JSON.stringify(authority.consumer_order) !== JSON.stringify([...EXPECTED_CHANNEL_CONSUMERS])) {
191
+ errors.push("update-channels.yaml: consumer_order drifted");
192
+ }
193
+ const delegation = authority.docs_delegation;
194
+ if (delegation?.document !== "references/cli/vocabulary.md" ||
195
+ delegation?.required_anchor !== "Update channels" ||
196
+ delegation?.authority_path !== "references/cli/update-channels.yaml") {
197
+ errors.push("update-channels.yaml: docs_delegation contract drifted");
198
+ }
199
+ return errors;
200
+ }
201
+ function validateInstructionContract(root) {
202
+ const errors = [];
203
+ const p = authorityPath(root, "references/cli/capability-instruction-contract.yaml");
204
+ let authority;
205
+ try {
206
+ authority = loadYamlMappingFile(p); // cast: YAML parse IO boundary
207
+ }
208
+ catch (exc) {
209
+ return [`capability-instruction-contract.yaml: ${exc.message}`];
210
+ }
211
+ const firstRead = authority.first_invocation_read;
212
+ if (!firstRead) {
213
+ errors.push("capability-instruction-contract.yaml: first_invocation_read block is required");
214
+ return errors;
215
+ }
216
+ const allowed = firstRead.allowed_values;
217
+ if (!allowed || typeof allowed.prime_context !== "object") {
218
+ errors.push("capability-instruction-contract.yaml: first_invocation_read.allowed_values.prime_context is required");
219
+ }
220
+ else {
221
+ const meaning = String(allowed.prime_context.meaning ?? "");
222
+ if (!meaning.includes("npx -y agentera@next prime --context")) {
223
+ errors.push("capability-instruction-contract.yaml: prime_context obligation must reference npx -y agentera@next prime --context");
224
+ }
225
+ }
226
+ if (firstRead.default_rule !== "prime_context") {
227
+ errors.push("capability-instruction-contract.yaml: first_invocation_read.default_rule must be prime_context");
228
+ }
229
+ const cliMeta = authority.current_state?.cli_metadata;
230
+ if (cliMeta?.field !== "first_invocation_read") {
231
+ errors.push("capability-instruction-contract.yaml: cli_metadata.field must be first_invocation_read");
232
+ }
233
+ const delegation = authority.docs_delegation;
234
+ if (delegation?.document !== "references/cli/vocabulary.md" ||
235
+ delegation?.required_anchor !== "Capability instruction contract" ||
236
+ delegation?.authority_path !== "references/cli/capability-instruction-contract.yaml") {
237
+ errors.push("capability-instruction-contract.yaml: docs_delegation contract drifted");
238
+ }
239
+ return errors;
240
+ }
241
+ function validateVocabularyIndex(root) {
242
+ const errors = [];
243
+ const p = authorityPath(root, "references/cli/vocabulary-index.yaml");
244
+ let index;
245
+ try {
246
+ index = loadYamlMappingFile(p); // cast: YAML parse IO boundary
247
+ }
248
+ catch (exc) {
249
+ return [`vocabulary-index.yaml: ${exc.message}`];
250
+ }
251
+ const order = index.authority_order;
252
+ if (!Array.isArray(order)) {
253
+ return ["vocabulary-index.yaml: authority_order is required"];
254
+ }
255
+ const lifecycleIdx = order.indexOf("references/cli/app-lifecycle-vocabulary.yaml");
256
+ const channelsIdx = order.indexOf("references/cli/update-channels.yaml");
257
+ if (lifecycleIdx < 0 || channelsIdx < 0) {
258
+ errors.push("vocabulary-index.yaml: authority_order missing required vocabulary authorities");
259
+ }
260
+ else if (!(lifecycleIdx < channelsIdx)) {
261
+ errors.push("vocabulary-index.yaml: authority_order must place lifecycle before channels");
262
+ }
263
+ const vocabularyMd = authorityPath(root, "references/cli/vocabulary.md");
264
+ if (!fs.existsSync(vocabularyMd)) {
265
+ errors.push("references/cli/vocabulary.md: missing vocabulary prose delegation surface");
266
+ return errors;
267
+ }
268
+ const vocabulary = fs.readFileSync(vocabularyMd, "utf8");
269
+ const lifecycleSection = vocabulary.split("### App lifecycle status vocabulary")[1]?.split("### Update channels", 1)[0] ?? "";
270
+ if (!lifecycleSection.includes("references/cli/app-lifecycle-vocabulary.yaml") ||
271
+ !lifecycleSection.includes("machine-readable authority")) {
272
+ errors.push("references/cli/vocabulary.md: app lifecycle section must delegate to YAML authority");
273
+ }
274
+ const channelsSection = vocabulary.split("### Update channels")[1]?.split("## Evaluation and evidence grammar", 1)[0] ?? "";
275
+ if (!channelsSection.includes("references/cli/update-channels.yaml") ||
276
+ !channelsSection.includes("machine-readable authority")) {
277
+ errors.push("references/cli/vocabulary.md: update channels section must delegate to YAML authority");
278
+ }
279
+ return errors;
280
+ }
281
+ export function validateVocabularyAuthority(root = rootDefault()) {
282
+ const resolved = resolvePath(root);
283
+ return [
284
+ ...validateLifecycleAuthority(resolved),
285
+ ...validateUpdateChannelsAuthority(resolved),
286
+ ...validateInstructionContract(resolved),
287
+ ...validateVocabularyIndex(resolved),
288
+ ...validateGlossaryEntryContract(authorityPath(resolved, "references/artifacts/glossary-entry-contract.yaml")),
289
+ ];
290
+ }
291
+ export function vocabularyAuthorityMain(opts = {}) {
292
+ const root = resolvePath(opts.root ?? rootDefault());
293
+ const out = opts.out ?? ((line) => process.stdout.write(line + "\n"));
294
+ const errors = validateVocabularyAuthority(root);
295
+ if (errors.length > 0) {
296
+ out("vocabulary authority validation failed:");
297
+ for (const error of errors)
298
+ out(`- ${error}`);
299
+ return 1;
300
+ }
301
+ out("vocabulary authority ok");
302
+ return 0;
303
+ }