@chromvoid/headless-ui 0.1.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 (191) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +99 -0
  3. package/dist/a11y-contracts/index.d.ts +23 -0
  4. package/dist/a11y-contracts/index.js +1 -0
  5. package/dist/accordion/index.d.ts +78 -0
  6. package/dist/accordion/index.js +264 -0
  7. package/dist/adapters/index.d.ts +9 -0
  8. package/dist/adapters/index.js +1 -0
  9. package/dist/alert/index.d.ts +33 -0
  10. package/dist/alert/index.js +54 -0
  11. package/dist/alert-dialog/index.d.ts +69 -0
  12. package/dist/alert-dialog/index.js +94 -0
  13. package/dist/badge/index.d.ts +48 -0
  14. package/dist/badge/index.js +89 -0
  15. package/dist/breadcrumb/index.d.ts +55 -0
  16. package/dist/breadcrumb/index.js +77 -0
  17. package/dist/button/index.d.ts +46 -0
  18. package/dist/button/index.js +86 -0
  19. package/dist/callout/index.d.ts +41 -0
  20. package/dist/callout/index.js +63 -0
  21. package/dist/card/index.d.ts +54 -0
  22. package/dist/card/index.js +103 -0
  23. package/dist/carousel/index.d.ts +98 -0
  24. package/dist/carousel/index.js +243 -0
  25. package/dist/checkbox/index.d.ts +50 -0
  26. package/dist/checkbox/index.js +87 -0
  27. package/dist/combobox/index.d.ts +114 -0
  28. package/dist/combobox/index.js +431 -0
  29. package/dist/command-palette/index.d.ts +73 -0
  30. package/dist/command-palette/index.js +147 -0
  31. package/dist/context-menu/index.d.ts +111 -0
  32. package/dist/context-menu/index.js +372 -0
  33. package/dist/copy-button/index.d.ts +62 -0
  34. package/dist/copy-button/index.js +183 -0
  35. package/dist/core/index.d.ts +20 -0
  36. package/dist/core/index.js +2 -0
  37. package/dist/core/selection.d.ts +5 -0
  38. package/dist/core/selection.js +39 -0
  39. package/dist/core/value-range.d.ts +49 -0
  40. package/dist/core/value-range.js +134 -0
  41. package/dist/date-picker/index.d.ts +210 -0
  42. package/dist/date-picker/index.js +895 -0
  43. package/dist/dialog/index.d.ts +95 -0
  44. package/dist/dialog/index.js +153 -0
  45. package/dist/disclosure/index.d.ts +52 -0
  46. package/dist/disclosure/index.js +159 -0
  47. package/dist/drawer/index.d.ts +30 -0
  48. package/dist/drawer/index.js +39 -0
  49. package/dist/feed/index.d.ts +77 -0
  50. package/dist/feed/index.js +260 -0
  51. package/dist/grid/index.d.ts +103 -0
  52. package/dist/grid/index.js +415 -0
  53. package/dist/index.d.ts +51 -0
  54. package/dist/index.js +51 -0
  55. package/dist/input/index.d.ts +86 -0
  56. package/dist/input/index.js +156 -0
  57. package/dist/interactions/composite-navigation.d.ts +69 -0
  58. package/dist/interactions/composite-navigation.js +169 -0
  59. package/dist/interactions/index.d.ts +15 -0
  60. package/dist/interactions/index.js +4 -0
  61. package/dist/interactions/keyboard-intents.d.ts +16 -0
  62. package/dist/interactions/keyboard-intents.js +33 -0
  63. package/dist/interactions/overlay-focus.d.ts +40 -0
  64. package/dist/interactions/overlay-focus.js +93 -0
  65. package/dist/interactions/typeahead.d.ts +20 -0
  66. package/dist/interactions/typeahead.js +41 -0
  67. package/dist/landmarks/index.d.ts +39 -0
  68. package/dist/landmarks/index.js +58 -0
  69. package/dist/link/index.d.ts +34 -0
  70. package/dist/link/index.js +39 -0
  71. package/dist/listbox/index.d.ts +92 -0
  72. package/dist/listbox/index.js +337 -0
  73. package/dist/menu/index.d.ts +132 -0
  74. package/dist/menu/index.js +541 -0
  75. package/dist/menu-button/index.d.ts +71 -0
  76. package/dist/menu-button/index.js +121 -0
  77. package/dist/meter/index.d.ts +45 -0
  78. package/dist/meter/index.js +106 -0
  79. package/dist/number/index.d.ts +113 -0
  80. package/dist/number/index.js +252 -0
  81. package/dist/popover/index.d.ts +70 -0
  82. package/dist/popover/index.js +126 -0
  83. package/dist/progress/index.d.ts +49 -0
  84. package/dist/progress/index.js +79 -0
  85. package/dist/radio-group/index.d.ts +61 -0
  86. package/dist/radio-group/index.js +150 -0
  87. package/dist/select/index.d.ts +92 -0
  88. package/dist/select/index.js +239 -0
  89. package/dist/sidebar/index.d.ts +74 -0
  90. package/dist/sidebar/index.js +186 -0
  91. package/dist/slider/index.d.ts +61 -0
  92. package/dist/slider/index.js +150 -0
  93. package/dist/slider-multi-thumb/index.d.ts +70 -0
  94. package/dist/slider-multi-thumb/index.js +222 -0
  95. package/dist/spinbutton/index.d.ts +75 -0
  96. package/dist/spinbutton/index.js +214 -0
  97. package/dist/spinner/index.d.ts +1 -0
  98. package/dist/spinner/index.js +1 -0
  99. package/dist/spinner/spinner.d.ts +23 -0
  100. package/dist/spinner/spinner.js +25 -0
  101. package/dist/switch/index.d.ts +40 -0
  102. package/dist/switch/index.js +61 -0
  103. package/dist/table/index.d.ts +117 -0
  104. package/dist/table/index.js +377 -0
  105. package/dist/tabs/index.d.ts +63 -0
  106. package/dist/tabs/index.js +174 -0
  107. package/dist/textarea/index.d.ts +68 -0
  108. package/dist/textarea/index.js +137 -0
  109. package/dist/toast/index.d.ts +67 -0
  110. package/dist/toast/index.js +145 -0
  111. package/dist/toolbar/index.d.ts +59 -0
  112. package/dist/toolbar/index.js +139 -0
  113. package/dist/tooltip/index.d.ts +52 -0
  114. package/dist/tooltip/index.js +169 -0
  115. package/dist/treegrid/index.d.ts +101 -0
  116. package/dist/treegrid/index.js +463 -0
  117. package/dist/treeview/index.d.ts +68 -0
  118. package/dist/treeview/index.js +370 -0
  119. package/dist/window-splitter/index.d.ts +65 -0
  120. package/dist/window-splitter/index.js +204 -0
  121. package/package.json +92 -0
  122. package/specs/ADR-001-headless-architecture.md +461 -0
  123. package/specs/ADR-002-repo-release-model.md +108 -0
  124. package/specs/ADR-003-public-api-versioning.md +136 -0
  125. package/specs/ADR-004-focus-selection-policy.md +117 -0
  126. package/specs/IMPLEMENTATION-ROADMAP.md +237 -0
  127. package/specs/ISSUE-BACKLOG.md +681 -0
  128. package/specs/RELEASE-CANDIDATE.md +30 -0
  129. package/specs/components/accordion.md +130 -0
  130. package/specs/components/alert-dialog.md +72 -0
  131. package/specs/components/alert.md +65 -0
  132. package/specs/components/badge.md +220 -0
  133. package/specs/components/breadcrumb.md +74 -0
  134. package/specs/components/button.md +115 -0
  135. package/specs/components/callout.md +195 -0
  136. package/specs/components/card.md +280 -0
  137. package/specs/components/carousel.md +140 -0
  138. package/specs/components/checkbox.md +172 -0
  139. package/specs/components/combobox.md +423 -0
  140. package/specs/components/command-palette.md +92 -0
  141. package/specs/components/context-menu.md +556 -0
  142. package/specs/components/copy-button.md +293 -0
  143. package/specs/components/date-picker.md +400 -0
  144. package/specs/components/dialog.md +298 -0
  145. package/specs/components/disclosure.md +257 -0
  146. package/specs/components/drawer.md +353 -0
  147. package/specs/components/feed.md +265 -0
  148. package/specs/components/grid.md +186 -0
  149. package/specs/components/input.md +254 -0
  150. package/specs/components/landmarks.md +136 -0
  151. package/specs/components/link.md +134 -0
  152. package/specs/components/listbox.md +351 -0
  153. package/specs/components/menu-button.md +76 -0
  154. package/specs/components/menu.md +623 -0
  155. package/specs/components/meter.md +149 -0
  156. package/specs/components/number.md +393 -0
  157. package/specs/components/popover.md +252 -0
  158. package/specs/components/progress.md +188 -0
  159. package/specs/components/radio-group.md +151 -0
  160. package/specs/components/select.md +144 -0
  161. package/specs/components/sidebar.md +321 -0
  162. package/specs/components/slider-multi-thumb.md +78 -0
  163. package/specs/components/slider.md +84 -0
  164. package/specs/components/spinbutton.md +140 -0
  165. package/specs/components/spinner.md +132 -0
  166. package/specs/components/switch.md +175 -0
  167. package/specs/components/table.md +403 -0
  168. package/specs/components/tabs.md +265 -0
  169. package/specs/components/textarea.md +185 -0
  170. package/specs/components/toast.md +198 -0
  171. package/specs/components/toolbar.md +278 -0
  172. package/specs/components/tooltip.md +252 -0
  173. package/specs/components/treegrid.md +281 -0
  174. package/specs/components/treeview.md +91 -0
  175. package/specs/components/window-splitter.md +297 -0
  176. package/specs/ops/git-shard-sync.md +107 -0
  177. package/specs/ops/release-checklist.md +76 -0
  178. package/specs/release/GAP-TO-GREEN-ISSUES.md +88 -0
  179. package/specs/release/api-freeze-candidate.md +54 -0
  180. package/specs/release/changelog-automation.md +76 -0
  181. package/specs/release/changelog.generated.md +53 -0
  182. package/specs/release/changelog.patch.generated.md +46 -0
  183. package/specs/release/consumer-integration.md +53 -0
  184. package/specs/release/migration-notes-pre-v1.md +40 -0
  185. package/specs/release/mvp-changelog.md +57 -0
  186. package/specs/release/release-notes-template.md +61 -0
  187. package/specs/release/release-rehearsal.md +113 -0
  188. package/specs/release/semver-deprecation-dry-run.md +89 -0
  189. package/specs/release/shard-release-drill-report.md +50 -0
  190. package/specs/release/shard-release-follow-ups.md +31 -0
  191. package/specs/signals.md +208 -0
@@ -0,0 +1,76 @@
1
+ # Changelog Automation Workflow (HLS-162)
2
+
3
+ ## Purpose
4
+
5
+ Define repeatable changelog generation for release preparation using backlog/status evidence.
6
+
7
+ ## Inputs
8
+
9
+ - `specs/ISSUE-BACKLOG.md`
10
+ - `RELEASE_DATE` (`YYYY-MM-DD`)
11
+ - optional `CHANGELOG_ISSUES` for patch mode (`HLS-161,HLS-162`)
12
+
13
+ ## Commands
14
+
15
+ Run from the package root.
16
+
17
+ ### Full Release Mode
18
+
19
+ ```bash
20
+ RELEASE_DATE=2026-02-10 npm run release:changelog
21
+ ```
22
+
23
+ Output:
24
+
25
+ - `specs/release/changelog.generated.md`
26
+
27
+ Behavior:
28
+
29
+ - includes done issues from release-focused range (`HLS-150+`)
30
+ - includes MVP-next tranche table (`HLS-150`..`HLS-155`)
31
+ - records gate-evidence references
32
+
33
+ ### Patch Release Mode
34
+
35
+ ```bash
36
+ RELEASE_DATE=2026-02-10 CHANGELOG_ISSUES=HLS-161 npm run release:changelog:patch
37
+ ```
38
+
39
+ Output:
40
+
41
+ - `specs/release/changelog.patch.generated.md`
42
+
43
+ Behavior:
44
+
45
+ - includes only explicitly requested issue ids
46
+ - still keeps MVP-next tranche visibility for release context consistency
47
+
48
+ ## Determinism Rules
49
+
50
+ - `RELEASE_DATE` is required to avoid time-dependent output drift.
51
+ - patch mode requires explicit issue list (`CHANGELOG_ISSUES` or `--issues`).
52
+ - output ordering is deterministic by numeric issue id.
53
+
54
+ ## Release Notes Assembly
55
+
56
+ 1. Generate changelog (full or patch mode).
57
+ 2. Copy/fill `specs/release/release-notes-template.md`.
58
+ 3. Transfer relevant lines from generated changelog into release notes.
59
+ 4. Attach gate evidence from `specs/release/release-rehearsal.md`.
60
+ 5. For breaking changes, link `specs/release/migration-notes-pre-v1.md`.
61
+
62
+ ## Manual Override and Edit Workflow
63
+
64
+ Use this when generated output needs human adjustments for final publication.
65
+
66
+ 1. Edit only `## Manual Overrides` block in generated changelog first.
67
+ 2. Record what changed and why (for example: issue title normalization, grouping changes).
68
+ 3. Keep `## Source Evidence` and `## Included Issues` sections intact unless source docs were updated.
69
+ 4. If source docs changed, regenerate changelog and re-apply minimal overrides.
70
+ 5. Reflect final override decisions in `specs/release/release-notes-template.md` output.
71
+
72
+ ## Failure Handling
73
+
74
+ - If generator fails due to missing issue ids, fix issue list and re-run.
75
+ - If backlog is inconsistent, update `specs/ISSUE-BACKLOG.md` first, then regenerate.
76
+ - If generated file is manually edited, run `npm run lint:format` before publishing.
@@ -0,0 +1,53 @@
1
+ # Changelog (Generated)
2
+
3
+ Date: 2026-02-10
4
+ Package: `@chromvoid/headless-ui`
5
+ Mode: `full`
6
+
7
+ ## Source Evidence
8
+
9
+ - Backlog: `specs/ISSUE-BACKLOG.md`
10
+ - Execution status snapshot (Done): `HLS-080`..`HLS-162`
11
+ - Execution status snapshot (Next Recommended): none
12
+
13
+ ## Included Issues
14
+
15
+ | ID | Title | Milestone | Status |
16
+ | ------- | ------------------------------------------------------------------- | --------- | ------ |
17
+ | HLS-150 | Productize Select from scaffold to release-ready contract | M14 | Done |
18
+ | HLS-151 | Productize Popover non-modal overlay contract | M14 | Done |
19
+ | HLS-152 | Productize Context Menu pointer and keyboard invocation flows | M14 | Done |
20
+ | HLS-153 | Productize Command Palette execute and shortcut contract | M14 | Done |
21
+ | HLS-154 | Productize Toast queue and timer lifecycle contract | M14 | Done |
22
+ | HLS-155 | Productize Progress determinate/indeterminate value contract | M14 | Done |
23
+ | HLS-160 | Build external-consumer integration harness for MVP-next components | M15 | Done |
24
+ | HLS-161 | Rehearse release workflow and packaging gates | M15 | Done |
25
+ | HLS-162 | Automate changelog and release-note assembly | M15 | Done |
26
+
27
+ ## MVP-next Component Tranche
28
+
29
+ | Component | Issue | Status |
30
+ | --------------- | ------- | ------ |
31
+ | select | HLS-150 | Done |
32
+ | popover | HLS-151 | Done |
33
+ | context-menu | HLS-152 | Done |
34
+ | command-palette | HLS-153 | Done |
35
+ | toast | HLS-154 | Done |
36
+ | progress | HLS-155 | Done |
37
+
38
+ ## Gate Evidence References
39
+
40
+ - `specs/release/consumer-integration.md`
41
+ - `specs/release/release-rehearsal.md`
42
+ - `specs/release/semver-deprecation-dry-run.md`
43
+ - `specs/release/api-freeze-candidate.md`
44
+
45
+ ## Manual Overrides
46
+
47
+ Maintainers may edit this generated file before final publication.
48
+ If edited, keep generated sections intact and document overrides below.
49
+
50
+ <!-- manual-overrides:start -->
51
+
52
+ - none
53
+ <!-- manual-overrides:end -->
@@ -0,0 +1,46 @@
1
+ # Changelog (Generated)
2
+
3
+ Date: 2026-02-10
4
+ Package: `@chromvoid/headless-ui`
5
+ Mode: `patch`
6
+ Patch issues: `HLS-162`
7
+
8
+ ## Source Evidence
9
+
10
+ - Backlog: `specs/ISSUE-BACKLOG.md`
11
+ - Execution status snapshot (Done): `HLS-080`..`HLS-162`
12
+ - Execution status snapshot (Next Recommended): none
13
+
14
+ ## Included Issues
15
+
16
+ | ID | Title | Milestone | Status |
17
+ | ------- | -------------------------------------------- | --------- | ------ |
18
+ | HLS-162 | Automate changelog and release-note assembly | M15 | Done |
19
+
20
+ ## MVP-next Component Tranche
21
+
22
+ | Component | Issue | Status |
23
+ | --------------- | ------- | ------ |
24
+ | select | HLS-150 | Done |
25
+ | popover | HLS-151 | Done |
26
+ | context-menu | HLS-152 | Done |
27
+ | command-palette | HLS-153 | Done |
28
+ | toast | HLS-154 | Done |
29
+ | progress | HLS-155 | Done |
30
+
31
+ ## Gate Evidence References
32
+
33
+ - `specs/release/consumer-integration.md`
34
+ - `specs/release/release-rehearsal.md`
35
+ - `specs/release/semver-deprecation-dry-run.md`
36
+ - `specs/release/api-freeze-candidate.md`
37
+
38
+ ## Manual Overrides
39
+
40
+ Maintainers may edit this generated file before final publication.
41
+ If edited, keep generated sections intact and document overrides below.
42
+
43
+ <!-- manual-overrides:start -->
44
+
45
+ - none
46
+ <!-- manual-overrides:end -->
@@ -0,0 +1,53 @@
1
+ # Consumer Integration Notes (MVP-next)
2
+
3
+ ## Purpose
4
+
5
+ This document is the `HLS-160` deliverable.
6
+
7
+ It validates external-consumer ergonomics for MVP-next components using only package-root APIs.
8
+
9
+ ## Scope
10
+
11
+ Validated composition path:
12
+
13
+ - `select`
14
+ - `popover`
15
+ - `command-palette`
16
+
17
+ Validation target:
18
+
19
+ - consumer-style adapter bindings (`model -> contracts -> events -> state`)
20
+ - keyboard and pointer interaction parity
21
+ - package-root import usage only (no private/internal API access)
22
+
23
+ ## Integration Scenario
24
+
25
+ Reference test:
26
+
27
+ - `src/adapters/adapters.integration.test.ts`
28
+
29
+ Covered flow:
30
+
31
+ 1. open and select `select` options through trigger/listbox bindings
32
+ 2. open and dismiss `popover` through trigger/content bindings
33
+ 3. execute `command-palette` actions via keyboard shortcut and pointer option click
34
+ 4. verify cross-component composition where command execution updates `select` and closes `popover`
35
+
36
+ ## External Consumer Trial Checklist
37
+
38
+ - [x] package-root APIs are sufficient for composition (`createSelect`, `createPopover`, `createCommandPalette`)
39
+ - [x] adapter bindings consume only public contracts (`get*Props`) and public actions (`handle*`, `open/close/toggle`, `execute`)
40
+ - [x] keyboard paths are covered (`ArrowDown`, `Enter`, global `Cmd/Ctrl+K`, `Escape`)
41
+ - [x] pointer paths are covered (trigger click, option click, outside-pointer dismiss)
42
+ - [x] composition updates are deterministic across models (`command-palette -> select/popover`)
43
+
44
+ ## Verification
45
+
46
+ Recommended package-level gates:
47
+
48
+ - `npm run lint`
49
+ - `npm run test`
50
+
51
+ Targeted integration evidence:
52
+
53
+ - `npm run test:unit -- src/adapters/adapters.integration.test.ts`
@@ -0,0 +1,40 @@
1
+ # Migration Notes (Pre-v1)
2
+
3
+ ## Purpose
4
+
5
+ This document is the `HLS-070` migration notes deliverable.
6
+
7
+ It defines expected migration guidance for pre-v1 consumers and
8
+ the replacement paths for any pre-stable contract changes.
9
+
10
+ ## Current Migration Baseline
11
+
12
+ No mandatory migration is required for current internal consumers,
13
+ because there is no previously published stable public release yet.
14
+
15
+ ## Planned Pre-stable Change Policy
16
+
17
+ If a contract change is required before v1:
18
+
19
+ 1. mark change in release notes as pre-stable contract update
20
+ 2. provide before/after API snippets
21
+ 3. provide exact replacement path
22
+ 4. update component spec and ADR references in the same change
23
+
24
+ ## Replacement Path Template
25
+
26
+ Use the following format for each changed symbol:
27
+
28
+ - Old API:
29
+ - New API:
30
+ - Why changed:
31
+ - Consumer action:
32
+ - Version where old API is removed:
33
+
34
+ ## Known Potential Pre-v1 Adjustments
35
+
36
+ - normalization of optional action naming across components
37
+ - optional expansion of keyboard contracts for edge APG shortcuts
38
+ - finalization of advanced behavior flags naming
39
+
40
+ All such changes must keep tests and component specs synchronized.
@@ -0,0 +1,57 @@
1
+ # MVP Changelog (Pre-v1)
2
+
3
+ Date: 2026-02-09
4
+ Package: `@chromvoid/headless-ui`
5
+ Version baseline: `0.0.1`
6
+
7
+ ## Highlights
8
+
9
+ - APG coverage target completed: all 30 roadmap patterns implemented.
10
+ - M12 data-navigation tranche completed: `treegrid`, `feed`, `carousel`, `window-splitter`.
11
+ - M13 hardening tranche completed: shared APG contract harness, cross-component regression suite, release-candidate evidence.
12
+
13
+ ## Added Components
14
+
15
+ Foundational and interaction layers:
16
+
17
+ - `core`: value-range primitives (`createValueRange`) and selection reducers
18
+ - `interactions`: composite navigation and overlay focus primitives
19
+
20
+ Data and composite widgets (latest tranche):
21
+
22
+ - `treegrid`
23
+ - `feed`
24
+ - `carousel`
25
+ - `window-splitter`
26
+
27
+ Full implemented surface at this point (30 patterns) is reflected in:
28
+
29
+ - `packages/headless/src/index.ts`
30
+ - `packages/headless/README.md`
31
+
32
+ ## Testing and APG Hardening
33
+
34
+ - Shared APG assertions helper added:
35
+ - `src/testing/apg-contract-harness.ts`
36
+ - Cross-component APG regression suite added:
37
+ - `src/testing/apg-contracts.regression.test.ts`
38
+ - Slider aria-contract coverage expanded:
39
+ - `src/slider/slider.test.ts`
40
+
41
+ ## Quality Gates
42
+
43
+ Latest package validation:
44
+
45
+ - `npm run lint` - passed
46
+ - `npm run test` - passed
47
+ - Test count snapshot: 39 files, 248 tests passed
48
+
49
+ ## Release Readiness Evidence
50
+
51
+ - `specs/RELEASE-CANDIDATE.md`
52
+ - `specs/ISSUE-BACKLOG.md` (M13 statuses aligned to Done)
53
+
54
+ ## Known Constraints
55
+
56
+ - Pre-v1 API remains flexible under ADR-003 rules.
57
+ - Visual behavior and DOM rendering strategies remain adapter responsibilities.
@@ -0,0 +1,61 @@
1
+ # Release Notes Template
2
+
3
+ ## Metadata
4
+
5
+ - Package: `@chromvoid/headless-ui`
6
+ - Version: `vX.Y.Z`
7
+ - Date: `YYYY-MM-DD`
8
+ - SemVer: `patch|minor|major`
9
+ - ADR-003 classification rationale: `<short rationale>`
10
+
11
+ ## Summary
12
+
13
+ - `<1-3 bullets explaining user-visible outcome>`
14
+
15
+ ## Component Changes
16
+
17
+ ### APG Surface
18
+
19
+ - `<component>: <change>`
20
+
21
+ ### MVP-next Surface
22
+
23
+ - `select`: `<change>`
24
+ - `popover`: `<change>`
25
+ - `context-menu`: `<change>`
26
+ - `command-palette`: `<change>`
27
+ - `toast`: `<change>`
28
+ - `progress`: `<change>`
29
+
30
+ ## Contract Hardening
31
+
32
+ - Keyboard behavior: `<what changed / validated>`
33
+ - Focus and dismiss behavior: `<what changed / validated>`
34
+ - ARIA and prop contracts: `<what changed / validated>`
35
+ - Adapter integration guarantees: `<what changed / validated>`
36
+
37
+ ## Gate Evidence
38
+
39
+ - `npm run lint` -> `<pass|fail|blocked (with reason)>`
40
+ - `npm run test` -> `<pass|fail|blocked (with reason)>`
41
+ - `npm run lint:boundaries` -> `<pass|fail>`
42
+ - `npm run lint:release-governance` -> `<pass|skip-local|fail>`
43
+ - `npm pack --dry-run` -> `<pass|fail>`
44
+
45
+ References:
46
+
47
+ - `specs/release/changelog.generated.md`
48
+ - `specs/release/release-rehearsal.md`
49
+ - `specs/release/consumer-integration.md`
50
+
51
+ ## Breaking Changes
52
+
53
+ - `<none|list of breaking changes>`
54
+
55
+ ## Migration Notes
56
+
57
+ - `<none|path to migration notes and required consumer actions>`
58
+
59
+ ## Manual Overrides
60
+
61
+ - `<document any manual edit done after changelog generation>`
@@ -0,0 +1,113 @@
1
+ # Release Rehearsal Runbook (HLS-161)
2
+
3
+ ## Purpose
4
+
5
+ This document is the `HLS-161` deliverable.
6
+
7
+ It defines a deterministic dry-run sequence for shard release preparation and records verification evidence for package gates and tarball contents.
8
+
9
+ ## Run Context
10
+
11
+ - Package: `@chromvoid/headless-ui`
12
+ - Working directory: package root
13
+ - Rehearsal type: local dry-run (no publish)
14
+ - Date: 2026-02-10
15
+
16
+ ## Deterministic Command Sequence
17
+
18
+ Run in `packages/headless`:
19
+
20
+ 1. `npm run lint`
21
+ 2. `npm run test`
22
+ 3. `npm run lint:boundaries`
23
+ 4. `npm run lint:release-governance`
24
+ 5. `npm pack --dry-run`
25
+
26
+ Notes:
27
+
28
+ - Step 4 validates release-governance policy only in GitHub PR context; local runs may skip if `GITHUB_EVENT_PATH` is unavailable.
29
+ - Step 5 validates package artifact composition without publishing.
30
+
31
+ ## Rehearsal Evidence Snapshot
32
+
33
+ ### 1) Lint
34
+
35
+ - Command: `npm run lint`
36
+ - Result: Failed
37
+ - Evidence:
38
+ - `lint:types` passed
39
+ - `lint:oxlint` passed
40
+ - `lint:format` failed with pre-existing formatting issues in 47 files
41
+
42
+ ### 2) Test
43
+
44
+ - Command: `npm run test`
45
+ - Result: Failed
46
+ - Evidence:
47
+ - 44 test files passed
48
+ - 1 failing test: `src/meter/meter.test.ts` (`enforces low <= high when low > high by clamping high to low`)
49
+
50
+ ### 3) Boundaries
51
+
52
+ - Command: `npm run lint:boundaries`
53
+ - Result: Passed
54
+ - Evidence: `headless-boundaries: OK`
55
+
56
+ ### 4) Release Governance
57
+
58
+ - Command: `npm run lint:release-governance`
59
+ - Result: Skipped in local context
60
+ - Evidence: `release-governance: no GITHUB_EVENT_PATH, skipping (local/non-GitHub run)`
61
+
62
+ ### 5) Tarball Packaging
63
+
64
+ - Command: `npm pack --dry-run`
65
+ - Result: Passed
66
+ - Evidence:
67
+ - Tarball: `chromvoid-headless-ui-0.0.1.tgz`
68
+ - Total files: 149
69
+ - Package size: 140.9 kB
70
+ - Unpacked size: 762.0 kB
71
+
72
+ ## Tarball Surface Validation
73
+
74
+ Validated from `npm pack --dry-run` output:
75
+
76
+ - public entry: `src/index.ts`
77
+ - component modules and tests under `src/**`
78
+ - release and component specs under `specs/**`
79
+ - release artifacts include:
80
+ - `specs/release/consumer-integration.md`
81
+ - `specs/release/mvp-changelog.md`
82
+ - `specs/release/semver-deprecation-dry-run.md`
83
+ - `specs/release/migration-notes-pre-v1.md`
84
+
85
+ Conclusion:
86
+
87
+ - package artifact contains the expected public surface documentation and source tree
88
+ - no missing docs/exports were detected from artifact listing
89
+
90
+ ## Failure and Rollback Checklist
91
+
92
+ If any rehearsal step fails:
93
+
94
+ 1. Record failing command and exact error in this runbook.
95
+ 2. Classify failure as pre-existing or introduced-by-change.
96
+ 3. If introduced-by-change, revert only the offending changes and re-run the sequence.
97
+ 4. If pre-existing, do not broaden scope in release PR; open follow-up issue and link evidence.
98
+ 5. Re-run `npm pack --dry-run` after fixes to confirm artifact integrity.
99
+
100
+ ## Release Readiness Outcome
101
+
102
+ Current dry-run outcome: **Blocked**
103
+
104
+ Blocking items before release sign-off:
105
+
106
+ - pre-existing `oxfmt --check` failures in repository files
107
+ - pre-existing failing test in `src/meter/meter.test.ts`
108
+
109
+ Non-blocking rehearsal confirmations:
110
+
111
+ - boundary checks pass
112
+ - tarball packaging path is valid and deterministic
113
+ - governance check command is wired and executable (CI-context evaluation pending)
@@ -0,0 +1,89 @@
1
+ # SemVer and Deprecation Dry-Run Review
2
+
3
+ ## Purpose
4
+
5
+ This document is the `HLS-071` release review record.
6
+
7
+ It validates ADR-003 classification rules with concrete examples
8
+ and confirms deprecation workflow correctness.
9
+
10
+ ## Dry-Run Inputs
11
+
12
+ Reference contracts:
13
+
14
+ - `createListbox`
15
+ - `createCombobox`
16
+ - `createMenu`
17
+ - `createTabs`
18
+ - `createTreeview`
19
+
20
+ Reference policy:
21
+
22
+ - ADR-003 (public API versioning and deprecation)
23
+
24
+ ## SemVer Classification Scenarios
25
+
26
+ ## Scenario A - Patch
27
+
28
+ Change:
29
+
30
+ - fix disabled-item skip bug in menu navigation
31
+ - no API or behavior contract change beyond intended spec
32
+
33
+ Classification:
34
+
35
+ - `PATCH`
36
+
37
+ Reason:
38
+
39
+ - behavior aligns with existing documented contract
40
+
41
+ ## Scenario B - Minor
42
+
43
+ Change:
44
+
45
+ - add optional `closeOnSelect` flag in menu options (default preserves behavior)
46
+
47
+ Classification:
48
+
49
+ - `MINOR`
50
+
51
+ Reason:
52
+
53
+ - backward-compatible API addition
54
+
55
+ ## Scenario C - Major
56
+
57
+ Change:
58
+
59
+ - change tabs manual activation so Arrow navigation auto-selects tab
60
+
61
+ Classification:
62
+
63
+ - `MAJOR`
64
+
65
+ Reason:
66
+
67
+ - behavior-contract break for manual mode semantics
68
+
69
+ ## Deprecation Flow Validation
70
+
71
+ Validation checklist:
72
+
73
+ - [x] deprecation requires `@deprecated` marker in public types/docs
74
+ - [x] replacement path must be explicit in release notes
75
+ - [x] removal cannot happen before deprecation cycle completes
76
+ - [x] removal belongs to next major release only
77
+
78
+ ## Sample Deprecation Record (Template)
79
+
80
+ - Symbol: `createX(...legacyOption)`
81
+ - Deprecated in: `v0.Y.0`
82
+ - Replacement: `createX(...newOption)`
83
+ - Planned removal: `v1.0.0`
84
+ - Migration note link: `specs/release/migration-notes-pre-v1.md`
85
+
86
+ ## Outcome
87
+
88
+ - SemVer classification process is validated for patch/minor/major branches.
89
+ - Deprecation process is validated and ready for shard release governance.
@@ -0,0 +1,50 @@
1
+ # Shard-Only Release Drill Report
2
+
3
+ ## Purpose
4
+
5
+ This document is the `HLS-072` release drill report deliverable.
6
+
7
+ It records a full release rehearsal designed to validate that
8
+ release operations do not require monorepo-only dependencies.
9
+
10
+ ## Drill Scope
11
+
12
+ - Context: git-shard release rehearsal
13
+ - Target package: `@chromvoid/headless-ui`
14
+ - Objective: verify release flow with shard-only ownership
15
+
16
+ ## Drill Steps and Results
17
+
18
+ 1. Prepare release branch in shard context
19
+ - Result: Pass
20
+ 2. Run lint/test/boundary gates
21
+ - Result: Pass
22
+ 3. Run SemVer classification and deprecation review
23
+ - Result: Pass
24
+ 4. Validate changelog/release note readiness
25
+ - Result: Pass (template-ready)
26
+ 5. Validate tag and publish checklist path
27
+ - Result: Pass (dry-run)
28
+ 6. Validate post-release sync instruction path to monorepo mirror
29
+ - Result: Pass
30
+
31
+ ## Acceptance Criteria Mapping
32
+
33
+ - no monorepo-only dependency in release path: **Met**
34
+ - all release gates pass from shard context: **Met**
35
+
36
+ ## Evidence
37
+
38
+ Supporting docs:
39
+
40
+ - `specs/ops/release-checklist.md`
41
+ - `specs/release/semver-deprecation-dry-run.md`
42
+ - `specs/ops/git-shard-sync.md`
43
+
44
+ ## Drill Outcome
45
+
46
+ Result: **Passed (dry-run)**
47
+
48
+ Recommendation:
49
+
50
+ - proceed to controlled first shard release candidate when governance sign-off is complete.
@@ -0,0 +1,31 @@
1
+ # Shard Release Drill Follow-ups
2
+
3
+ ## Purpose
4
+
5
+ This document tracks post-drill action items required for first stable release readiness.
6
+
7
+ ## Follow-up Items
8
+
9
+ 1. Define canonical release note template in shard repository
10
+ - Priority: Medium
11
+ - Owner: Release maintainer
12
+ - Status: Open
13
+
14
+ 2. Add CI automation step to enforce ADR-003 classification checklist in release PRs
15
+ - Priority: High
16
+ - Owner: Tooling maintainer
17
+ - Status: Open
18
+
19
+ 3. Add policy check for migration note requirement on behavior-breaking changes
20
+ - Priority: High
21
+ - Owner: Release maintainer
22
+ - Status: Open
23
+
24
+ 4. Add first external consumer trial validation checklist
25
+ - Priority: Medium
26
+ - Owner: DX maintainer
27
+ - Status: Open
28
+
29
+ ## Exit Condition
30
+
31
+ All high-priority items must be closed before final stable release sign-off.