@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.
- package/LICENSE +21 -0
- package/README.md +99 -0
- package/dist/a11y-contracts/index.d.ts +23 -0
- package/dist/a11y-contracts/index.js +1 -0
- package/dist/accordion/index.d.ts +78 -0
- package/dist/accordion/index.js +264 -0
- package/dist/adapters/index.d.ts +9 -0
- package/dist/adapters/index.js +1 -0
- package/dist/alert/index.d.ts +33 -0
- package/dist/alert/index.js +54 -0
- package/dist/alert-dialog/index.d.ts +69 -0
- package/dist/alert-dialog/index.js +94 -0
- package/dist/badge/index.d.ts +48 -0
- package/dist/badge/index.js +89 -0
- package/dist/breadcrumb/index.d.ts +55 -0
- package/dist/breadcrumb/index.js +77 -0
- package/dist/button/index.d.ts +46 -0
- package/dist/button/index.js +86 -0
- package/dist/callout/index.d.ts +41 -0
- package/dist/callout/index.js +63 -0
- package/dist/card/index.d.ts +54 -0
- package/dist/card/index.js +103 -0
- package/dist/carousel/index.d.ts +98 -0
- package/dist/carousel/index.js +243 -0
- package/dist/checkbox/index.d.ts +50 -0
- package/dist/checkbox/index.js +87 -0
- package/dist/combobox/index.d.ts +114 -0
- package/dist/combobox/index.js +431 -0
- package/dist/command-palette/index.d.ts +73 -0
- package/dist/command-palette/index.js +147 -0
- package/dist/context-menu/index.d.ts +111 -0
- package/dist/context-menu/index.js +372 -0
- package/dist/copy-button/index.d.ts +62 -0
- package/dist/copy-button/index.js +183 -0
- package/dist/core/index.d.ts +20 -0
- package/dist/core/index.js +2 -0
- package/dist/core/selection.d.ts +5 -0
- package/dist/core/selection.js +39 -0
- package/dist/core/value-range.d.ts +49 -0
- package/dist/core/value-range.js +134 -0
- package/dist/date-picker/index.d.ts +210 -0
- package/dist/date-picker/index.js +895 -0
- package/dist/dialog/index.d.ts +95 -0
- package/dist/dialog/index.js +153 -0
- package/dist/disclosure/index.d.ts +52 -0
- package/dist/disclosure/index.js +159 -0
- package/dist/drawer/index.d.ts +30 -0
- package/dist/drawer/index.js +39 -0
- package/dist/feed/index.d.ts +77 -0
- package/dist/feed/index.js +260 -0
- package/dist/grid/index.d.ts +103 -0
- package/dist/grid/index.js +415 -0
- package/dist/index.d.ts +51 -0
- package/dist/index.js +51 -0
- package/dist/input/index.d.ts +86 -0
- package/dist/input/index.js +156 -0
- package/dist/interactions/composite-navigation.d.ts +69 -0
- package/dist/interactions/composite-navigation.js +169 -0
- package/dist/interactions/index.d.ts +15 -0
- package/dist/interactions/index.js +4 -0
- package/dist/interactions/keyboard-intents.d.ts +16 -0
- package/dist/interactions/keyboard-intents.js +33 -0
- package/dist/interactions/overlay-focus.d.ts +40 -0
- package/dist/interactions/overlay-focus.js +93 -0
- package/dist/interactions/typeahead.d.ts +20 -0
- package/dist/interactions/typeahead.js +41 -0
- package/dist/landmarks/index.d.ts +39 -0
- package/dist/landmarks/index.js +58 -0
- package/dist/link/index.d.ts +34 -0
- package/dist/link/index.js +39 -0
- package/dist/listbox/index.d.ts +92 -0
- package/dist/listbox/index.js +337 -0
- package/dist/menu/index.d.ts +132 -0
- package/dist/menu/index.js +541 -0
- package/dist/menu-button/index.d.ts +71 -0
- package/dist/menu-button/index.js +121 -0
- package/dist/meter/index.d.ts +45 -0
- package/dist/meter/index.js +106 -0
- package/dist/number/index.d.ts +113 -0
- package/dist/number/index.js +252 -0
- package/dist/popover/index.d.ts +70 -0
- package/dist/popover/index.js +126 -0
- package/dist/progress/index.d.ts +49 -0
- package/dist/progress/index.js +79 -0
- package/dist/radio-group/index.d.ts +61 -0
- package/dist/radio-group/index.js +150 -0
- package/dist/select/index.d.ts +92 -0
- package/dist/select/index.js +239 -0
- package/dist/sidebar/index.d.ts +74 -0
- package/dist/sidebar/index.js +186 -0
- package/dist/slider/index.d.ts +61 -0
- package/dist/slider/index.js +150 -0
- package/dist/slider-multi-thumb/index.d.ts +70 -0
- package/dist/slider-multi-thumb/index.js +222 -0
- package/dist/spinbutton/index.d.ts +75 -0
- package/dist/spinbutton/index.js +214 -0
- package/dist/spinner/index.d.ts +1 -0
- package/dist/spinner/index.js +1 -0
- package/dist/spinner/spinner.d.ts +23 -0
- package/dist/spinner/spinner.js +25 -0
- package/dist/switch/index.d.ts +40 -0
- package/dist/switch/index.js +61 -0
- package/dist/table/index.d.ts +117 -0
- package/dist/table/index.js +377 -0
- package/dist/tabs/index.d.ts +63 -0
- package/dist/tabs/index.js +174 -0
- package/dist/textarea/index.d.ts +68 -0
- package/dist/textarea/index.js +137 -0
- package/dist/toast/index.d.ts +67 -0
- package/dist/toast/index.js +145 -0
- package/dist/toolbar/index.d.ts +59 -0
- package/dist/toolbar/index.js +139 -0
- package/dist/tooltip/index.d.ts +52 -0
- package/dist/tooltip/index.js +169 -0
- package/dist/treegrid/index.d.ts +101 -0
- package/dist/treegrid/index.js +463 -0
- package/dist/treeview/index.d.ts +68 -0
- package/dist/treeview/index.js +370 -0
- package/dist/window-splitter/index.d.ts +65 -0
- package/dist/window-splitter/index.js +204 -0
- package/package.json +92 -0
- package/specs/ADR-001-headless-architecture.md +461 -0
- package/specs/ADR-002-repo-release-model.md +108 -0
- package/specs/ADR-003-public-api-versioning.md +136 -0
- package/specs/ADR-004-focus-selection-policy.md +117 -0
- package/specs/IMPLEMENTATION-ROADMAP.md +237 -0
- package/specs/ISSUE-BACKLOG.md +681 -0
- package/specs/RELEASE-CANDIDATE.md +30 -0
- package/specs/components/accordion.md +130 -0
- package/specs/components/alert-dialog.md +72 -0
- package/specs/components/alert.md +65 -0
- package/specs/components/badge.md +220 -0
- package/specs/components/breadcrumb.md +74 -0
- package/specs/components/button.md +115 -0
- package/specs/components/callout.md +195 -0
- package/specs/components/card.md +280 -0
- package/specs/components/carousel.md +140 -0
- package/specs/components/checkbox.md +172 -0
- package/specs/components/combobox.md +423 -0
- package/specs/components/command-palette.md +92 -0
- package/specs/components/context-menu.md +556 -0
- package/specs/components/copy-button.md +293 -0
- package/specs/components/date-picker.md +400 -0
- package/specs/components/dialog.md +298 -0
- package/specs/components/disclosure.md +257 -0
- package/specs/components/drawer.md +353 -0
- package/specs/components/feed.md +265 -0
- package/specs/components/grid.md +186 -0
- package/specs/components/input.md +254 -0
- package/specs/components/landmarks.md +136 -0
- package/specs/components/link.md +134 -0
- package/specs/components/listbox.md +351 -0
- package/specs/components/menu-button.md +76 -0
- package/specs/components/menu.md +623 -0
- package/specs/components/meter.md +149 -0
- package/specs/components/number.md +393 -0
- package/specs/components/popover.md +252 -0
- package/specs/components/progress.md +188 -0
- package/specs/components/radio-group.md +151 -0
- package/specs/components/select.md +144 -0
- package/specs/components/sidebar.md +321 -0
- package/specs/components/slider-multi-thumb.md +78 -0
- package/specs/components/slider.md +84 -0
- package/specs/components/spinbutton.md +140 -0
- package/specs/components/spinner.md +132 -0
- package/specs/components/switch.md +175 -0
- package/specs/components/table.md +403 -0
- package/specs/components/tabs.md +265 -0
- package/specs/components/textarea.md +185 -0
- package/specs/components/toast.md +198 -0
- package/specs/components/toolbar.md +278 -0
- package/specs/components/tooltip.md +252 -0
- package/specs/components/treegrid.md +281 -0
- package/specs/components/treeview.md +91 -0
- package/specs/components/window-splitter.md +297 -0
- package/specs/ops/git-shard-sync.md +107 -0
- package/specs/ops/release-checklist.md +76 -0
- package/specs/release/GAP-TO-GREEN-ISSUES.md +88 -0
- package/specs/release/api-freeze-candidate.md +54 -0
- package/specs/release/changelog-automation.md +76 -0
- package/specs/release/changelog.generated.md +53 -0
- package/specs/release/changelog.patch.generated.md +46 -0
- package/specs/release/consumer-integration.md +53 -0
- package/specs/release/migration-notes-pre-v1.md +40 -0
- package/specs/release/mvp-changelog.md +57 -0
- package/specs/release/release-notes-template.md +61 -0
- package/specs/release/release-rehearsal.md +113 -0
- package/specs/release/semver-deprecation-dry-run.md +89 -0
- package/specs/release/shard-release-drill-report.md +50 -0
- package/specs/release/shard-release-follow-ups.md +31 -0
- 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.
|