Internal release process

Copy Markdown View Source

Milestone F Phase 6 status

Version 1.0.0 is the first public Hex release target and establishes the initial stable API. Selecting the version does not reuse or upgrade the earlier 0.1.0 candidate evidence: the 1.0.0 archive, isolated consumer, exact-source reproducibility, review disposition, final-revision CI, merge, Hex publication, and public tag must be recorded independently. All six human accessibility scenarios remain pending and unassessed, but their gate is explicitly waived and non-mandatory for 1.0.0; this is not a conformance claim. All 15 prepublication mandatory gates and the final detached Hex dry run now pass. The release owner has separately authorized one exact execution of mix hex.publish --yes for the immutable package and documentation payload; that attempt failed at Hex's OTP challenge because its non-interactive process received EOF. Immediate registry queries confirmed that no public package or release was created. At that point, Hex publication required fresh retry authorization plus secure interactive OTP entry. The owner subsequently authorized one retry of the same immutable package-and-documentation action; Hex publication remains pending on secure interactive OTP entry. The public tag remains unauthorized.

All 38 Milestone F requirements have an implementation/evidence entry in release/records/milestone-f-acceptance.md. Fly release rel_76njzd0doog3yko3 serves exact revision 8654f6a4500ce210682d7cae7453553d878a714c with package and demo identity 1.0.0; service health, canonical smoke, and deployed Chromium checks pass. That successful operational deployment did not itself complete package qualification. The exact-source build, consumer, review disposition, CI, merge, and dry-run evidence now pass separately; Hex publication and the public tag remain pending. The manual-accessibility waiver changes no automated or isolated-consumer requirement.

The public-release Phase 1 preflight passed from synchronized main 42227ebb2892f0b98d0204786c616d0641497c3f. It records a non-material post-deployment source inventory, consistent package metadata, authenticated personal Hex identity pcharbon70, no existing public shadcn_ui package, and a passing exact pinned-toolchain/lock check. See release/public-release-preflight.json. This does not create an archive, select the final RELEASE_SHA, publish Hex, or complete any later mandatory gate.

Public-release Phase 5 Section 5.1 passes from detached RELEASE_SHA aa6a2d35474a51ea63248131631ace2b113b99a4. The final archive is byte-identical to the approved Phase 4 archive, the Hex dry run reviews the exact package and documentation metadata under authenticated owner pcharbon70, and a post-run query confirms the public package is still absent. See release/public-release-phase-5.json. No publish command is authorized by the dry-run evidence alone; the later explicit authorization is bound in that same record to one package-and-documentation attempt and does not include a public tag. That attempt is also recorded there as blocked at Hex's OTP challenge, with post-attempt registry absence evidence and no retry.

Historical Milestone F Phase 5 candidate status

The Phase 5 record proved its then-current committed-input build and archive consumer. Its 62-entry archive and now-unretrievable source revision do not qualify the current 63-entry archive. Current machine-readable status lives in release/candidate-status.json; the readable interpretation is release/records/release-candidate.md.

The candidate remains blocked, not qualified. Historical passing evidence is retained below, but the current blockers in the Phase 6 status above take precedence. No Hex publication, public tag, marketplace listing, platform certification, or official upstream affiliation is authorized or implied.

Milestone F Phase 3 documentation candidate

The repository describes an internal 0.1.0 candidate. This historical phase made the component, installation, compatibility, controller, Dstar, LiveView, migration, rollback, and provenance contracts reviewable; it does not prove the later CI, deployment, manual-review, public-tag, or Hex publication gates. See docs/integrations.md, docs/upgrading.md, and docs/provenance.md. At that execution point, Phase 4, Phase 5 integration, and Milestone F Phase 6 remained pending; the current Phase 6 status above supersedes that snapshot.

Milestone E Phase 6 candidate

Phase 6 consolidates all six Media/Motion APIs and ExDoc groups, complete gallery references, bounded-work fixtures and release audits. See docs/motion-media-guide.md and release/records/milestone-e-acceptance.md for current evidence and outstanding manual, CI, and current-candidate checks. The SpecLed runner problem recorded during E was repaired in Milestone G. Historical phase results below do not substitute for final candidate gates. Milestone F remains separate. No Hex publication is authorized.

Earlier candidate records and common release procedure

The remaining Pages and phase-local gate statements below are dated execution records. The accepted Fly.io decision and the current Phase 6 status above supersede their hosting and current-blocker language without rewriting history.

Milestones A through D produce an internal 0.1.0 candidate containing Foundation, native Forms, Disclosure, Navigation, Content Surfaces, Overlays, and Interactive Surfaces components. This process does not authorize or perform publication to Hex.

Candidate verification

Milestone E Phase 5 adds Media.ImageGallery, the reference at /components/media/image-gallery and substantial /examples/image-gallery. Run mix run scripts/render-image-gallery-fixture.exs --check, node scripts/record-gallery-origin.mjs --check and npm run browser:milestone-e-phase5. The archive requires ImageGallery and excludes its probe, observations, fixtures and demo; the expected payload is 61 allowlisted entries. Full images use existing native Dialog, explicit close and ordinary destinations. Optional origin CSS is deferred after the actual three-engine probe; no new authored CSS exception or runtime is distributed. Phase 6 milestone acceptance remains pending. See the Phase 5 execution record for direct checks and outstanding environment/manual/deployment limitations.

Milestone E Phase 4 adds Motion.ScrollIndicator and Media.CoverFlow, their real gallery references, source-local timelines and neutral/flat fallbacks. Run mix run scripts/render-scroll-media-fixture.exs --check and npm run browser:milestone-e-phase4 alongside earlier regressions. The actual archive audit requires both sources and verifies 60 allowlisted entries; demo observations, images, tests and tooling remain excluded.

Phase 4 direct evidence: package precommit 356 tests, demo precommit 56, 48 new browser checks and 337 earlier browser regressions; deterministic export and subpath smoke cover 614 variants, three code/style assets and three local media fixtures. ExDoc, fixture reproduction, CSS/provenance and archive checks pass. SpecLed still reports four existing nested-login-shell command failures and 143 warnings; direct equivalents pass using PowerShell's Elixir 1.20.3. No gate is disabled and no manual screen-reader or deployment claim is made. See the Phase 4 execution record for exact matrix, commands and limitations.

Milestone E Phase 3 adds Motion.Marquee and Motion.Stagger to the same candidate. Run mix run scripts/render-motion-fixture.exs --check and npm run browser:milestone-e-phase3 as well as earlier E and gallery regressions. The audit requires both defining modules in the actual archive, with the same exclusion of demo images, scripts, fixtures, observations and test harnesses. No package JavaScript, autoplay, infinite animation or visibility observer ships.

The Phase 3 execution record distinguishes direct passing checks from the four existing SpecLed nested-login-shell failures (Elixir 1.18.0 against the current OTP installation). CI gates remain enabled. No manual assistive-technology certification, successful Pages deployment or Hex publication is claimed here.

From a clean checkout at the repository root:

  1. Run mix deps.get --locked and npm ci.
  2. Run npm run assets:build and npm run assets:check.
  3. Run mix precommit, mix docs, and mix hex.build.
  4. Run mix run scripts/check-release-archive.exs to inspect the actual payload against package/0's explicit allowlist.
  5. Verify the archive contains public modules, compiled CSS, README, changelog, provenance, notices, and Mix metadata only.

The archive must reject .spec, demo sources and exports, scripts, workflows, tests, _build, deps, doc, node_modules, source maps, remote runtime assets, credentials, and mutable user data. The checked-in lockfiles remain repository verification inputs and are not package contents.

Gallery publication and rollback are independent of the package candidate and are documented in demo/DEPLOYMENT.md.

For a milestone rollback, revert the reviewed milestone commits and rerun the complete candidate verification. Never edit an archive or the deployed gallery artifact in place. The package and gallery may be rolled back independently because the demo is excluded from package contents.

Milestone D acceptance history

The following phase records describe their original scope. Phase 6 supersedes their historical statements that public overlay gallery delivery is pending.

Milestone D Phase 6 candidate evidence

The public catalogue now contains all seven native/supplemental components, their complete visible alternatives, a capability matrix, and four realistic local-only compositions. Settings confirmation uses native validation and method-dialog forms; rejection/pending examples are authored snapshots, not real requests. The exact observed feature record is dated 2026-08-26 and remains outside package contents. The normative manifest remains the capability policy.

Section 6.3 verification rebuilt ExDoc, deterministic package/gallery CSS and static export, checked all seven provenance mappings plus shared helpers and the full MIT notice, and audited the actual 51-entry release payload. No upstream revision changed, no upstream site assets were imported, and no runtime JavaScript or client-specific target was introduced. Final integration results are recorded in the Phase 6 plan with any environment limitations.

Final direct acceptance passed 320 package tests, 40 demo tests and 177 locked Milestone D browser checks, including demo-only axe-core audits. Integration corrected dark destructive contrast and narrow Drawer header wrapping. Static subpath smoke verifies 208 HTML variants and exactly three selected assets; stale Windows build assets no longer enter the export. SpecLed's local nested runner still fails on its existing OTP/rebar mismatch; CI remains a required gate, and this record does not claim an unconditional release approval.

Run node scripts/record-overlay-capabilities.mjs --check and npm run browser:milestone-d-gallery in addition to phases 1 through 5. The live suite tests the actual controller pages; static export and deployment smoke are separate gates. Merge and successful GitHub Pages deployment are still required to publish this candidate. No Hex publication is authorized by these checks.

Milestone D Phase 1 acceptance record

The candidate includes the authored native overlay capability manifest and schema as normative package data. Chromium 151.0.7922.34, Firefox 153.0, and WebKit 26.5 are the exact Playwright 1.62.1 evidence locks, not package targets. Acceptance runs the shared Dialog/Popover fixture in all three engines, including CSS-disabled, no-script, disabled-feature, DOM-replacement, nested-Popover, reduced-motion, and forced-color cases. The archive excludes Playwright, fixtures, reports, demo helpers, and every package JavaScript runtime.

Milestone D Phase 2 acceptance record

Dialog and Alert Dialog are public defining components backed by native modal dialog, declarative invoker commands, explicit exits, and deterministic relationships. Acceptance runs native focus containment, Escape, closedby policies, light dismiss, form method dialog, nested Popover, long/RTL content, CSS-disabled, no-script, replacement, Alert cancellation, pending, rejection, and caller-owned action snapshots in the exact locked three-engine matrix. The archive retains no modal runtime, consequence operation, browser harness, or test fixture.

Milestone D Phase 3 acceptance record

Drawer adds logical start/end/bottom presentation to native modal dialog, bounded keyboard-accessible body scrolling, safe-area spacing, concise fixed heading/exit/footer regions, and no gestures or scroll runtime. The three-engine suite renders its fixture from actual HEEx and verifies RTL/orientation, all sizes, zoom, themes, forced colors, reduced motion, focus, dismissal, native validation and forms, nested Popover, long translated content, touch activation, replacement, CSS-disabled/no-script behavior, disabled logical placement and transitions, and an ordinary fallback destination. Unsupported overscroll containment retains native scrolling; the locked Windows WebKit evidence uses that fallback. Run mix run scripts/render-drawer-fixture.exs --check and npm run browser:milestone-d-phase3 alongside the prior overlay suites.

The release contains Drawer source, compiled CSS and pinned provenance; it excludes fixture generation, Playwright, tests, gallery and JavaScript runtimes. Public overlay gallery delivery remains Phase 6 work.

Milestone D Phase 4 acceptance record

Popover and Dropdown Actions ship native nonmodal surfaces, declarative invokers, deterministic names and keyed ordinary links/buttons. Placement and ordered flips are optional CSS enhancements with a bounded centered fallback; no toggle listener, focus manager, menu runtime, application command or package JavaScript is shipped. Auto/manual behavior, native keyboard preferences, scroll-region Tab stops, focus return, nested Popover in Dialog, all logical edges, long text, zoom, RTL, themes, forced colors, replacement, touch, no-script, CSS-disabled and deliberately unavailable capability paths are browser-tested.

Run mix run scripts/render-popover-fixture.exs --check and npm run browser:milestone-d-phase4 with prior overlay suites. Native form tests submit to intercepted fixture URLs; they do not execute real application operations. The actual archive audit requires both new defining modules and excludes fixture generation, browser tooling and demo sources. Gallery pages remain scheduled for Phase 6.

Milestone D Phase 5 acceptance record

Tooltip and Hover Card provide supplemental CSS-first descriptions/previews, not interest invokers or interactive overlays. Their text-labelled native buttons/links, stable description IDs, escaping, protected globals and presentation-only preview guard are verified without adding runtime dependencies. Required instructions and complete destinations remain outside previews.

Run mix run scripts/render-supplemental-fixture.exs --check and npm run browser:milestone-d-phase5 with all prior overlay suites. Locked Chromium, Firefox and WebKit exercise hidden accessible descriptions, keyboard and pointer operation, native link activation/context menus, preview transitions, replacement, scoped logical placement, no-script/touch, unsupported CSS, themes, forced colors, reduced motion, zoom, long RTL text and clipped containers. The archive audit requires both public modules and their shared helper while excluding browser tooling, fixture generators, tests, demo and package JavaScript. The optional preview may be clipped; it never becomes a required operation. Public overlay gallery delivery and milestone acceptance remain Phase 6 work.

Milestone C acceptance record

The candidate must include the seven Milestone C public components and their compiled CSS/provenance mappings while excluding the gallery, browser fixtures, static export, and demo dependencies. Acceptance requires package and demo precommit, deterministic package and gallery assets, static-export comparison, Milestone C Chromium coverage, ExDoc, archive allowlist inspection, provenance and notice audits, SpecLed validation, and whitespace checks. Navigation must remain destination-based; Radio Panels must remain native radios rather than a tab contract; true tabs, menus, overlays, application behavior, and package JavaScript remain absent.

Milestone E Phase 1 acceptance record

This candidate adds internal media/motion contracts, normative capability data, scoped suppression, original demo fixtures and the actual capability reference. It does not export the six planned public components. The phase execution record contains the full commands, observations and outstanding checks.

Local verification on 2026-08-26 passed package precommit (330 tests), demo precommit (47), Phase 1 three-engine browser coverage (60), affected A–D gallery regressions (55), deterministic assets/export, subpath smoke, ExDoc and actual Hex archive inspection (55 entries). Playwright 1.62.1 locks Chromium 151.0.7922.34/revision 1234, Firefox 153.0/revision 1538 and WebKit 26.5/revision 2336; those are observations, not package targets. The static artifact contains 524 route variants, three style/script assets and three selected media assets. The Hex archive excludes demo media, observations and browser infrastructure.

SpecLed full checks still fail four nested commands because their login shell selects Elixir 1.18 compiled for OTP 26 while direct PowerShell uses Elixir 1.20.3 with OTP 29. Direct equivalent checks pass; the gate remains outstanding. SpecLed's broad shared-file reconciliation advice is not proof that all future component requirements are implemented. Windows denied symlink creation in the negative fixture test; Linux CI is required to execute that assertion. Neither CI success, manual screen-reader acceptance, publication nor deployment is claimed. No machine-wide toolchain settings or verification gates were changed.

Milestone E Phase 2 acceptance record

Carousel is now a public defining component: a named native scroller, complete ordered content and real item links, with no generated controls or runtime. Its Media reference and media-browser composition ship with local fixtures. Child focus takes precedence over snap, including oversized cards at zoom. The gallery grid also retains narrow-page bounds.

Local checks on 2026-08-26 passed 337 package tests, 50 demo tests, 39 Carousel browser cases, 60 foundation cases on final rerun and 55 A–D gallery regressions. Playwright 1.62.1 uses Chromium 151.0.7922.34, Firefox 153.0 and WebKit 26.5. Two initial Firefox foundation probe failures passed isolated and complete reruns without changing their evidence; the phase record retains this observation. Assets, generated fixture, deterministic 554-route export, subpath smoke, ExDoc and the actual 56-entry archive audit pass. Demo media and browser tools remain excluded from the package.

SpecLed still has four known nested-command toolchain failures (153 warnings); direct checks pass. Windows symlink assertions require Linux CI. No publication, manual assistive-technology acceptance or physical touch-swipe result is claimed. See the Phase 2 execution record.