agentera 0.0.0 → 3.0.0-dev.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (252) hide show
  1. package/README.md +6 -45
  2. package/bundle/.agentera-npx-bundle.json +4 -0
  3. package/bundle/references/adapters/cursor.md +213 -0
  4. package/bundle/references/adapters/opencode.md +530 -0
  5. package/bundle/references/adapters/package-manifest-interface-model.yaml +337 -0
  6. package/bundle/references/adapters/package-registry.yaml +247 -0
  7. package/bundle/references/adapters/package-surface-characterization.md +48 -0
  8. package/bundle/references/adapters/runtime-adapter-characterization.md +79 -0
  9. package/bundle/references/adapters/runtime-adapter-interface-model.yaml +200 -0
  10. package/bundle/references/adapters/runtime-adapter-registry.yaml +548 -0
  11. package/bundle/references/adapters/runtime-feature-parity.md +189 -0
  12. package/bundle/references/analysis/benchmark.md +267 -0
  13. package/bundle/references/analysis/startup-measurement-contract.yaml +424 -0
  14. package/bundle/references/artifacts/artifact-registry-interface-model.yaml +288 -0
  15. package/bundle/references/cli/agent-ready-state-contract.yaml +950 -0
  16. package/bundle/references/cli/app-lifecycle-vocabulary.yaml +233 -0
  17. package/bundle/references/cli/audience-namespace-cli-migration.yaml +355 -0
  18. package/bundle/references/cli/bundle-skill-vocabulary.yaml +278 -0
  19. package/bundle/references/cli/capability-instruction-contract.yaml +123 -0
  20. package/bundle/references/cli/capability-tool-classification.yaml +53 -0
  21. package/bundle/references/cli/routing-execution-vocabulary.yaml +281 -0
  22. package/bundle/references/cli/update-channels.yaml +120 -0
  23. package/bundle/references/cli/vocabulary-index.yaml +160 -0
  24. package/bundle/references/cli/vocabulary.md +562 -0
  25. package/bundle/references/meta/documentation-inventory.md +43 -0
  26. package/bundle/references/v1-section-mapping.md +47 -0
  27. package/bundle/registry.json +39 -0
  28. package/bundle/skills/agentera/.claude-plugin/plugin.json +27 -0
  29. package/bundle/skills/agentera/SKILL.md +470 -0
  30. package/bundle/skills/agentera/agents/dokumentera.toml +6 -0
  31. package/bundle/skills/agentera/agents/hej.toml +6 -0
  32. package/bundle/skills/agentera/agents/inspektera.toml +6 -0
  33. package/bundle/skills/agentera/agents/inspirera.toml +6 -0
  34. package/bundle/skills/agentera/agents/optimera.toml +6 -0
  35. package/bundle/skills/agentera/agents/orkestrera.toml +6 -0
  36. package/bundle/skills/agentera/agents/planera.toml +6 -0
  37. package/bundle/skills/agentera/agents/profilera.toml +6 -0
  38. package/bundle/skills/agentera/agents/realisera.toml +6 -0
  39. package/bundle/skills/agentera/agents/resonera.toml +6 -0
  40. package/bundle/skills/agentera/agents/visionera.toml +6 -0
  41. package/bundle/skills/agentera/agents/visualisera.toml +6 -0
  42. package/bundle/skills/agentera/capabilities/dokumentera/instructions.md +428 -0
  43. package/bundle/skills/agentera/capabilities/dokumentera/schemas/artifacts.yaml +73 -0
  44. package/bundle/skills/agentera/capabilities/dokumentera/schemas/exit.yaml +35 -0
  45. package/bundle/skills/agentera/capabilities/dokumentera/schemas/triggers.yaml +35 -0
  46. package/bundle/skills/agentera/capabilities/dokumentera/schemas/validation.yaml +139 -0
  47. package/bundle/skills/agentera/capabilities/hej/instructions.md +331 -0
  48. package/bundle/skills/agentera/capabilities/hej/schemas/artifacts.yaml +69 -0
  49. package/bundle/skills/agentera/capabilities/hej/schemas/exit.yaml +32 -0
  50. package/bundle/skills/agentera/capabilities/hej/schemas/triggers.yaml +58 -0
  51. package/bundle/skills/agentera/capabilities/hej/schemas/validation.yaml +55 -0
  52. package/bundle/skills/agentera/capabilities/inspektera/instructions.md +514 -0
  53. package/bundle/skills/agentera/capabilities/inspektera/schemas/artifacts.yaml +76 -0
  54. package/bundle/skills/agentera/capabilities/inspektera/schemas/exit.yaml +36 -0
  55. package/bundle/skills/agentera/capabilities/inspektera/schemas/triggers.yaml +38 -0
  56. package/bundle/skills/agentera/capabilities/inspektera/schemas/validation.yaml +113 -0
  57. package/bundle/skills/agentera/capabilities/inspirera/instructions.md +280 -0
  58. package/bundle/skills/agentera/capabilities/inspirera/schemas/artifacts.yaml +24 -0
  59. package/bundle/skills/agentera/capabilities/inspirera/schemas/exit.yaml +33 -0
  60. package/bundle/skills/agentera/capabilities/inspirera/schemas/triggers.yaml +34 -0
  61. package/bundle/skills/agentera/capabilities/inspirera/schemas/validation.yaml +58 -0
  62. package/bundle/skills/agentera/capabilities/optimera/instructions.md +437 -0
  63. package/bundle/skills/agentera/capabilities/optimera/schemas/artifacts.yaml +69 -0
  64. package/bundle/skills/agentera/capabilities/optimera/schemas/exit.yaml +35 -0
  65. package/bundle/skills/agentera/capabilities/optimera/schemas/triggers.yaml +39 -0
  66. package/bundle/skills/agentera/capabilities/optimera/schemas/validation.yaml +91 -0
  67. package/bundle/skills/agentera/capabilities/orkestrera/instructions.md +433 -0
  68. package/bundle/skills/agentera/capabilities/orkestrera/schemas/artifacts.yaml +64 -0
  69. package/bundle/skills/agentera/capabilities/orkestrera/schemas/exit.yaml +34 -0
  70. package/bundle/skills/agentera/capabilities/orkestrera/schemas/triggers.yaml +42 -0
  71. package/bundle/skills/agentera/capabilities/orkestrera/schemas/validation.yaml +107 -0
  72. package/bundle/skills/agentera/capabilities/planera/instructions.md +368 -0
  73. package/bundle/skills/agentera/capabilities/planera/schemas/artifacts.yaml +62 -0
  74. package/bundle/skills/agentera/capabilities/planera/schemas/exit.yaml +33 -0
  75. package/bundle/skills/agentera/capabilities/planera/schemas/triggers.yaml +34 -0
  76. package/bundle/skills/agentera/capabilities/planera/schemas/validation.yaml +61 -0
  77. package/bundle/skills/agentera/capabilities/profilera/instructions.md +419 -0
  78. package/bundle/skills/agentera/capabilities/profilera/schemas/artifacts.yaml +18 -0
  79. package/bundle/skills/agentera/capabilities/profilera/schemas/exit.yaml +34 -0
  80. package/bundle/skills/agentera/capabilities/profilera/schemas/triggers.yaml +45 -0
  81. package/bundle/skills/agentera/capabilities/profilera/schemas/validation.yaml +57 -0
  82. package/bundle/skills/agentera/capabilities/realisera/instructions.md +403 -0
  83. package/bundle/skills/agentera/capabilities/realisera/schemas/artifacts.yaml +80 -0
  84. package/bundle/skills/agentera/capabilities/realisera/schemas/exit.yaml +35 -0
  85. package/bundle/skills/agentera/capabilities/realisera/schemas/triggers.yaml +39 -0
  86. package/bundle/skills/agentera/capabilities/realisera/schemas/validation.yaml +110 -0
  87. package/bundle/skills/agentera/capabilities/resonera/instructions.md +329 -0
  88. package/bundle/skills/agentera/capabilities/resonera/schemas/artifacts.yaml +47 -0
  89. package/bundle/skills/agentera/capabilities/resonera/schemas/exit.yaml +35 -0
  90. package/bundle/skills/agentera/capabilities/resonera/schemas/triggers.yaml +46 -0
  91. package/bundle/skills/agentera/capabilities/resonera/schemas/validation.yaml +77 -0
  92. package/bundle/skills/agentera/capabilities/visionera/instructions.md +309 -0
  93. package/bundle/skills/agentera/capabilities/visionera/schemas/artifacts.yaml +57 -0
  94. package/bundle/skills/agentera/capabilities/visionera/schemas/exit.yaml +35 -0
  95. package/bundle/skills/agentera/capabilities/visionera/schemas/triggers.yaml +41 -0
  96. package/bundle/skills/agentera/capabilities/visionera/schemas/validation.yaml +74 -0
  97. package/bundle/skills/agentera/capabilities/visualisera/instructions.md +400 -0
  98. package/bundle/skills/agentera/capabilities/visualisera/schemas/artifacts.yaml +44 -0
  99. package/bundle/skills/agentera/capabilities/visualisera/schemas/exit.yaml +34 -0
  100. package/bundle/skills/agentera/capabilities/visualisera/schemas/triggers.yaml +33 -0
  101. package/bundle/skills/agentera/capabilities/visualisera/schemas/validation.yaml +80 -0
  102. package/bundle/skills/agentera/capability_schema_contract.yaml +385 -0
  103. package/bundle/skills/agentera/protocol.yaml +463 -0
  104. package/bundle/skills/agentera/references/contract.md +1039 -0
  105. package/bundle/skills/agentera/schemas/artifacts/changelog.yaml +60 -0
  106. package/bundle/skills/agentera/schemas/artifacts/decisions.yaml +461 -0
  107. package/bundle/skills/agentera/schemas/artifacts/design.yaml +55 -0
  108. package/bundle/skills/agentera/schemas/artifacts/docs.yaml +402 -0
  109. package/bundle/skills/agentera/schemas/artifacts/experiments.yaml +373 -0
  110. package/bundle/skills/agentera/schemas/artifacts/health.yaml +484 -0
  111. package/bundle/skills/agentera/schemas/artifacts/objective.yaml +399 -0
  112. package/bundle/skills/agentera/schemas/artifacts/plan.yaml +342 -0
  113. package/bundle/skills/agentera/schemas/artifacts/progress.yaml +325 -0
  114. package/bundle/skills/agentera/schemas/artifacts/todo.yaml +110 -0
  115. package/bundle/skills/agentera/schemas/artifacts/vision.yaml +262 -0
  116. package/bundle/skills/hej/.claude-plugin/plugin.json +6 -0
  117. package/bundle/skills/hej/SKILL.md +69 -0
  118. package/bundle/skills/hej/agents/hej.toml +11 -0
  119. package/bundle/skills/hej/agents/openai.yaml +8 -0
  120. package/dist/analytics/extractCorpus.js +1791 -0
  121. package/dist/analytics/extractCorpus.js.map +1 -0
  122. package/dist/analytics/usageStats.js +487 -0
  123. package/dist/analytics/usageStats.js.map +1 -0
  124. package/dist/bin/agentera.js +4 -0
  125. package/dist/bin/agentera.js.map +1 -0
  126. package/dist/cli/appContext.js +226 -0
  127. package/dist/cli/appContext.js.map +1 -0
  128. package/dist/cli/argvalidate.js +41 -0
  129. package/dist/cli/argvalidate.js.map +1 -0
  130. package/dist/cli/capabilityContext.js +2421 -0
  131. package/dist/cli/capabilityContext.js.map +1 -0
  132. package/dist/cli/commands/backfill.js +84 -0
  133. package/dist/cli/commands/backfill.js.map +1 -0
  134. package/dist/cli/commands/capability.js +44 -0
  135. package/dist/cli/commands/capability.js.map +1 -0
  136. package/dist/cli/commands/compact.js +148 -0
  137. package/dist/cli/commands/compact.js.map +1 -0
  138. package/dist/cli/commands/doctor.js +180 -0
  139. package/dist/cli/commands/doctor.js.map +1 -0
  140. package/dist/cli/commands/lint.js +179 -0
  141. package/dist/cli/commands/lint.js.map +1 -0
  142. package/dist/cli/commands/prime.js +545 -0
  143. package/dist/cli/commands/prime.js.map +1 -0
  144. package/dist/cli/commands/query.js +346 -0
  145. package/dist/cli/commands/query.js.map +1 -0
  146. package/dist/cli/commands/report.js +210 -0
  147. package/dist/cli/commands/report.js.map +1 -0
  148. package/dist/cli/commands/schema.js +306 -0
  149. package/dist/cli/commands/schema.js.map +1 -0
  150. package/dist/cli/commands/state.js +1012 -0
  151. package/dist/cli/commands/state.js.map +1 -0
  152. package/dist/cli/commands/upgrade.js +49 -0
  153. package/dist/cli/commands/upgrade.js.map +1 -0
  154. package/dist/cli/commands/validate.js +519 -0
  155. package/dist/cli/commands/validate.js.map +1 -0
  156. package/dist/cli/commands/verify.js +204 -0
  157. package/dist/cli/commands/verify.js.map +1 -0
  158. package/dist/cli/dispatch.js +962 -0
  159. package/dist/cli/dispatch.js.map +1 -0
  160. package/dist/cli/orientation.js +595 -0
  161. package/dist/cli/orientation.js.map +1 -0
  162. package/dist/cli/prime-blob.js +3 -0
  163. package/dist/cli/prime-blob.js.map +1 -0
  164. package/dist/cli/stateQuery.js +292 -0
  165. package/dist/cli/stateQuery.js.map +1 -0
  166. package/dist/cli/structured.js +18 -0
  167. package/dist/cli/structured.js.map +1 -0
  168. package/dist/core/difflib.js +274 -0
  169. package/dist/core/difflib.js.map +1 -0
  170. package/dist/core/git.js +43 -0
  171. package/dist/core/git.js.map +1 -0
  172. package/dist/core/paths.js +50 -0
  173. package/dist/core/paths.js.map +1 -0
  174. package/dist/core/pyjson.js +101 -0
  175. package/dist/core/pyjson.js.map +1 -0
  176. package/dist/core/sourceRoot.js +72 -0
  177. package/dist/core/sourceRoot.js.map +1 -0
  178. package/dist/core/toml.js +11 -0
  179. package/dist/core/toml.js.map +1 -0
  180. package/dist/core/yaml.js +25 -0
  181. package/dist/core/yaml.js.map +1 -0
  182. package/dist/eval/evalSkills.js +258 -0
  183. package/dist/eval/evalSkills.js.map +1 -0
  184. package/dist/eval/semanticEval.js +148 -0
  185. package/dist/eval/semanticEval.js.map +1 -0
  186. package/dist/eval/semanticFixtures.js +227 -0
  187. package/dist/eval/semanticFixtures.js.map +1 -0
  188. package/dist/hooks/common.js +160 -0
  189. package/dist/hooks/common.js.map +1 -0
  190. package/dist/hooks/compaction.js +935 -0
  191. package/dist/hooks/compaction.js.map +1 -0
  192. package/dist/hooks/cursorPreToolUse.js +19 -0
  193. package/dist/hooks/cursorPreToolUse.js.map +1 -0
  194. package/dist/hooks/cursorSessionStart.js +71 -0
  195. package/dist/hooks/cursorSessionStart.js.map +1 -0
  196. package/dist/hooks/sessionStart.js +209 -0
  197. package/dist/hooks/sessionStart.js.map +1 -0
  198. package/dist/hooks/sessionStop.js +212 -0
  199. package/dist/hooks/sessionStop.js.map +1 -0
  200. package/dist/hooks/validateArtifact.js +933 -0
  201. package/dist/hooks/validateArtifact.js.map +1 -0
  202. package/dist/registries/artifactRegistry.js +206 -0
  203. package/dist/registries/artifactRegistry.js.map +1 -0
  204. package/dist/registries/capabilityContract.js +310 -0
  205. package/dist/registries/capabilityContract.js.map +1 -0
  206. package/dist/registries/packageRegistry.js +641 -0
  207. package/dist/registries/packageRegistry.js.map +1 -0
  208. package/dist/registries/runtimeAdapterRegistry.js +315 -0
  209. package/dist/registries/runtimeAdapterRegistry.js.map +1 -0
  210. package/dist/setup/codex.js +1052 -0
  211. package/dist/setup/codex.js.map +1 -0
  212. package/dist/setup/copilot.js +227 -0
  213. package/dist/setup/copilot.js.map +1 -0
  214. package/dist/setup/cursor.js +127 -0
  215. package/dist/setup/cursor.js.map +1 -0
  216. package/dist/setup/doctor.js +1269 -0
  217. package/dist/setup/doctor.js.map +1 -0
  218. package/dist/state/installRoot.js +279 -0
  219. package/dist/state/installRoot.js.map +1 -0
  220. package/dist/state/progressCommit.js +289 -0
  221. package/dist/state/progressCommit.js.map +1 -0
  222. package/dist/state/startupAnalysis.js +1953 -0
  223. package/dist/state/startupAnalysis.js.map +1 -0
  224. package/dist/upgrade/appModel.js +189 -0
  225. package/dist/upgrade/appModel.js.map +1 -0
  226. package/dist/upgrade/channels.js +197 -0
  227. package/dist/upgrade/channels.js.map +1 -0
  228. package/dist/upgrade/compatibility.js +197 -0
  229. package/dist/upgrade/compatibility.js.map +1 -0
  230. package/dist/upgrade/doctor.js +368 -0
  231. package/dist/upgrade/doctor.js.map +1 -0
  232. package/dist/upgrade/migrateArtifactsV2ToV3.js +412 -0
  233. package/dist/upgrade/migrateArtifactsV2ToV3.js.map +1 -0
  234. package/dist/upgrade/upgradeCommands.js +40 -0
  235. package/dist/upgrade/upgradeCommands.js.map +1 -0
  236. package/dist/upgrade/upgradeOrchestrator.js +280 -0
  237. package/dist/upgrade/upgradeOrchestrator.js.map +1 -0
  238. package/dist/validate/appHomeContract.js +150 -0
  239. package/dist/validate/appHomeContract.js.map +1 -0
  240. package/dist/validate/capability.js +412 -0
  241. package/dist/validate/capability.js.map +1 -0
  242. package/dist/validate/crossCapability.js +145 -0
  243. package/dist/validate/crossCapability.js.map +1 -0
  244. package/dist/validate/lifecycleAdapters.js +772 -0
  245. package/dist/validate/lifecycleAdapters.js.map +1 -0
  246. package/dist/validate/selfAudit.js +107 -0
  247. package/dist/validate/selfAudit.js.map +1 -0
  248. package/package.json +28 -8
  249. package/LICENSE +0 -201
  250. package/bin/agentera.mjs +0 -50
  251. package/lib/exec.mjs +0 -116
  252. package/lib/resolve.mjs +0 -129
@@ -0,0 +1,60 @@
1
+ # Changelog Artifact Schema
2
+ #
3
+ # Release history maintained by realisera. Tracks versioned releases with
4
+ # categorized changes (Added, Changed, Fixed, Removed).
5
+ #
6
+ # Note: CHANGELOG.md is a human-facing Markdown artifact. It remains at the
7
+ # project root and is not migrated to YAML. This schema exists for validation
8
+ # and CLI discovery consistency.
9
+
10
+ meta:
11
+ name: changelog
12
+ version: "1.0.0"
13
+ description: >-
14
+ Release history. Produced by realisera. Consumed by users and agents
15
+ for version context. Human-facing: remains Markdown at project root.
16
+ artifact_type: human_facing
17
+ path: "CHANGELOG.md"
18
+ producer: realisera
19
+ consumers: [hej, all_skills]
20
+ format: markdown
21
+
22
+ GROUP_PREFIXES:
23
+ BUDGET: CB
24
+ RELEASE: CR
25
+ VALIDATION: CV
26
+
27
+ BUDGET:
28
+ 1:
29
+ id: CB1
30
+ token_budget: 5000
31
+ description: >-
32
+ Maximum tokens for CHANGELOG.md content. Exceeding triggers compaction.
33
+
34
+ RELEASE:
35
+ 1:
36
+ id: CR1
37
+ field: version
38
+ type: string
39
+ required: true
40
+ description: >-
41
+ Semantic version string (e.g., "2.0.0"). Must follow semver.
42
+ validation:
43
+ - "Must match semver format: MAJOR.MINOR.PATCH"
44
+ 2:
45
+ id: CR2
46
+ field: date
47
+ type: string
48
+ required: true
49
+ description: >-
50
+ Release date in YYYY-MM-DD format.
51
+ validation:
52
+ - "Must match YYYY-MM-DD format"
53
+ 3:
54
+ id: CR3
55
+ field: changes
56
+ type: list[string]
57
+ required: true
58
+ description: >-
59
+ List of changes in this release, categorized by type
60
+ (Added, Changed, Fixed, Removed).
@@ -0,0 +1,461 @@
1
+ # Decisions Artifact Schema
2
+ #
3
+ # Reasoning trail maintained by resonera. Each deliberation session appends
4
+ # one entry. Decisions are referenced by realisera, optimera, and profilera
5
+ # for context on why choices were made.
6
+ #
7
+ # Structural pattern: UPPER_CASE groups with numbered entries and stable IDs,
8
+ # following capability_schema_contract.yaml and protocol.yaml conventions.
9
+ #
10
+ # ── Field-by-field mapping: v1 DECISIONS.md → v2 decisions.yaml ──
11
+ #
12
+ # v1 Field v2 Field v2 ID
13
+ # ─────────────────────────────────────────────────────────────────────
14
+ # ## Decision N · date DECISION.number DC1
15
+ # (date from heading) DECISION.date DC2
16
+ # **Question**: <text> DECISION.question DC3
17
+ # **Context**: <text> DECISION.context DC4
18
+ # **Alternatives**: (list) ALTERNATIVE entry DA1
19
+ # (named alt, e.g. "[Foo], chosen") ALTERNATIVE.name DA2
20
+ # (chosen/rejected status) ALTERNATIVE.status DA3
21
+ # **Choice**: <text> DECISION.choice DC5
22
+ # **Reasoning**: <text> DECISION.reasoning DC6
23
+ # **Confidence**: <label> DECISION.confidence DC7
24
+ # **Feeds into**: <text> DECISION.feeds_into DC8
25
+ # ## Archived Decisions (implicit section) —
26
+ # - Decision N (date): [Choice] — ... ARCHIVE.summary DR1
27
+ #
28
+ # Protocol references:
29
+ # confidence: DL1-DL3 (protocol.yaml DECISION_LABELS)
30
+
31
+ meta:
32
+ name: decisions
33
+ version: "1.0.0"
34
+ description: >-
35
+ Reasoning trail maintained by resonera. Each deliberation session
36
+ appends one entry. Decisions are referenced by realisera, optimera,
37
+ profilera, planera, inspektera, hej, dokumentera, visionera, resonera,
38
+ and orkestrera for context on why choices were made.
39
+ artifact_type: agent_facing
40
+ path: ".agentera/decisions.yaml"
41
+ producer: resonera
42
+ consumers: [dokumentera, hej, inspektera, optimera, orkestrera, planera, profilera, realisera, resonera, visionera]
43
+ format: yaml
44
+
45
+ GROUP_PREFIXES:
46
+ BUDGET: DB
47
+ COMPACTION: DX
48
+ DECISION: DC
49
+ ALTERNATIVE: DA
50
+ SATISFACTION: DS
51
+ ARCHIVE: DR
52
+ VALIDATION: DV
53
+
54
+ BUDGET:
55
+ 1:
56
+ id: DB1
57
+ scope: per_decision_entry
58
+ max_words: 200
59
+ description: >-
60
+ Maximum words per decision entry. Budgets are guidelines, not hard
61
+ blockers.
62
+ 2:
63
+ id: DB2
64
+ scope: full_file
65
+ max_words: null
66
+ description: >-
67
+ No full-file word budget. Compaction manages size via entry count.
68
+
69
+ COMPACTION:
70
+ 1:
71
+ id: DX1
72
+ rule: uniform_10_40_50
73
+ description: >-
74
+ Growing artifacts follow a uniform 10/40/50 rule: 10 full-detail
75
+ entries, 40 one-line archive entries, drop beyond 50 total.
76
+ 2:
77
+ id: DX2
78
+ full_detail:
79
+ max_entries: 10
80
+ selection: "10 most recent decisions"
81
+ format: "Standard decision entry format (all fields)"
82
+ description: >-
83
+ The 10 most recent decisions are kept in full detail with all fields.
84
+ 3:
85
+ id: DX3
86
+ one_line_archive:
87
+ max_entries: 40
88
+ selection: "Decisions 11 through 50"
89
+ format: "Decision N (YYYY-MM-DD): [Choice] — <=15-word summary"
90
+ fields: [number, date, choice, summary]
91
+ description: >-
92
+ Decisions 11 through 50 are collapsed to compact archive entries under
93
+ the archive section. Compact summaries preserve decision number, date,
94
+ and chosen alternative; structured compact fields preserve outcome and
95
+ explicit feeds_into references when present so CLI downstream references
96
+ remain non-inferential.
97
+ 4:
98
+ id: DX4
99
+ dropped:
100
+ threshold: 50
101
+ action: "Removed entirely"
102
+ description: >-
103
+ Decisions older than 50 are dropped entirely.
104
+ 5:
105
+ id: DX5
106
+ trigger: "When resonera writes a new decision"
107
+ description: >-
108
+ Compaction runs when the producing skill writes a new entry.
109
+ If >10 full-detail entries exist, collapse the oldest to one-line.
110
+ If >40 one-line entries exist, drop the oldest.
111
+ 6:
112
+ id: DX6
113
+ archive_section:
114
+ heading: "Archived Decisions"
115
+ placement: "Below recent decisions"
116
+ description: >-
117
+ Archive entries sit below the recent decisions section.
118
+ 7:
119
+ id: DX7
120
+ insertion_rule: >-
121
+ New full entry is inserted in the active section immediately before
122
+ the archive section; if no archive exists, append at end of file.
123
+ Active entries must have unique numbers and remain ascending.
124
+ Do not reuse or renumber except when repairing artifact corruption.
125
+ description: >-
126
+ Rules for inserting new decision entries and maintaining order.
127
+
128
+ DECISION:
129
+ 1:
130
+ id: DC1
131
+ field: number
132
+ type: integer
133
+ required: true
134
+ description: >-
135
+ Monotonically increasing decision number. One greater than the
136
+ highest decision number in active and archived entries.
137
+ validation:
138
+ - "Must be a positive integer"
139
+ - "Must be unique across active and archived entries"
140
+ - "Must be one greater than the previous highest"
141
+ 2:
142
+ id: DC2
143
+ field: date
144
+ type: string
145
+ format: "YYYY-MM-DD"
146
+ required: true
147
+ description: "When the decision was recorded."
148
+ validation:
149
+ - "Must match YYYY-MM-DD format"
150
+ 3:
151
+ id: DC3
152
+ field: question
153
+ type: string
154
+ required: true
155
+ description: >-
156
+ The question or decision being made. Phrased as a question that
157
+ the decision answers.
158
+ validation:
159
+ - "Non-empty string"
160
+ 4:
161
+ id: DC4
162
+ field: context
163
+ type: string
164
+ required: true
165
+ description: >-
166
+ Background information framing the decision. Why this question
167
+ matters, what constraints exist, what prior decisions are relevant.
168
+ validation:
169
+ - "Non-empty string"
170
+ 5:
171
+ id: DC5
172
+ field: choice
173
+ type: string
174
+ required: true
175
+ description: >-
176
+ The chosen alternative, with explanation of what was chosen and why
177
+ it is the right answer in context.
178
+ validation:
179
+ - "Non-empty string"
180
+ 6:
181
+ id: DC6
182
+ field: reasoning
183
+ type: string
184
+ required: true
185
+ description: >-
186
+ Why this choice was made over the alternatives. The deliberative
187
+ reasoning trail that justifies the decision.
188
+ validation:
189
+ - "Non-empty string"
190
+ 7:
191
+ id: DC7
192
+ field: confidence
193
+ type: string
194
+ required: true
195
+ description: >-
196
+ Decision confidence label. References protocol.yaml DECISION_LABELS
197
+ (DL1-DL3). Firm = committed, provisional = best current answer,
198
+ exploratory = direction to try.
199
+ protocol_ref: DECISION_LABELS
200
+ validation:
201
+ - "Must be one of: firm, provisional, exploratory"
202
+ 8:
203
+ id: DC8
204
+ field: feeds_into
205
+ type: string
206
+ required: false
207
+ description: >-
208
+ What artifacts, skills, or work items this decision affects.
209
+ Downstream consumers that should be aware of this choice.
210
+ 9:
211
+ id: DC9
212
+ field: satisfaction
213
+ type: map
214
+ required: false
215
+ description: >-
216
+ First-class satisfaction state for this decision. Missing satisfaction is
217
+ valid legacy data, but consumers must derive review_needed=true rather
218
+ than treating the decision as satisfied.
219
+
220
+ SATISFACTION:
221
+ 1:
222
+ id: DS1
223
+ field: state
224
+ parent: DECISION.satisfaction
225
+ type: string
226
+ required: true
227
+ description: >-
228
+ Canonical satisfaction state. This is the only satisfaction state field;
229
+ review_needed is derived from missing or stale protected state, not stored
230
+ as a fourth state.
231
+ validation:
232
+ - "Must be one of: open, provisionally_satisfied, user_confirmed_satisfied"
233
+ 2:
234
+ id: DS2
235
+ field: evidence
236
+ parent: DECISION.satisfaction
237
+ type: string
238
+ required: false
239
+ description: >-
240
+ Evidence that an agent may attach when state is provisionally_satisfied.
241
+ Provisional satisfaction requires non-empty evidence that cites concrete
242
+ implemented behavior, tests, artifacts, or user-visible outcomes.
243
+ 3:
244
+ id: DS3
245
+ field: user_confirmation
246
+ parent: DECISION.satisfaction
247
+ type: map
248
+ required: false
249
+ description: >-
250
+ Explicit user authority metadata required when state is
251
+ user_confirmed_satisfied. Agents must not create this state unless the
252
+ current user directly confirms the decision is satisfied.
253
+ children:
254
+ - field: confirmed_by
255
+ type: string
256
+ required: true
257
+ - field: confirmed_at
258
+ type: string
259
+ required: true
260
+
261
+ ALTERNATIVE:
262
+ 1:
263
+ id: DA1
264
+ field: entry
265
+ type: map
266
+ required: true
267
+ description: >-
268
+ Each alternative is a structured entry within the decision's
269
+ alternatives list. At least one alternative must be present.
270
+ min_count: 1
271
+ 2:
272
+ id: DA2
273
+ field: name
274
+ parent: ALTERNATIVE.entry
275
+ type: string
276
+ required: true
277
+ description: >-
278
+ Short name or bracketed label for this alternative
279
+ (e.g., '[Suite bundle first]').
280
+ validation:
281
+ - "Non-empty string"
282
+ 3:
283
+ id: DA3
284
+ field: status
285
+ parent: ALTERNATIVE.entry
286
+ type: string
287
+ required: true
288
+ description: >-
289
+ Whether this alternative was chosen or rejected.
290
+ Exactly one alternative in each decision must be 'chosen'.
291
+ validation:
292
+ - "Must be one of: chosen, rejected"
293
+ 4:
294
+ id: DA4
295
+ field: description
296
+ parent: ALTERNATIVE.entry
297
+ type: string
298
+ required: false
299
+ description: >-
300
+ Brief explanation of the alternative. May be omitted when the
301
+ name is self-explanatory.
302
+
303
+ ARCHIVE:
304
+ 1:
305
+ id: DR1
306
+ field: summary
307
+ type: string
308
+ required: true
309
+ description: >-
310
+ Summary for a compacted decision. Format:
311
+ 'Decision N (YYYY-MM-DD): [Choice] — <=15-word summary'.
312
+ Preserves decision number, date, and chosen alternative.
313
+ validation:
314
+ - "Must include decision number"
315
+ - "Must include date in YYYY-MM-DD format"
316
+ - "Must include chosen alternative"
317
+ - "Summary portion must be <=15 words"
318
+ 2:
319
+ id: DR2
320
+ field: number
321
+ type: integer
322
+ required: false
323
+ description: >-
324
+ Decision number retained when a full decision is compacted. Legacy
325
+ compacted entries may expose the number only inside summary.
326
+ 3:
327
+ id: DR3
328
+ field: date
329
+ type: string
330
+ format: "YYYY-MM-DD"
331
+ required: false
332
+ description: >-
333
+ Decision date retained when a full decision is compacted. Legacy
334
+ compacted entries may expose the date only inside summary.
335
+ 4:
336
+ id: DR4
337
+ field: choice
338
+ type: string
339
+ required: false
340
+ description: >-
341
+ Chosen alternative retained when a full decision is compacted. This is
342
+ the source for compacted CLI outcome when present.
343
+ 5:
344
+ id: DR5
345
+ field: outcome
346
+ type: string
347
+ required: false
348
+ description: >-
349
+ Outcome retained for structured consumers of compacted decisions. When
350
+ omitted by legacy entries, CLI output marks outcome missing instead of
351
+ requiring raw artifact or git-history fallback.
352
+ 6:
353
+ id: DR6
354
+ field: feeds_into
355
+ type: string
356
+ required: false
357
+ description: >-
358
+ Explicit downstream references retained from the full decision when
359
+ present. Consumers must not infer downstream consequences when absent.
360
+ 7:
361
+ id: DR7
362
+ field: satisfaction
363
+ type: map
364
+ required: false
365
+ description: >-
366
+ Satisfaction state retained when a confirmed full decision is compacted.
367
+ Legacy compacted entries may omit this field; such entries are valid but
368
+ review-needed, and compaction must not silently drop them.
369
+
370
+ VALIDATION:
371
+ 1:
372
+ id: DV1
373
+ rule: unique_decision_numbers
374
+ severity: error
375
+ description: >-
376
+ Active decision entries must have unique numbers and remain ascending
377
+ by decision number. Do not reuse or renumber except when repairing
378
+ artifact corruption.
379
+ checks:
380
+ - "All decision numbers are unique across active and archived entries"
381
+ - "Active entries are in ascending order by decision number"
382
+ 2:
383
+ id: DV2
384
+ rule: required_fields
385
+ severity: error
386
+ description: >-
387
+ Each full-detail decision entry must have: number, date, question,
388
+ context, alternatives, choice, reasoning, and confidence.
389
+ checks:
390
+ - "number is present and is a positive integer"
391
+ - "date is present and matches YYYY-MM-DD"
392
+ - "question is present and non-empty"
393
+ - "context is present and non-empty"
394
+ - "alternatives list is present with at least one entry"
395
+ - "choice is present and non-empty"
396
+ - "reasoning is present and non-empty"
397
+ - "confidence is present and is a valid label"
398
+ 3:
399
+ id: DV3
400
+ rule: exactly_one_chosen
401
+ severity: error
402
+ description: >-
403
+ Exactly one alternative in each decision must have status 'chosen'.
404
+ checks:
405
+ - "Each decision has exactly one alternative with status: chosen"
406
+ 4:
407
+ id: DV4
408
+ rule: compaction_thresholds
409
+ severity: warning
410
+ description: >-
411
+ Warn if the file exceeds compaction thresholds: >10 full-detail
412
+ entries or >40 one-line archive entries.
413
+ checks:
414
+ - "Full-detail entries <= 10"
415
+ - "One-line archive entries <= 40"
416
+ - "Total entries <= 50"
417
+ 5:
418
+ id: DV5
419
+ rule: word_budget
420
+ severity: advisory
421
+ description: >-
422
+ Advisory check. Per-decision entry should be <=200 words.
423
+ checks:
424
+ - "Per-decision word count <= 200"
425
+ 6:
426
+ id: DV6
427
+ rule: satisfaction_contract
428
+ severity: error
429
+ description: >-
430
+ Satisfaction, when present, must use the canonical state model. Agents
431
+ may mark provisional satisfaction only with evidence. User-confirmed
432
+ satisfaction requires explicit user-confirmation metadata.
433
+ checks:
434
+ - "satisfaction.state is one of: open, provisionally_satisfied, user_confirmed_satisfied"
435
+ - "provisionally_satisfied requires non-empty satisfaction.evidence"
436
+ - "user_confirmed_satisfied requires satisfaction.user_confirmation.confirmed_by and confirmed_at"
437
+ 7:
438
+ id: DV7
439
+ rule: legacy_review_needed
440
+ severity: advisory
441
+ description: >-
442
+ Active or archived legacy decisions without satisfaction remain valid but
443
+ consumers must derive review_needed=true rather than silently treating
444
+ them as satisfied.
445
+ checks:
446
+ - "missing satisfaction is valid legacy data"
447
+ - "missing satisfaction derives review_needed=true"
448
+ 8:
449
+ id: DV8
450
+ rule: stale_review_trigger
451
+ severity: warning
452
+ description: >-
453
+ Open, provisionally satisfied, or legacy review-needed decisions are
454
+ protected from compaction/drop. If such decisions exceed compaction
455
+ budgets, or are encountered during health audits or release closeout,
456
+ user review is required before treating the state as healthy or
457
+ release-ready.
458
+ checks:
459
+ - "open decisions are protected"
460
+ - "provisionally_satisfied decisions are protected"
461
+ - "legacy missing satisfaction is protected until reviewed"
@@ -0,0 +1,55 @@
1
+ # Design Artifact Schema
2
+ #
3
+ # Visual identity system maintained by visualisera. Defines design tokens,
4
+ # palette, typography, spacing, and component styling rules.
5
+ #
6
+ # Note: DESIGN.md is a human-facing Markdown artifact. It remains at the
7
+ # project root and is not migrated to YAML. This schema exists for validation
8
+ # and CLI discovery consistency.
9
+
10
+ meta:
11
+ name: design
12
+ version: "1.0.0"
13
+ description: >-
14
+ Visual identity system. Produced by visualisera. Consumed by capabilities
15
+ that need visual identity context. Human-facing: remains Markdown at root.
16
+ artifact_type: human_facing
17
+ path: "DESIGN.md"
18
+ producer: visualisera
19
+ consumers: [dokumentera, hej, inspektera, realisera, visionera, visualisera]
20
+ format: markdown
21
+
22
+ GROUP_PREFIXES:
23
+ BUDGET: DB
24
+ TOKEN: DT
25
+ VALIDATION: DV
26
+
27
+ BUDGET:
28
+ 1:
29
+ id: DB1
30
+ token_budget: 2000
31
+ description: >-
32
+ Maximum tokens for DESIGN.md content. Exceeding triggers compaction.
33
+
34
+ TOKEN:
35
+ 1:
36
+ id: DT1
37
+ field: category
38
+ type: string
39
+ required: true
40
+ description: >-
41
+ Token category: palette, typography, spacing, component, or animation.
42
+ 2:
43
+ id: DT2
44
+ field: name
45
+ type: string
46
+ required: true
47
+ description: >-
48
+ Token name (e.g., "primary", "body-text", "gap-md").
49
+ 3:
50
+ id: DT3
51
+ field: value
52
+ type: string
53
+ required: true
54
+ description: >-
55
+ Token value (e.g., hex color, font stack, spacing unit).