Define what 'v1.0 server release' must include and its acceptance criteria #25

Closed
opened 2026-09-19 19:58:45 +00:00 by toasterson · 11 comments
Owner

Part of #24

Preserved snapshot support promise — 2026-09-22

Maintainer decision: selected historical ISO snapshots must support maintaining the historical system, not merely booting/installing and upgrading to current Hipster. Users must be able to install additional packages and repair installed packages while retaining that snapshot's original version constraints. Selected snapshots remain protected indefinitely under the agreed retention policy.

Consequences for design and acceptance:

  • Inventorying only packages already installed in the ISO root filesystem is insufficient. Reconstruct and preserve a usable historical package set, including compatible additional packages, relevant incorporation metadata, dependencies, manifests and payloads. Record provenance/ISO hashes and report unavailable historical content explicitly rather than claiming complete reconstruction.
  • Packages required for the supported snapshot must remain discoverable to the legacy OpenIndiana pkg5 solver, not just retrievable by an exact-FMRI HTTP request. Design a usable snapshot catalog/view if needed; endpoint/layout mechanics are delegated to engineering and must be validated against local pkg5.
  • The earlier newest-only incorporation proposal is subordinate to this support promise. Do not remove or hide metadata needed for historical maintenance unless the snapshot view preserves the required semantics and native tests prove it works.
  • Import exclusions conflicting with the protected historical set still fail preflight and require explicit KDL keep exceptions. Retirement/purge must preserve the full protected snapshot set and shared payload references. Main-catalog hiding must not make a supported snapshot unusable.
  • Acceptance: from selected historical ISO-installed clients (Hipster approximately 2020 onward), install a package absent from the original image and repair installed content without forcing a move to current package constraints. Also validate the supported update path separately. Use the real local OpenIndiana pkg5 implementation and retain evidence.

This settles the product-level snapshot promise. Reconstruction, snapshot catalog design and validation remain engineering work, not completed functionality.

Configurable retirement and KDL policy — 2026-09-22

Latest maintainer direction:

  • Retirement must be enable/disable configurable, and its timing must be configurable rather than hard-coded to three months. The maintainer subsequently set the default policy interval to 12 months, superseding the earlier three-month default. Both inactivity and post-hide grace intervals default to 12 months and remain configurable. Earlier three-month references below are historical and superseded.
  • The import policy file uses KDL, superseding earlier text/JSON alternatives. Regex exclusions and exact-FMRI keep exceptions remain the intended rules: import unmatched packages, explicit keeps override exclusions, invalid patterns or unresolved protected-dependency conflicts fail preflight. Provide explicit proposed exceptions for the operator to add to the KDL file.
  • Remaining design mechanics are delegated to engineering; do not repeatedly seek maintainer approval for schema spelling, parser choices, CLI spelling or ordinary implementation details. Preserve all agreed semantics.

Engineering defaults/constraints to carry into the design (defaults selected here under that delegation, not independently quoted maintainer decisions): retirement is opt-in/disabled by default; disabling pauses policy-driven retirement without purging content or automatically restoring hidden versions. Continue serving hidden exact-FMRI content. Keep access tracking separately durable. Manual purge remains an explicit operator action with retention, snapshot and dependency checks; enabling retirement must never enable automatic purge. Document configuration effects and validate durations/rules before any mutation.

Still require evidence rather than assumptions: actual local pkg5 behavior, snapshot dependency closure, safe catalog replacement, and historical-client compatibility. No implementation or runtime validation is claimed by this decision update.

V1 administration boundary — 2026-09-22

Maintainer decision: the public HTTP interface is read-only in v1. Imports, retirement/purge and repository administration are available through local commands only. Remote publication and OIDC/RBAC remain deferred.

Apply this boundary to actual registered routes and any web UI: do not expose repository-mutating or administrative operations publicly in v1. Read-only package serving/search remain available. ACME HTTP-01 challenge serving remains supported and is not a repository administration endpoint. Document the local operator/CI script workflow and validate that public HTTP cannot mutate repository state. This records required behavior, not a claim that current routes already enforce it.

Load testing scope correction — 2026-09-22

The maintainer rejected the proposed mandatory 24-hour pre-cutover soak. Sustained-load testing/observation can take place after cutover and is not a v1 release gate. The workload is predominantly file downloads at low concurrency; search is the main query-computation concern highlighted by the maintainer. Do not infer that ingestion/catalog maintenance requires no server computation.

Keep pre-release correctness and targeted functional checks for real OpenIndiana pkg5 clients, search, atomic batch imports, and continuous reads across stable-path catalog rename. OTel failure isolation remains a required behavior. Do not add a mandatory soak duration, synthetic concurrency target, or numeric performance threshold without a new decision. Current oirepo remains the qualitative operational baseline. This supersedes earlier proposed soak/load release gates; it does not authorize production cutover or claim tests have run.

Deployment and load clarification — 2026-09-22

Maintainer-provided target: oirepo6, a zone on the same existing host as oirepo, behind the same reverse proxy. Neither zone has explicit resource limits. This describes the intended deployment; no live host/resource inspection has yet been performed.

The intended eventual role is the main repository host. V1 qualification still uses the separate depot; this does not authorize production cutover. It must serve the existing client population comfortably, with performance comparable to the current service. Traffic is predominantly a few requests at a time, accumulating substantial volume over time, rather than large simultaneous bursts.

For #31/#5, use the current service as the comparative baseline and representative low-concurrency sustained traffic as the workload. Actual request-rate/concurrency distribution and resource consumption still need measurement; no numerical latency/RSS/duration budget has been agreed. Include service behavior during imports/catalog maintenance. Absence of zone caps is not an allocation of the shared host's resources; establish a safe test budget before load generation.

Maintainer decisions — 2026-09-22

  • V1 proves a separate depot importing the historical split OpenIndiana repositories. The maintainer will provide access; production cutover is a follow-up.
  • OpenIndiana pkg5 clients from approximately Hipster 2020 onward are mandatory. Select exact old/current ISO fixtures and prove real client operations; OmniOS validation is deferred to v1.2 and is not yet verified.
  • Preserve local OpenIndiana pkg5 semantics. Use the local OpenIndiana/pkg5 checkout as the compatibility authority rather than assuming Oracle Solaris equivalence.
  • pkg6 owns the migrated format; legacy files are retained. Reverting requires export or restore, not an assumed in-place pkg5 fallback.
  • Local imports suffice for v1. One completed multi-package .p5p per CI run is delivered, then CI notifies a script to import it. Entire batch becomes visible atomically. Identical archive retry is a successful no-op; an exact-FMRI content conflict rejects the entire batch.
  • Authenticated remote publishing, OIDC and publishing RBAC are deferred; no later target release was selected for them.
  • Repository retirement hides versions from catalogs/search but continues exact-FMRI manifest and payload service. Purge is a second, operator-triggered step with enforced checks. No automatic purge or S3 in v1.
  • V1 requires traces, metrics and structured logs via OTLP/HTTP; collector outages never block serving/imports. Bounded export queues drop oldest queued records on overflow and count drops. Durable access/retention records are independent.
  • Both reverse-proxy TLS and direct TLS are required. Direct TLS includes ACME HTTP-01 and DNS-01 for Cloudflare and Gandi, with unattended renewal. In proxy mode the proxy owns TLS/ACME and depot ACME is disabled.
  • Ship an OpenIndiana IPS package and SMF integration with configuration preservation.
  • Documentation: mdBook operator guide PLUS installed CLI man pages in illumos voice and format. Contributor architecture stays in the repository.

Still open: exact ISO matrix, performance/concurrency/RSS budgets (#31), deployment resources, detailed retirement edge cases, ADR capture and build-ticket slicing. Keep this decision ticket open until the remaining release acceptance criteria are settled.

Implementation/verification tickets: #38, #39, #40, #41, #42.

These decisions supersede conflicting earlier scope below. This update records maintainer decisions, not implementation or test completion.

Earlier brief and context

Question

What must be true before we tag pkg6depotd v1.0? Settle the release scope so every other decision on this map has a boundary.

Grill on:

  • Which clients must be served: legacy pkg(1) from OpenIndiana hipster and OmniOS? pkg6 itself? Which pkg5 depot API versions (/versions/0 advertised set) are the compatibility contract?
  • Which repositories: OpenIndiana hipster (size, publisher count), OmniOS core/extra? Is running the production OpenIndiana depot on pkg6depotd a v1 goal or a follow-up?
  • Feature gates: is authenticated publish mandatory for v1, or can v1 ship read-only plus publish behind a feature flag? Is RBAC required, or is "any valid token with ips:write may publish" enough for the first release? Is OpenTelemetry release-blocking?
  • Non-functional gates: load-test targets (p95 latency for catalog/manifest/file, memory ceiling on the production repo), supported platforms (illumos x86_64 required, Linux build only?), packaging (IPS package + SMF manifest?), documentation minimum.
  • What "done" means for each milestone ticket, so that /to-tickets can later slice the build.

Record the outcome as an ADR (docs/ai/decisions/004-...) and update the milestone description.

  • (none)
Part of #24 ## Preserved snapshot support promise — 2026-09-22 Maintainer decision: selected historical ISO snapshots must support maintaining the historical system, not merely booting/installing and upgrading to current Hipster. Users must be able to install additional packages and repair installed packages while retaining that snapshot's original version constraints. Selected snapshots remain protected indefinitely under the agreed retention policy. Consequences for design and acceptance: - Inventorying only packages already installed in the ISO root filesystem is insufficient. Reconstruct and preserve a usable historical package set, including compatible additional packages, relevant incorporation metadata, dependencies, manifests and payloads. Record provenance/ISO hashes and report unavailable historical content explicitly rather than claiming complete reconstruction. - Packages required for the supported snapshot must remain discoverable to the legacy OpenIndiana pkg5 solver, not just retrievable by an exact-FMRI HTTP request. Design a usable snapshot catalog/view if needed; endpoint/layout mechanics are delegated to engineering and must be validated against local pkg5. - The earlier newest-only incorporation proposal is subordinate to this support promise. Do not remove or hide metadata needed for historical maintenance unless the snapshot view preserves the required semantics and native tests prove it works. - Import exclusions conflicting with the protected historical set still fail preflight and require explicit KDL keep exceptions. Retirement/purge must preserve the full protected snapshot set and shared payload references. Main-catalog hiding must not make a supported snapshot unusable. - Acceptance: from selected historical ISO-installed clients (Hipster approximately 2020 onward), install a package absent from the original image and repair installed content without forcing a move to current package constraints. Also validate the supported update path separately. Use the real local OpenIndiana pkg5 implementation and retain evidence. This settles the product-level snapshot promise. Reconstruction, snapshot catalog design and validation remain engineering work, not completed functionality. ## Configurable retirement and KDL policy — 2026-09-22 Latest maintainer direction: - Retirement must be enable/disable configurable, and its timing must be configurable rather than hard-coded to three months. The maintainer subsequently set the default policy interval to 12 months, superseding the earlier three-month default. Both inactivity and post-hide grace intervals default to 12 months and remain configurable. Earlier three-month references below are historical and superseded. - The import policy file uses KDL, superseding earlier text/JSON alternatives. Regex exclusions and exact-FMRI keep exceptions remain the intended rules: import unmatched packages, explicit keeps override exclusions, invalid patterns or unresolved protected-dependency conflicts fail preflight. Provide explicit proposed exceptions for the operator to add to the KDL file. - Remaining design mechanics are delegated to engineering; do not repeatedly seek maintainer approval for schema spelling, parser choices, CLI spelling or ordinary implementation details. Preserve all agreed semantics. Engineering defaults/constraints to carry into the design (defaults selected here under that delegation, not independently quoted maintainer decisions): retirement is opt-in/disabled by default; disabling pauses policy-driven retirement without purging content or automatically restoring hidden versions. Continue serving hidden exact-FMRI content. Keep access tracking separately durable. Manual purge remains an explicit operator action with retention, snapshot and dependency checks; enabling retirement must never enable automatic purge. Document configuration effects and validate durations/rules before any mutation. Still require evidence rather than assumptions: actual local pkg5 behavior, snapshot dependency closure, safe catalog replacement, and historical-client compatibility. No implementation or runtime validation is claimed by this decision update. ## V1 administration boundary — 2026-09-22 Maintainer decision: the public HTTP interface is read-only in v1. Imports, retirement/purge and repository administration are available through local commands only. Remote publication and OIDC/RBAC remain deferred. Apply this boundary to actual registered routes and any web UI: do not expose repository-mutating or administrative operations publicly in v1. Read-only package serving/search remain available. ACME HTTP-01 challenge serving remains supported and is not a repository administration endpoint. Document the local operator/CI script workflow and validate that public HTTP cannot mutate repository state. This records required behavior, not a claim that current routes already enforce it. ## Load testing scope correction — 2026-09-22 The maintainer rejected the proposed mandatory 24-hour pre-cutover soak. Sustained-load testing/observation can take place after cutover and is not a v1 release gate. The workload is predominantly file downloads at low concurrency; search is the main query-computation concern highlighted by the maintainer. Do not infer that ingestion/catalog maintenance requires no server computation. Keep pre-release correctness and targeted functional checks for real OpenIndiana pkg5 clients, search, atomic batch imports, and continuous reads across stable-path catalog rename. OTel failure isolation remains a required behavior. Do not add a mandatory soak duration, synthetic concurrency target, or numeric performance threshold without a new decision. Current oirepo remains the qualitative operational baseline. This supersedes earlier proposed soak/load release gates; it does not authorize production cutover or claim tests have run. ## Deployment and load clarification — 2026-09-22 Maintainer-provided target: `oirepo6`, a zone on the same existing host as `oirepo`, behind the same reverse proxy. Neither zone has explicit resource limits. This describes the intended deployment; no live host/resource inspection has yet been performed. The intended eventual role is the main repository host. V1 qualification still uses the separate depot; this does not authorize production cutover. It must serve the existing client population comfortably, with performance comparable to the current service. Traffic is predominantly a few requests at a time, accumulating substantial volume over time, rather than large simultaneous bursts. For #31/#5, use the current service as the comparative baseline and representative low-concurrency sustained traffic as the workload. Actual request-rate/concurrency distribution and resource consumption still need measurement; no numerical latency/RSS/duration budget has been agreed. Include service behavior during imports/catalog maintenance. Absence of zone caps is not an allocation of the shared host's resources; establish a safe test budget before load generation. ## Maintainer decisions — 2026-09-22 - V1 proves a separate depot importing the historical split OpenIndiana repositories. The maintainer will provide access; production cutover is a follow-up. - OpenIndiana pkg5 clients from approximately Hipster 2020 onward are mandatory. Select exact old/current ISO fixtures and prove real client operations; OmniOS validation is deferred to v1.2 and is not yet verified. - Preserve local OpenIndiana pkg5 semantics. Use the local OpenIndiana/pkg5 checkout as the compatibility authority rather than assuming Oracle Solaris equivalence. - pkg6 owns the migrated format; legacy files are retained. Reverting requires export or restore, not an assumed in-place pkg5 fallback. - Local imports suffice for v1. One completed multi-package .p5p per CI run is delivered, then CI notifies a script to import it. Entire batch becomes visible atomically. Identical archive retry is a successful no-op; an exact-FMRI content conflict rejects the entire batch. - Authenticated remote publishing, OIDC and publishing RBAC are deferred; no later target release was selected for them. - Repository retirement hides versions from catalogs/search but continues exact-FMRI manifest and payload service. Purge is a second, operator-triggered step with enforced checks. No automatic purge or S3 in v1. - V1 requires traces, metrics and structured logs via OTLP/HTTP; collector outages never block serving/imports. Bounded export queues drop oldest queued records on overflow and count drops. Durable access/retention records are independent. - Both reverse-proxy TLS and direct TLS are required. Direct TLS includes ACME HTTP-01 and DNS-01 for Cloudflare and Gandi, with unattended renewal. In proxy mode the proxy owns TLS/ACME and depot ACME is disabled. - Ship an OpenIndiana IPS package and SMF integration with configuration preservation. - Documentation: mdBook operator guide PLUS installed CLI man pages in illumos voice and format. Contributor architecture stays in the repository. Still open: exact ISO matrix, performance/concurrency/RSS budgets (#31), deployment resources, detailed retirement edge cases, ADR capture and build-ticket slicing. Keep this decision ticket open until the remaining release acceptance criteria are settled. Implementation/verification tickets: #38, #39, #40, #41, #42. These decisions supersede conflicting earlier scope below. This update records maintainer decisions, not implementation or test completion. <details> <summary>Earlier brief and context</summary> ## Question What must be true before we tag pkg6depotd v1.0? Settle the release scope so every other decision on this map has a boundary. Grill on: - Which clients must be served: legacy `pkg(1)` from OpenIndiana hipster and OmniOS? `pkg6` itself? Which pkg5 depot API versions (`/versions/0` advertised set) are the compatibility contract? - Which repositories: OpenIndiana hipster (size, publisher count), OmniOS core/extra? Is running the *production* OpenIndiana depot on pkg6depotd a v1 goal or a follow-up? - Feature gates: is authenticated publish mandatory for v1, or can v1 ship read-only plus publish behind a feature flag? Is RBAC required, or is "any valid token with `ips:write` may publish" enough for the first release? Is OpenTelemetry release-blocking? - Non-functional gates: load-test targets (p95 latency for catalog/manifest/file, memory ceiling on the production repo), supported platforms (illumos x86_64 required, Linux build only?), packaging (IPS package + SMF manifest?), documentation minimum. - What "done" means for each milestone ticket, so that `/to-tickets` can later slice the build. Record the outcome as an ADR (`docs/ai/decisions/004-...`) and update the milestone description. ## Links - (none) </details>

Release-candidate packaging status (2026-09-23): v1.0.0-rc.2 is an immutable annotated tag (tag object 9e6dd39869307159a7877118d05bf40ee657478c, peeled commit ca42462105cb5b5c9c42145bd3ccf73502256d5e). The same semver tag workflow is used for alpha, beta, RC and stable releases. Exact-head PR CI run 8959 passed on Linux and OpenIndiana: each platform ran 407/407 tests successfully, with one documented opt-in network skip. The tag release pipeline is now running: https://code.aopc.cloud/OpenIndiana/ips/actions/runs/20.

Before tagging, a native OpenIndiana scratch build produced pkg6depotd-1.0.0-rc.2-illumos-x86_64.p5p, and current OpenIndiana pkg5 client smoke passed catalog refresh/list/info, pkgrecv manifests/payloads, scratch-image install/verify/uninstall and exact reimport no-op. Evidence and checksum are recorded in #42 and logs/oibldofgate/ips-rc2-smoke/. RC1's native package job had exposed a missing required updates field in catalog.attrs; RC2 fixes it and verifies the full package FMRI through the completed .p5p.

This is a release candidate, not v1 acceptance yet. The tag pipeline's disposable-VM package install/SMF/upgrade/uninstall result is pending. Historical Hipster ~2020 and protected snapshot maintenance acceptance in #42 remains open, as do the separate repository access and old-client guest prerequisites. No production oirepo6 cutover has been attempted.

Release-candidate packaging status (2026-09-23): `v1.0.0-rc.2` is an immutable annotated tag (tag object `9e6dd39869307159a7877118d05bf40ee657478c`, peeled commit `ca42462105cb5b5c9c42145bd3ccf73502256d5e`). The same semver tag workflow is used for alpha, beta, RC and stable releases. Exact-head PR CI run 8959 passed on Linux and OpenIndiana: each platform ran 407/407 tests successfully, with one documented opt-in network skip. The tag release pipeline is now running: https://code.aopc.cloud/OpenIndiana/ips/actions/runs/20. Before tagging, a native OpenIndiana scratch build produced `pkg6depotd-1.0.0-rc.2-illumos-x86_64.p5p`, and current OpenIndiana pkg5 client smoke passed catalog refresh/list/info, `pkgrecv` manifests/payloads, scratch-image install/verify/uninstall and exact reimport no-op. Evidence and checksum are recorded in #42 and `logs/oibldofgate/ips-rc2-smoke/`. RC1's native package job had exposed a missing required `updates` field in `catalog.attrs`; RC2 fixes it and verifies the full package FMRI through the completed `.p5p`. This is a release candidate, not v1 acceptance yet. The tag pipeline's disposable-VM package install/SMF/upgrade/uninstall result is pending. Historical Hipster ~2020 and protected snapshot maintenance acceptance in #42 remains open, as do the separate repository access and old-client guest prerequisites. No production `oirepo6` cutover has been attempted.

Update to the RC2 status above: tag run 8960 did not produce a deployable OpenIndiana release asset. Linux succeeded; OpenIndiana passed 407/407 release-profile tests and built the .p5p, then the live package test failed at pkg install because this package and the VM's existing developer/pkgtree both deliver usr/bin/pkgtree. Authoritative Solstice step-log evidence and the focused RC3 correction are recorded in #41. v1.0.0-rc.2 is immutable and will not be moved; the next candidate will be a new tag after exact-head CI. The prerelease remains incomplete/draft and this ticket stays open.

Update to the RC2 status above: tag run [8960](https://code.aopc.cloud/OpenIndiana/ips/actions/runs/20) did **not** produce a deployable OpenIndiana release asset. Linux succeeded; OpenIndiana passed 407/407 release-profile tests and built the `.p5p`, then the live package test failed at `pkg install` because this package and the VM's existing `developer/pkgtree` both deliver `usr/bin/pkgtree`. Authoritative Solstice step-log evidence and the focused RC3 correction are recorded in #41. `v1.0.0-rc.2` is immutable and will not be moved; the next candidate will be a new tag after exact-head CI. The prerelease remains incomplete/draft and this ticket stays open.

Correction to my earlier RC1 attribution: I recovered the missing authoritative Solstice step log for RC1 job 22752. The first pkg install failed on exactly the same /usr/bin/pkgtree collision as RC2, before the depot or pkg5 catalog was tested. The RC1 step log is preserved at logs/solstice/2026-09-23-rc1-job22752-package-test.log (SHA-256 ad36f0454f1b81db4f75455a2a1ebfa1377744c9f57f069ff0e37bc3a715a845). RC1 scratch testing separately exposed the missing pkg5-required updates field; RC2 fixed and validated that independent bug. It did not cause the tagged RC1 install failure. PR #46 now reflects this distinction. RC3 removes the conflicting ancillary file action from the server IPS package.

Correction to my earlier RC1 attribution: I recovered the missing authoritative Solstice step log for RC1 job 22752. The first `pkg install` failed on exactly the same `/usr/bin/pkgtree` collision as RC2, before the depot or pkg5 catalog was tested. The RC1 step log is preserved at `logs/solstice/2026-09-23-rc1-job22752-package-test.log` (SHA-256 `ad36f0454f1b81db4f75455a2a1ebfa1377744c9f57f069ff0e37bc3a715a845`). RC1 scratch testing separately exposed the missing pkg5-required `updates` field; RC2 fixed and validated that independent bug. It did **not** cause the tagged RC1 install failure. PR #46 now reflects this distinction. RC3 removes the conflicting ancillary file action from the server IPS package.

Release acceptance update (2026-09-23): the shared tag pipeline is in use for immutable v1.0.0-rc.1 through v1.0.0-rc.6 and is the same workflow for alpha, beta, RC and stable tags. RC1/RC2 failed live package installation because their IPS package conflicted with Hipster's existing developer/pkgtree; RC3 removed /usr/bin/pkgtree from the server IPS package and proved live install plus pkg verify. RC3, RC4 and RC5 then exposed successive test-harness gaps on the disposable VM: stat of the intentionally protected config as an unprivileged user, absent man/col readers, and echo | grep -q SIGPIPE under pipefail on a valid long manpage. Each was corrected in a new immutable tag, without moving older tags or weakening the package permissions. RC5 passed Linux, all 407 OpenIndiana release-profile tests, live install/verify and binary/account checks, and visibly rendered an installed page with NAME; the false assertion stopped before SMF/pkg5/upgrade/uninstall. Solstice logs for RC3–RC5 are retained with checksums in the illumos workspace.

RC6 tag v1.0.0-rc.6 at 6df21d2 is running release workflow 8968. The release artifact is not yet accepted as deployable: tagged live SMF, pkg5 client serving, upgrade, uninstall and published .p5p are still pending. Historical Hipster 2020 and protected-snapshot maintenance acceptance remains open in #42, as does production cutover. Historical sources will later be copied from NFS and imported locally into one final repository; source path/host access is deferred, and Solstice CI is the testing venue.

Release acceptance update (2026-09-23): the shared tag pipeline is in use for immutable `v1.0.0-rc.1` through `v1.0.0-rc.6` and is the same workflow for alpha, beta, RC and stable tags. RC1/RC2 failed live package installation because their IPS package conflicted with Hipster's existing `developer/pkgtree`; RC3 removed `/usr/bin/pkgtree` from the server IPS package and proved live install plus `pkg verify`. RC3, RC4 and RC5 then exposed successive *test-harness* gaps on the disposable VM: stat of the intentionally protected config as an unprivileged user, absent `man`/`col` readers, and `echo | grep -q` SIGPIPE under `pipefail` on a valid long manpage. Each was corrected in a new immutable tag, without moving older tags or weakening the package permissions. RC5 passed Linux, all 407 OpenIndiana release-profile tests, live install/verify and binary/account checks, and visibly rendered an installed page with `NAME`; the false assertion stopped before SMF/pkg5/upgrade/uninstall. Solstice logs for RC3–RC5 are retained with checksums in the illumos workspace. RC6 tag `v1.0.0-rc.6` at `6df21d2` is running release workflow 8968. The release artifact is **not yet accepted as deployable**: tagged live SMF, pkg5 client serving, upgrade, uninstall and published `.p5p` are still pending. Historical Hipster 2020 and protected-snapshot maintenance acceptance remains open in #42, as does production cutover. Historical sources will later be copied from NFS and imported locally into one final repository; source path/host access is deferred, and Solstice CI is the testing venue.

Release acceptance update: RC7 tag run 8970 passed Linux, 407 native release-profile tests, IPS installation/verification, packaged SMF config failure handling, and native pkg5 client smoke. Its live upgrade test hit a disposable-VM backup-BE clone failure in pkg5, before uninstall/asset upload. RC8 (3371770, tag run 8973) uses pkg5's documented --no-backup-be only in that live upgrade test; the installed package and normal operator BE policy are unchanged. Local release-script checks: 370 passed. Awaiting RC8 native upgrade/uninstall and release asset publication; no release acceptance is claimed yet. Historical 2020 client/ISO coverage remains open under #42 pending NFS source access.

Release acceptance update: RC7 tag run 8970 passed Linux, 407 native release-profile tests, IPS installation/verification, packaged SMF config failure handling, and native pkg5 client smoke. Its live upgrade test hit a disposable-VM backup-BE clone failure in pkg5, before uninstall/asset upload. RC8 (`3371770`, tag run 8973) uses pkg5's documented `--no-backup-be` only in that live upgrade test; the installed package and normal operator BE policy are unchanged. Local release-script checks: 370 passed. Awaiting RC8 native upgrade/uninstall and release asset publication; no release acceptance is claimed yet. Historical 2020 client/ISO coverage remains open under #42 pending NFS source access.

Release acceptance update: RC8 tag run 8973 passed Linux and 407 native tests, live package install/SMF, local pkg5 client smoke, and live upgrade with operator config preserved. It failed before uninstall because the throwaway VM lacked /var/pkg/lost+found and the harness exited under pipefail while collecting the salvage baseline. RC9 (ce82d70, tag run 8975) fixes that harness case and adds targeted checks (375 local release-script checks passed); native uninstall and asset publication remain pending. No release acceptance is claimed yet. Historical 2020 client/ISO coverage under #42 remains open until the agreed NFS sources are available.

Release acceptance update: RC8 tag run 8973 passed Linux and 407 native tests, live package install/SMF, local pkg5 client smoke, and live upgrade with operator config preserved. It failed before uninstall because the throwaway VM lacked `/var/pkg/lost+found` and the harness exited under `pipefail` while collecting the salvage baseline. RC9 (`ce82d70`, tag run 8975) fixes that harness case and adds targeted checks (375 local release-script checks passed); native uninstall and asset publication remain pending. No release acceptance is claimed yet. Historical 2020 client/ISO coverage under #42 remains open until the agreed NFS sources are available.

Release acceptance update: RC9 tag run 8975 passed Linux, all 407 native tests, live IPS install/verify, packaged SMF checks, native pkg5 client smoke, and live upgrade. Its uninstall reached pkg5's required disable_fmri action and failed because the disposable VM reported its master SMF restarter property group missing. The package's disable_fmri is retained so a normal uninstall cannot leave the daemon running. RC10 (f8c456f, tag run 8977) adds stage-specific SMF restarter checks and bounded diagnostics to the same full release pipeline; local release-script checks: 384 passed. Awaiting RC10's tagged native uninstall and asset publication before calling the package deployable. Historical 2020 client/ISO validation under #42 remains pending NFS access.

Release acceptance update: RC9 tag run 8975 passed Linux, all 407 native tests, live IPS install/verify, packaged SMF checks, native pkg5 client smoke, and live upgrade. Its uninstall reached pkg5's required `disable_fmri` action and failed because the disposable VM reported its master SMF restarter property group missing. The package's `disable_fmri` is retained so a normal uninstall cannot leave the daemon running. RC10 (`f8c456f`, tag run 8977) adds stage-specific SMF restarter checks and bounded diagnostics to the same full release pipeline; local release-script checks: 384 passed. Awaiting RC10's tagged native uninstall and asset publication before calling the package deployable. Historical 2020 client/ISO validation under #42 remains pending NFS access.

Release acceptance remains open. RC10 tag run 8977 passed Linux, 384 release-script checks, 407 native OpenIndiana tests, and .p5p construction, then failed its first live-image preflight before pkg install: the fresh Solstice VM lacked the master svc:/system/svc/restarter:default restarter property group. RC9 had already passed live install/verify, SMF checks, native pkg5 client smoke, and upgrade, but its uninstall actuator failed on the same missing master-restarter state. Keeping disable_fmri is necessary for safe uninstall. The native package test and release asset upload remain blocked by the disposable VM image, whose repair is deferred with the other infrastructure work. The code and diagnostics are on PR #46 at f8c456f; no deployable tagged IPS release or v1 acceptance is claimed. Historical Hipster 2020 client/ISO validation under #42 also remains pending NFS source access.

Release acceptance remains open. RC10 tag run 8977 passed Linux, 384 release-script checks, 407 native OpenIndiana tests, and `.p5p` construction, then failed its first live-image preflight before `pkg install`: the fresh Solstice VM lacked the master `svc:/system/svc/restarter:default` `restarter` property group. RC9 had already passed live install/verify, SMF checks, native pkg5 client smoke, and upgrade, but its uninstall actuator failed on the same missing master-restarter state. Keeping `disable_fmri` is necessary for safe uninstall. The native package test and release asset upload remain blocked by the disposable VM image, whose repair is deferred with the other infrastructure work. The code and diagnostics are on PR #46 at `f8c456f`; no deployable tagged IPS release or v1 acceptance is claimed. Historical Hipster 2020 client/ISO validation under #42 also remains pending NFS source access.

V1 acceptance update from PR #46 (a1d715b): the tagged RC10 source built a native OpenIndiana .p5p on oibuild, 155 focused Rust tests passed, and the new pre-tag pkg5 smoke passed twice with the native client against a scratch depot (catalog, manifest, payload, and alternate-image install/verify/uninstall). The new script and release-process instructions are committed on the PR branch; the RC10 tag remains immutable.

This does not close the deployable-package criterion. The Solstice live-image/SMF gate still stops before installation because the disposable VM's master restarter state is missing (job 22790). Live package install, service start, upgrade, and uninstall still need a passing disposable-VM run before release assets are published.

V1 acceptance update from PR #46 (`a1d715b`): the tagged RC10 source built a native OpenIndiana `.p5p` on `oibuild`, 155 focused Rust tests passed, and the new pre-tag pkg5 smoke passed twice with the native client against a scratch depot (catalog, manifest, payload, and alternate-image install/verify/uninstall). The new script and release-process instructions are committed on the PR branch; the RC10 tag remains immutable. This does not close the deployable-package criterion. The Solstice live-image/SMF gate still stops before installation because the disposable VM's master restarter state is missing (job 22790). Live package install, service start, upgrade, and uninstall still need a passing disposable-VM run before release assets are published.

RC11 is published as a prerelease with Linux and illumos assets: https://code.aopc.cloud/OpenIndiana/ips/releases/tag/v1.0.0-rc.11 . Linux Solstice release job passed; illumos Solstice built and passed its 407/407 release-profile tests but was marked failed after the last visible test step, and the final log does not show the failing step. The exact tagged source was built on oibuild, passed the full 407-test release-profile inventory/run and native pkg5 smoke, and its IPS package and tarball were published with checksums/provenance. All five published illumos assets were downloaded and byte-checked against the oibuild artifacts.

The public release body explicitly states the remaining gap: live-image IPS install/upgrade/uninstall and SMF lifecycle validation did not run in the oibuild fallback. This remains an acceptance gate for stable v1 unless the owner explicitly accepts the gap. PR #46 at dfbb618 adds ADR-011 and the temporary Linux-only tag pipeline with manual illumos assets; branch CI run 8985 passed both Linux and illumos jobs at that exact head (407/407 tests on each platform). Keep this issue open for the live-image gate and final release review.

RC11 is published as a prerelease with Linux and illumos assets: https://code.aopc.cloud/OpenIndiana/ips/releases/tag/v1.0.0-rc.11 . Linux Solstice release job passed; illumos Solstice built and passed its 407/407 release-profile tests but was marked failed after the last visible test step, and the final log does not show the failing step. The exact tagged source was built on oibuild, passed the full 407-test release-profile inventory/run and native pkg5 smoke, and its IPS package and tarball were published with checksums/provenance. All five published illumos assets were downloaded and byte-checked against the oibuild artifacts. The public release body explicitly states the remaining gap: live-image IPS install/upgrade/uninstall and SMF lifecycle validation did not run in the oibuild fallback. This remains an acceptance gate for stable v1 unless the owner explicitly accepts the gap. PR #46 at dfbb618 adds ADR-011 and the temporary Linux-only tag pipeline with manual illumos assets; branch CI run 8985 passed both Linux and illumos jobs at that exact head (407/407 tests on each platform). Keep this issue open for the live-image gate and final release review.
Author
Owner

Resolution

Grilled 2026-09-27; every point agreed by the maintainer and recorded as ADR-015 v1.0 Release Acceptance Criteria (docs/ai/decisions/015-v1-release-acceptance-criteria.md on PR #54).

  1. Live-image gate is the target depot oirepo6, not a disposable VM: tagged package installed and upgraded, pkg verify clean, packaged SMF service online, native pkg5 reads, and one verified reboot. Uninstall proven once on a scratch BE on oibldofgate. The Solstice live-image job stays non-blocking until solstice-ci#8 is fixed.
  2. Historical import is a capability gate, not a completion gate: one full Hipster archive imported end to end under the measured 4 GB swap limit with peak memory recorded, plus the legacy V3 sample. Full legacy import and proxy cutover are the first v1.0.x operations (#53).
  3. Client matrix: Hipster 2020.04, 2023.10 and current 2026; catalog, manifest, payload, install/verify/uninstall from each. Snapshot-maintenance proof gates v1.0 for 2020.04 only; the rest is v1.1 (#42).
  4. One pkg6repo import family before the tag: import archive (atomic) and import source plan|run|publish|status (staged). Ticket #55.
  5. status/0 for pkgrepo info is a v1.0 gate (#52).
  6. main carries the release: PR #54 supersedes #43 to #51; ADR-005/006/008 flip to Accepted there; v1.0.0 is tagged from main.

Everything already decided on 2026-09-22 (read-only public HTTP, local import only, retirement, telemetry mandatory, TLS both modes plus ACME, IPS/SMF, mdBook plus man pages, no soak or numeric budgets) is restated in one place in ADR-015. Glossary for the new terms is CONTEXT.md on the same PR.

RC13 is not v1.0: items 2 to 5 need at least one more candidate.

## Resolution Grilled 2026-09-27; every point agreed by the maintainer and recorded as **ADR-015 v1.0 Release Acceptance Criteria** (`docs/ai/decisions/015-v1-release-acceptance-criteria.md` on PR #54). 1. **Live-image gate** is the target depot `oirepo6`, not a disposable VM: tagged package installed and upgraded, `pkg verify` clean, packaged SMF service online, native pkg5 reads, and one verified reboot. Uninstall proven once on a scratch BE on oibldofgate. The Solstice live-image job stays non-blocking until solstice-ci#8 is fixed. 2. **Historical import is a capability gate, not a completion gate**: one full Hipster archive imported end to end under the measured 4 GB swap limit with peak memory recorded, plus the `legacy` V3 sample. Full `legacy` import and proxy cutover are the first v1.0.x operations (#53). 3. **Client matrix**: Hipster 2020.04, 2023.10 and current 2026; catalog, manifest, payload, install/verify/uninstall from each. Snapshot-maintenance proof gates v1.0 for 2020.04 only; the rest is v1.1 (#42). 4. **One `pkg6repo import` family before the tag**: `import archive` (atomic) and `import source plan|run|publish|status` (staged). Ticket #55. 5. **`status/0`** for `pkgrepo info` is a v1.0 gate (#52). 6. **`main` carries the release**: PR #54 supersedes #43 to #51; ADR-005/006/008 flip to Accepted there; `v1.0.0` is tagged from `main`. Everything already decided on 2026-09-22 (read-only public HTTP, local import only, retirement, telemetry mandatory, TLS both modes plus ACME, IPS/SMF, mdBook plus man pages, no soak or numeric budgets) is restated in one place in ADR-015. Glossary for the new terms is `CONTEXT.md` on the same PR. RC13 is not v1.0: items 2 to 5 need at least one more candidate.
Sign in to join this conversation.
No project
No assignees
2 participants
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Reference
OpenIndiana/ips#25
No description provided.