Wayfinder map: Release 1 (server only) #24

Open
opened 2026-09-19 19:58:43 +00:00 by toasterson · 8 comments
Owner

Destination

A tagged v1.0.0 pkg6depotd release on main, qualified on the separate target depot oirepo6: it imports the historical OpenIndiana repositories locally and serves OpenIndiana Hipster pkg5 clients from 2020.04 onward. In scope: atomic local .p5p import, staged import of large historical sources, two-stage retirement with protected snapshots, OTLP/HTTP telemetry, IPS/SMF packaging, both TLS modes plus ACME, mdBook plus illumos man pages. The exact gates are ADR-015. Production cutover, remote publication/OIDC/RBAC, automatic purge, S3 and OmniOS (v1.2) are not part of it.

Notes

  • Milestone: Release 1 (server only). Feature tickets there are the deliverables; this map holds the decisions. Decision tickets block the feature tickets they inform.
  • Read CLAUDE.md, CONTEXT.md (glossary), docs/agents/domain.md and the ADRs in docs/ai/decisions/ (001 to 015) before working a ticket. Until PR #54 merges, ADRs 004 to 015, CONTEXT.md and the operator book live on branch v1-main-merge. doc/pkg5_docs/ holds the pkg5 specifications; the local OpenIndiana pkg5 checkout is the compatibility authority, not Oracle Solaris.
  • Target depot: oirepo6, a zone next to oirepo on the same host behind the same reverse proxy, measured 4 GB zone.max-swap. RC13 is installed there on port 8080 via the packaged SMF service; the proxy still points at the old depot.
  • Standing preferences: errors use thiserror + miette; tests run under cargo nextest; illumos is the deployment target, Linux the fast CI gate; release candidates are immutable tags and every release body lists the gates run and NOT RUN.
  • docs/ai/plans/2026-04-09-publish-api-oidc.md is background for the deferred remote-publish work only.
  • Skills: /grill-with-docs for grilling tickets (terms into CONTEXT.md, decisions into ADRs), /research, /to-tickets, /tdd + /implement.
  • Claim a ticket by assigning yourself; resolve with a comment, close it, append a one-line gist under Decisions so far.

Tickets

  • #25 Define what 'v1.0 server release' must include and its acceptance criteria
  • #26 Decide the publish transaction model (closed: out of scope)
  • #27 Decide the RBAC model (closed: out of scope)
  • #28 Choose the OIDC provider and token flows (closed: out of scope)
  • #29 Decide telemetry scope for v1
  • #30 Decide the documentation format, location and minimum content
  • #31 Define the load-testing plan: comparative baseline against oirepo, safe budget on the shared host
  • #32 Research: pkg5 publication transactions
  • #33 Research: OIDC providers and token flows
  • #34 Research: OTLP exporter stack
  • #35 Research: rustls/aws-lc-sys on illumos
  • #36 Task: provision an OIDC test realm (closed: out of scope)
  • #38 V1: atomically ingest one multi-package p5p per CI run
  • #39 V1: explicit import filters and two-stage repository retirement
  • #40 V1: audit repository CLI semantics
  • #41 V1: IPS/SMF deployment with direct TLS, proxy mode and ACME
  • #42 V1: validate OpenIndiana Hipster clients from 2020 onward
  • #52 Follow-up: implement pkg5 status/0 for pkgrepo info
  • #53 V1: bounded resumable import of historical pkg5 repositories
  • #55 V1: unify pkg6repo import commands into import archive and import source

Decisions so far

  • Define what 'v1.0 server release' must include and its acceptance criteria: ADR-015. Live gate = oirepo6 install/upgrade/SMF/pkg5 reads + one reboot (disposable VM non-blocking); historical import is a capability gate (one full Hipster archive under 4 GB, legacy sample), completion and cutover are v1.0.x; client matrix Hipster 2020.04 / 2023.10 / current, snapshot maintenance for 2020.04 only; unified pkg6repo import archive|source before tag; status/0 is a gate; tag from main via PR #54.
  • Decide telemetry scope for v1: ADR-006. Traces, metrics and logs over OTLP/HTTP are mandatory; bounded drop-oldest queues, collector outages never block serving or imports; access records stay independent.
  • Decide the documentation format, location and minimum content: mdBook operator guide in docs/book/ plus installed illumos-style man pages in the IPS package; contributor architecture stays in the repo.
  • Maintainer decisions of 2026-09-22 (no ticket of their own; verbatim text in #38 to #42 and the archived map body above):
    • Public HTTP is read-only in v1; imports, retirement and administration are local commands only. Remote publish, OIDC and RBAC deferred. ADR-004.
    • Reads stay available through imports and catalog rebuilds; the switch is one rename(2) at a stable path. Whole-batch validation, identical re-import a no-op, exact-FMRI conflict rejects the batch. ADR-007, ADR-013 (flat V3 sources, 10,000-manifest / 64 MiB budget), ADR-014 (staged resumable import, one final switch).
    • Retirement hides superseded versions from catalogs and search but keeps exact manifest and payload service; purge is a separate operator step; policy is opt-in, KDL, both intervals default 12 months; no automatic purge, no S3. ADR-010.
    • Preserved snapshot promise: selected historical ISO snapshots must stay maintainable (install additional packages, repair) with their original constraints; protected indefinitely; solver-visible to legacy pkg5. ADR-010, #39, #42.
    • Both reverse-proxy TLS and direct TLS with ACME HTTP-01 and DNS-01 (Cloudflare, Gandi), unattended renewal. ADR-008.
    • One release pipeline for all tags, pkg6depotd as an IPS/SMF package with config preservation. ADR-005; illumos assets built by hand on oibuild while the Solstice illumos release job is suspended, ADR-011; package dependencies resolved against a baseline image, ADR-012.
    • Load testing: no 24-hour soak, no synthetic concurrency target, no numeric threshold; workload is low-concurrency file downloads, search is the query concern; current oirepo is the qualitative baseline. Feeds #31.
    • OpenIndiana pkg5 clients from about Hipster 2020 onward are mandatory; OmniOS is v1.2. The separate OpenSolaris legacy V3 source imports under opensolaris.org into its own pkg6 repository root and SMF depot instance. oi-sparc and unleashed also get separate roots and instances; solarm.org and desktop-2023 are excluded. Hipster history stays together, including its separate encumbered publisher.
  • Research: rustls/aws-lc-sys on illumos: aws-lc-rs ships universal pregenerated bindings, no bindgen needed; keep aws-lc, ring is a 4-line fallback.
  • Research: OIDC providers and token flows: Forgejo OAuth2 tokens are not validatable JWTs, but Forgejo Actions issues OIDC ID tokens; secretless CI publish is possible when remote publish returns.
  • Research: OTLP exporter stack: OTel 0.31 + tracing-opentelemetry 0.32, OTLP/HTTP http-proto via reqwest, no tonic; init after daemonize; both ring and aws-lc rustls providers linked with no install_default() (latent bug).
  • Research: pkg5 publication transactions: pkg5 is one transaction per FMRI with a locked catalog rewrite; only the catalog/1 contract is client-visible, so pkg6 may make multi-package atomic imports native.

Not yet specified

  • #31 detail: how the comparative measurement against oirepo is taken (request mix from real logs, duration, where the load generator runs) and the safe test budget on the shared host. Sharpens when #31 is grilled.
  • Snapshot catalog or view for protected snapshots so the 2020.04 solver sees the full set: engineering design, validated against local pkg5. Sharpens during #39/#42.
  • Venue and provisioning for the 2020.04 and 2023.10 ISO-installed test clients, and NFS access to the historical sources. Solstice only has Hipster 2026.
  • v1.0.x operations after the tag: full legacy import, proxy cutover with rollback, post-cutover sustained-load observation, BE reboot policy on oirepo6.

Out of scope

  • Remote publication, OIDC and RBAC: feature tickets #3, #18, #19 removed from the milestone; decision tickets #26, #27, #28 and task #36 closed. No target release chosen.
  • Client image operations (install/update, action task list, child/user images, facets, variants, mediators): Release 2, tickets #1, #11 to #16.
  • OCI-backed repositories (#10), SSH drop-in publishing (#17), new manifest format (#16): later releases.
  • OmniOS validation: v1.2. Automatic purge, S3 storage, numeric performance budgets, soak tests: not in v1.
## Destination A tagged **v1.0.0 pkg6depotd release** on `main`, qualified on the separate target depot `oirepo6`: it imports the historical OpenIndiana repositories locally and serves OpenIndiana Hipster pkg5 clients from 2020.04 onward. In scope: atomic local `.p5p` import, staged import of large historical sources, two-stage retirement with protected snapshots, OTLP/HTTP telemetry, IPS/SMF packaging, both TLS modes plus ACME, mdBook plus illumos man pages. The exact gates are **ADR-015**. Production cutover, remote publication/OIDC/RBAC, automatic purge, S3 and OmniOS (v1.2) are not part of it. ## Notes - Milestone: [Release 1 (server only)](https://code.aopc.cloud/OpenIndiana/ips/milestone/5). Feature tickets there are the deliverables; this map holds the decisions. Decision tickets block the feature tickets they inform. - Read `CLAUDE.md`, `CONTEXT.md` (glossary), `docs/agents/domain.md` and the ADRs in `docs/ai/decisions/` (001 to 015) before working a ticket. Until PR #54 merges, ADRs 004 to 015, `CONTEXT.md` and the operator book live on branch `v1-main-merge`. `doc/pkg5_docs/` holds the pkg5 specifications; the local OpenIndiana pkg5 checkout is the compatibility authority, not Oracle Solaris. - Target depot: `oirepo6`, a zone next to `oirepo` on the same host behind the same reverse proxy, measured 4 GB `zone.max-swap`. RC13 is installed there on port 8080 via the packaged SMF service; the proxy still points at the old depot. - Standing preferences: errors use thiserror + miette; tests run under `cargo nextest`; illumos is the deployment target, Linux the fast CI gate; release candidates are immutable tags and every release body lists the gates run and **NOT RUN**. - `docs/ai/plans/2026-04-09-publish-api-oidc.md` is background for the deferred remote-publish work only. - Skills: `/grill-with-docs` for grilling tickets (terms into `CONTEXT.md`, decisions into ADRs), `/research`, `/to-tickets`, `/tdd` + `/implement`. - Claim a ticket by assigning yourself; resolve with a comment, close it, append a one-line gist under *Decisions so far*. ## Tickets - [x] #25 Define what 'v1.0 server release' must include and its acceptance criteria - [x] #26 Decide the publish transaction model (closed: out of scope) - [x] #27 Decide the RBAC model (closed: out of scope) - [x] #28 Choose the OIDC provider and token flows (closed: out of scope) - [x] #29 Decide telemetry scope for v1 - [x] #30 Decide the documentation format, location and minimum content - [ ] #31 Define the load-testing plan: comparative baseline against oirepo, safe budget on the shared host - [x] #32 Research: pkg5 publication transactions - [x] #33 Research: OIDC providers and token flows - [x] #34 Research: OTLP exporter stack - [x] #35 Research: rustls/aws-lc-sys on illumos - [x] #36 Task: provision an OIDC test realm (closed: out of scope) - [ ] #38 V1: atomically ingest one multi-package p5p per CI run - [ ] #39 V1: explicit import filters and two-stage repository retirement - [ ] #40 V1: audit repository CLI semantics - [ ] #41 V1: IPS/SMF deployment with direct TLS, proxy mode and ACME - [ ] #42 V1: validate OpenIndiana Hipster clients from 2020 onward - [ ] #52 Follow-up: implement pkg5 status/0 for pkgrepo info - [ ] #53 V1: bounded resumable import of historical pkg5 repositories - [ ] #55 V1: unify pkg6repo import commands into `import archive` and `import source` ## Decisions so far - [Define what 'v1.0 server release' must include and its acceptance criteria](https://code.aopc.cloud/OpenIndiana/ips/issues/25): ADR-015. Live gate = oirepo6 install/upgrade/SMF/pkg5 reads + one reboot (disposable VM non-blocking); historical import is a capability gate (one full Hipster archive under 4 GB, legacy sample), completion and cutover are v1.0.x; client matrix Hipster 2020.04 / 2023.10 / current, snapshot maintenance for 2020.04 only; unified `pkg6repo import archive|source` before tag; `status/0` is a gate; tag from `main` via PR #54. - [Decide telemetry scope for v1](https://code.aopc.cloud/OpenIndiana/ips/issues/29): ADR-006. Traces, metrics and logs over OTLP/HTTP are mandatory; bounded drop-oldest queues, collector outages never block serving or imports; access records stay independent. - [Decide the documentation format, location and minimum content](https://code.aopc.cloud/OpenIndiana/ips/issues/30): mdBook operator guide in `docs/book/` plus installed illumos-style man pages in the IPS package; contributor architecture stays in the repo. - Maintainer decisions of 2026-09-22 (no ticket of their own; verbatim text in #38 to #42 and the archived map body above): - Public HTTP is read-only in v1; imports, retirement and administration are local commands only. Remote publish, OIDC and RBAC deferred. ADR-004. - Reads stay available through imports and catalog rebuilds; the switch is one `rename(2)` at a stable path. Whole-batch validation, identical re-import a no-op, exact-FMRI conflict rejects the batch. ADR-007, ADR-013 (flat V3 sources, 10,000-manifest / 64 MiB budget), ADR-014 (staged resumable import, one final switch). - Retirement hides superseded versions from catalogs and search but keeps exact manifest and payload service; purge is a separate operator step; policy is opt-in, KDL, both intervals default 12 months; no automatic purge, no S3. ADR-010. - Preserved snapshot promise: selected historical ISO snapshots must stay maintainable (install additional packages, repair) with their original constraints; protected indefinitely; solver-visible to legacy pkg5. ADR-010, #39, #42. - Both reverse-proxy TLS and direct TLS with ACME HTTP-01 and DNS-01 (Cloudflare, Gandi), unattended renewal. ADR-008. - One release pipeline for all tags, pkg6depotd as an IPS/SMF package with config preservation. ADR-005; illumos assets built by hand on oibuild while the Solstice illumos release job is suspended, ADR-011; package dependencies resolved against a baseline image, ADR-012. - Load testing: no 24-hour soak, no synthetic concurrency target, no numeric threshold; workload is low-concurrency file downloads, search is the query concern; current oirepo is the qualitative baseline. Feeds #31. - OpenIndiana pkg5 clients from about Hipster 2020 onward are mandatory; OmniOS is v1.2. The separate OpenSolaris `legacy` V3 source imports under `opensolaris.org` into its own pkg6 repository root and SMF depot instance. `oi-sparc` and `unleashed` also get separate roots and instances; `solarm.org` and `desktop-2023` are excluded. Hipster history stays together, including its separate encumbered publisher. - [Research: rustls/aws-lc-sys on illumos](https://code.aopc.cloud/OpenIndiana/ips/issues/35): aws-lc-rs ships universal pregenerated bindings, no bindgen needed; keep aws-lc, ring is a 4-line fallback. - [Research: OIDC providers and token flows](https://code.aopc.cloud/OpenIndiana/ips/issues/33): Forgejo OAuth2 tokens are not validatable JWTs, but Forgejo Actions issues OIDC ID tokens; secretless CI publish is possible when remote publish returns. - [Research: OTLP exporter stack](https://code.aopc.cloud/OpenIndiana/ips/issues/34): OTel 0.31 + tracing-opentelemetry 0.32, OTLP/HTTP http-proto via reqwest, no tonic; init after daemonize; both ring and aws-lc rustls providers linked with no `install_default()` (latent bug). - [Research: pkg5 publication transactions](https://code.aopc.cloud/OpenIndiana/ips/issues/32): pkg5 is one transaction per FMRI with a locked catalog rewrite; only the catalog/1 contract is client-visible, so pkg6 may make multi-package atomic imports native. ## Not yet specified - #31 detail: how the comparative measurement against `oirepo` is taken (request mix from real logs, duration, where the load generator runs) and the safe test budget on the shared host. Sharpens when #31 is grilled. - Snapshot catalog or view for protected snapshots so the 2020.04 solver sees the full set: engineering design, validated against local pkg5. Sharpens during #39/#42. - Venue and provisioning for the 2020.04 and 2023.10 ISO-installed test clients, and NFS access to the historical sources. Solstice only has Hipster 2026. - v1.0.x operations after the tag: full `legacy` import, proxy cutover with rollback, post-cutover sustained-load observation, BE reboot policy on oirepo6. ## Out of scope - Remote publication, OIDC and RBAC: feature tickets #3, #18, #19 removed from the milestone; decision tickets #26, #27, #28 and task #36 closed. No target release chosen. - Client image operations (install/update, action task list, child/user images, facets, variants, mediators): Release 2, tickets #1, #11 to #16. - OCI-backed repositories (#10), SSH drop-in publishing (#17), new manifest format (#16): later releases. - OmniOS validation: v1.2. Automatic purge, S3 storage, numeric performance budgets, soak tests: not in v1.
Author
Owner

oirepo6 pre-cutover evidence (2026-09-26): live inspection found a 4 GB zone.max-swap limit. This corrects the earlier unverified "no explicit resource limits" assumption in the map. The new packaged depot is running against an isolated clone; the old depot and live repository remain in place, with no reverse-proxy cutover.

From the local OpenIndiana pkg5 client on oibldofgate, the clone endpoint now passes catalog listing for entire and text/less. An exact pkgrecv of text/less@679,5.11-2025.0.0.0:20250704T104633Z initially found seven missing payloads. Those seven blobs were restored only to the clone from the Hipster hipster.old7 source, after which pkgrecv succeeded. This is one end-to-end package retrieval, not proof that the live repository or all historical packages are complete. Native workspace release tests passed 420/420 (one skipped) for the untagged RC12 candidate; no tagged replacement or production switch is claimed.

The NFS export also contains a distinct OpenSolaris legacy flat V3 repository with publisher opensolaris.org. It is not one of the OpenIndiana Hipster archives. Do not count its contents as Hipster source coverage. The exact migration scope for that separate publisher is being clarified.

oirepo6 pre-cutover evidence (2026-09-26): live inspection found a 4 GB `zone.max-swap` limit. This corrects the earlier unverified "no explicit resource limits" assumption in the map. The new packaged depot is running against an isolated clone; the old depot and live repository remain in place, with no reverse-proxy cutover. From the local OpenIndiana pkg5 client on oibldofgate, the clone endpoint now passes catalog listing for `entire` and `text/less`. An exact `pkgrecv` of `text/less@679,5.11-2025.0.0.0:20250704T104633Z` initially found seven missing payloads. Those seven blobs were restored **only to the clone** from the Hipster `hipster.old7` source, after which `pkgrecv` succeeded. This is one end-to-end package retrieval, not proof that the live repository or all historical packages are complete. Native workspace release tests passed 420/420 (one skipped) for the untagged RC12 candidate; no tagged replacement or production switch is claimed. The NFS export also contains a distinct OpenSolaris `legacy` flat V3 repository with publisher `opensolaris.org`. It is not one of the OpenIndiana Hipster archives. Do not count its contents as Hipster source coverage. The exact migration scope for that separate publisher is being clarified.
Author
Owner

RC12 is tagged at v1.0.0-rc.12, commit 690be9016d039b75dafe299597818b2ccb39b70e. The common release workflow was triggered by that tag; its result and tagged illumos asset upload are still pending.

Pre-tag evidence on oibuild: release build passed with -j2; release-script self-tests 543/543; release-profile nextest 438 passed, one documented opt-in network test skipped; IPS package creation and installation dry run against the pinned oldest supported image passed; the unprivileged native pkg5 smoke passed. The exact source candidate package was installed only in the isolated oirepo6 test service. The old live service remained online. On oibldofgate, native pkg5 pkgrecv retrieved text/less and all seven payloads from that service.

The separate OpenSolaris legacy V3 source stays under opensolaris.org. A real one-package V3 sample was imported with byte-identical manifest and three payloads. A fresh test repository then served that sample alongside a Hipster openindiana.org package; the native pkg5 client listed both publishers and retrieved the legacy sample. The 2,108,239-manifest full-source import is not complete. The existing serving repository still needs a planned adoption/cutover; direct import refused it with ips::generation::adoption_required before mutation. Track the bounded, resumable importer and full-source validation in #53; RC12 does not claim to finish that migration.

RC12 is tagged at [`v1.0.0-rc.12`](https://code.aopc.cloud/OpenIndiana/ips/src/tag/v1.0.0-rc.12), commit `690be9016d039b75dafe299597818b2ccb39b70e`. The [common release workflow](https://code.aopc.cloud/OpenIndiana/ips/actions/runs/42) was triggered by that tag; its result and tagged illumos asset upload are still pending. Pre-tag evidence on oibuild: release build passed with `-j2`; release-script self-tests 543/543; release-profile nextest 438 passed, one documented opt-in network test skipped; IPS package creation and installation dry run against the pinned oldest supported image passed; the unprivileged native pkg5 smoke passed. The exact source candidate package was installed only in the isolated oirepo6 test service. The old live service remained online. On oibldofgate, native pkg5 `pkgrecv` retrieved `text/less` and all seven payloads from that service. The separate OpenSolaris `legacy` V3 source stays under `opensolaris.org`. A real one-package V3 sample was imported with byte-identical manifest and three payloads. A fresh test repository then served that sample alongside a Hipster `openindiana.org` package; the native pkg5 client listed both publishers and retrieved the legacy sample. The 2,108,239-manifest full-source import is **not** complete. The existing serving repository still needs a planned adoption/cutover; direct import refused it with `ips::generation::adoption_required` before mutation. Track the bounded, resumable importer and full-source validation in #53; RC12 does not claim to finish that migration.
Author
Owner

The RC12 release workflow passed, and v1.0.0-rc.12 is now a published prerelease with all eight expected Linux and illumos assets. The published illumos checksum file matches the verified oibuild artifacts. The release body records the native gate evidence and explicitly marks the disposable-VM lifecycle test NOT RUN.

The exact tagged .p5p (SHA-256 88d2d534d7988e50ba66f63ae51453f63062a85b95b128fb037cc3d91f2a74fa) passed a real install dry run on oirepo6 with the package absent, then installed and passed pkg verify. Its tagged depot binary also passed ldd -r and config-test; the packaged isolated test service is online, alongside the unchanged live service. This verifies the tagged asset rather than assuming the earlier same-FMRI candidate had identical payloads. The full historical legacy import and live repository cutover remain tracked in #53.

The [RC12 release workflow](https://code.aopc.cloud/OpenIndiana/ips/actions/runs/42) passed, and [`v1.0.0-rc.12`](https://code.aopc.cloud/OpenIndiana/ips/releases/tag/v1.0.0-rc.12) is now a published prerelease with all eight expected Linux and illumos assets. The published illumos checksum file matches the verified oibuild artifacts. The release body records the native gate evidence and explicitly marks the disposable-VM lifecycle test **NOT RUN**. The exact tagged `.p5p` (SHA-256 `88d2d534d7988e50ba66f63ae51453f63062a85b95b128fb037cc3d91f2a74fa`) passed a real install dry run on oirepo6 with the package absent, then installed and passed `pkg verify`. Its tagged depot binary also passed `ldd -r` and `config-test`; the packaged isolated test service is online, alongside the unchanged live service. This verifies the tagged asset rather than assuming the earlier same-FMRI candidate had identical payloads. The full historical `legacy` import and live repository cutover remain tracked in #53.
Author
Owner

Published v1.0.0-rc.13 as a prerelease from exact commit f6691a0. Solstice release run 43 passed for Linux. The illumos assets were built from the same annotated tag on oibuild: 543 release-script tests passed; 457 native release-profile workspace tests passed (one opt-in test skipped); baseline IPS package build/dry-run and native pkg5 smoke passed. The release has all eight expected assets, and its published checksum file and .p5p match the verified local files. Official .p5p SHA-256: df3f6430a67c3fe6323498de05c04103a64db7459cc16d0c250464b043fbea46.

The tagged archive passed the read-only target gate on oirepo6: pkg install -nv --no-backup-be --deny-new-be -g planned only an RC12-to-RC13 package update, with neither a new nor backup BE; all three tagged binaries passed ldd -r, and pkg6depotd config-test accepted the isolated service KDL. The installed package remains RC12; both existing 8080 and isolated 8083 services remained HTTP 200. Live-image install/upgrade/uninstall and SMF lifecycle testing was NOT RUN, stated in the release notes.

#53 now has a bounded, resumable whole-source import-historical path. It preserves legacy as a distinct opensolaris.org publisher and makes staged batches visible together at one final generation switch. A real one-package V3 sample with three payloads passed native pkg5 listing/retrieval. The full 2,108,239-manifest NFS import, 4 GB memory measurement, 2020 snapshot package reconstruction, and historical-client install/repair acceptance remain open. Keep #24/#42/#53 open for those gates; no full historical import or live repository cutover occurred in this release.

Published [`v1.0.0-rc.13`](https://code.aopc.cloud/OpenIndiana/ips/releases/tag/v1.0.0-rc.13) as a prerelease from exact commit [`f6691a0`](https://code.aopc.cloud/OpenIndiana/ips/commit/f6691a0349662c294a6b8a2d19d6739ec663c988). [Solstice release run 43](https://code.aopc.cloud/OpenIndiana/ips/actions/runs/43) passed for Linux. The illumos assets were built from the same annotated tag on `oibuild`: 543 release-script tests passed; 457 native release-profile workspace tests passed (one opt-in test skipped); baseline IPS package build/dry-run and native pkg5 smoke passed. The release has all eight expected assets, and its published checksum file and `.p5p` match the verified local files. Official `.p5p` SHA-256: `df3f6430a67c3fe6323498de05c04103a64db7459cc16d0c250464b043fbea46`. The tagged archive passed the **read-only** target gate on oirepo6: `pkg install -nv --no-backup-be --deny-new-be -g` planned only an RC12-to-RC13 package update, with neither a new nor backup BE; all three tagged binaries passed `ldd -r`, and `pkg6depotd config-test` accepted the isolated service KDL. The installed package remains RC12; both existing 8080 and isolated 8083 services remained HTTP 200. Live-image install/upgrade/uninstall and SMF lifecycle testing was **NOT RUN**, stated in the release notes. #53 now has a bounded, resumable whole-source `import-historical` path. It preserves `legacy` as a distinct `opensolaris.org` publisher and makes staged batches visible together at one final generation switch. A real one-package V3 sample with three payloads passed native pkg5 listing/retrieval. The full 2,108,239-manifest NFS import, 4 GB memory measurement, 2020 snapshot package reconstruction, and historical-client install/repair acceptance remain open. Keep #24/#42/#53 open for those gates; no full historical import or live repository cutover occurred in this release.
Author
Owner

Deployment update: RC13 is installed and serving on oirepo6's local port 8080 through the packaged SMF service, replacing its running Rust 0.5 instance. pkg verify, health/catalog HTTP checks, and native pkg5 pkg list from oibldofgate passed. The public reverse proxy still points to the old repository server and was not changed. Full historical import, final repository switch, and boot-environment persistence remain open; the old 0.5 service is disabled but retained for rollback.

Deployment update: RC13 is installed and serving on oirepo6's local port 8080 through the packaged SMF service, replacing its running Rust 0.5 instance. `pkg verify`, health/catalog HTTP checks, and native pkg5 `pkg list` from oibldofgate passed. The public reverse proxy still points to the old repository server and was not changed. Full historical import, final repository switch, and boot-environment persistence remain open; the old 0.5 service is disabled but retained for rollback.
Author
Owner

Archived map body before the 2026-09-27 normalization (the prepended 2026-09-22 decision sections are now gists under Decisions so far, pointing at the ADRs and the tickets that carry them verbatim):

previous body

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.

Destination

A tagged v1.0 pkg6depotd release demonstrated on a separate depot importing historical OpenIndiana repositories, serving OpenIndiana Hipster pkg5 clients from approximately 2020 onward. Local atomic .p5p ingestion, two-stage retirement, OTLP/HTTP telemetry, IPS/SMF packaging, both TLS deployment modes and ACME, and mdBook plus illumos-style man pages are in scope. Production cutover, authenticated remote publication/OIDC/RBAC, automatic purge and S3 are deferred. OmniOS validation targets v1.2.

Notes

  • Milestone: Release 1 (server only). The feature tickets in that milestone (Server Publish, OIDC, RBAC, docs, telemetry, load testing, CI) are the deliverables; this map holds the decisions they wait on. Each decision ticket blocks the feature ticket it informs, so the milestone view shows what is takeable.
  • Read CLAUDE.md, docs/agents/domain.md and the ADRs in docs/ai/decisions/ before working a ticket. docs/ai/plans/2026-04-09-publish-api-oidc.md is the current design for publish + OIDC + RBAC and background for deferred remote publication. Local p5p ingestion is the v1 path. The legacy pkg5 specifications live in doc/pkg5_docs/ (publication protocol, repository format, depot protocol).
  • Standing decisions carried into this map: no pkg5 pkgsend wire compatibility for publish; .p5p and .p6p archives plus manifest+file transactions are the upload shapes; no transaction timeout; errors use thiserror + miette; tests run under cargo nextest; illumos is the primary deployment target, Linux the fast CI gate.
  • Already landed before this map (closed, for orientation): Server Search (#2, FTS5 shards, v0/v1 endpoints), Package transport Archive Format (#4, .p6p), pkg6recv multithreaded download fix (#21), FTS duplicate entries (#22). OIDC JWT validation middleware (JWKS cache, scopes, roles claim) exists in pkg6depotd/src/http/middleware/auth.rs but is only wired to /admin/auth/check.
  • Skills: /grill-with-docs for grilling tickets (record resolved terms in CONTEXT.md, decisions as ADRs under docs/ai/decisions/), /research for research tickets, /to-tickets when a decision graduates into build work, /tdd + /implement for the build.
  • Claim a ticket by assigning yourself; resolve with a comment, close it, and append a one-line gist here under Decisions so far.

Tickets

  • #25 Define what 'v1.0 server release' must include and its acceptance criteria
  • #26 Decide the publish transaction model: one FMRI per transaction vs many packages per transaction
  • #27 Decide the RBAC model: token-claim roles vs stored per-publisher roles, and admin bootstrap
  • #28 Choose the OIDC provider and token flows for CI publishers and humans
  • #29 Decide telemetry scope for v1: which OTLP signals, exporter, and whether it gates the release
  • #30 Decide the documentation format, location and minimum content for the server release
  • #31 Define the SQLite catalog load-testing plan: datasets, operations, pass criteria, where it runs
  • #32 Research: how pkg5 models publication transactions, the trans/ directory and catalog updates after publish
  • #33 Research: candidate OIDC providers and non-interactive token flows for CI publishers
  • #34 Research: OTLP exporter stack for tracing-subscriber + tokio + axum, and its illumos build footprint
  • #35 Research: does the rustls/aws-lc-sys crypto stack build on illumos, or should the depot use ring?
  • #36 Task: provision an OIDC test realm/client for pkg6depotd integration tests and CI

Decisions so far

  • V1 proves a separate depot importing the historical split OpenIndiana repositories. The maintainer will provide access; production cutover is a follow-up.
  • The final repository also imports the separate OpenSolaris legacy V3 source under opensolaris.org; it is not a Hipster archive. Its 2,108,239 manifests require bounded, resumable import (#53).
  • 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.

Newly tracked v1 work

  • #38 Atomic local p5p ingestion
  • #39 Import filters and two-stage retirement
  • #40 Command semantics audit
  • #41 IPS/SMF, TLS and ACME
  • #42 OpenIndiana 2020+ compatibility
  • #53 Bounded resumable historical repository import

Decision tickets remain open for unresolved details/ADR capture. Deferred tickets #3, #18, #19, #27, #28 and #36 have been removed from the v1 milestone, without closing them. #29 and #30 carry the agreed telemetry and documentation contracts.

Earlier open questions (apply the updated scope above)

  • Catalog update after a commit: incremental update-log entry vs full rebuild, and how that interacts with the streaming rebuild work that just landed. Sharpens once the publish protocol is decided.
  • Archive upload handling: .p5p through the existing importer vs .p6p through the archive backend, size limits, streaming to disk, partial-failure semantics. Sharpens with the publish protocol.
  • Deployment shape for v1: SMF manifest, IPS package for pkg6depotd, TLS termination (built-in rustls vs reverse proxy), config file conventions. Sharpens once the release scope is fixed.
  • Audit logging of publishes (who published what, when) and its relation to telemetry.
  • Web UI and authentication: whether the htmx UI needs a login for publisher/admin views in v1.
  • Client-side publish tooling: how CI actually pushes (a pkg6repo publish --remote verb? a small pkg6send?), and how it obtains a token non-interactively.
  • Migration of the production depot from pkg5 to pkg6depotd: cut-over plan, rollback, and whether it is part of v1 or a follow-up.

Out of scope

  • Client image operations (install/update, action task list, child/user images, facets, variants, mediators): Release 2 (client), tickets #1, #11–#16.
  • OCI-backed repositories (#10), SSH drop-in publishing (#17), new manifest format (#16): later releases.
Archived map body before the 2026-09-27 normalization (the prepended 2026-09-22 decision sections are now gists under *Decisions so far*, pointing at the ADRs and the tickets that carry them verbatim): <details><summary>previous body</summary> ## 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. ## Destination A tagged v1.0 pkg6depotd release demonstrated on a separate depot importing historical OpenIndiana repositories, serving OpenIndiana Hipster pkg5 clients from approximately 2020 onward. Local atomic .p5p ingestion, two-stage retirement, OTLP/HTTP telemetry, IPS/SMF packaging, both TLS deployment modes and ACME, and mdBook plus illumos-style man pages are in scope. Production cutover, authenticated remote publication/OIDC/RBAC, automatic purge and S3 are deferred. OmniOS validation targets v1.2. ## Notes - Milestone: [Release 1 (server only)](https://code.aopc.cloud/OpenIndiana/ips/milestone/5). The feature tickets in that milestone (Server Publish, OIDC, RBAC, docs, telemetry, load testing, CI) are the *deliverables*; this map holds the *decisions* they wait on. Each decision ticket blocks the feature ticket it informs, so the milestone view shows what is takeable. - Read `CLAUDE.md`, `docs/agents/domain.md` and the ADRs in `docs/ai/decisions/` before working a ticket. `docs/ai/plans/2026-04-09-publish-api-oidc.md` is the current design for publish + OIDC + RBAC and background for deferred remote publication. Local p5p ingestion is the v1 path. The legacy pkg5 specifications live in `doc/pkg5_docs/` (publication protocol, repository format, depot protocol). - Standing decisions carried into this map: no pkg5 `pkgsend` wire compatibility for publish; `.p5p` and `.p6p` archives plus manifest+file transactions are the upload shapes; no transaction timeout; errors use thiserror + miette; tests run under `cargo nextest`; illumos is the primary deployment target, Linux the fast CI gate. - Already landed before this map (closed, for orientation): Server Search (#2, FTS5 shards, v0/v1 endpoints), Package transport Archive Format (#4, `.p6p`), pkg6recv multithreaded download fix (#21), FTS duplicate entries (#22). OIDC JWT validation middleware (JWKS cache, scopes, `roles` claim) exists in `pkg6depotd/src/http/middleware/auth.rs` but is only wired to `/admin/auth/check`. - Skills: `/grill-with-docs` for grilling tickets (record resolved terms in `CONTEXT.md`, decisions as ADRs under `docs/ai/decisions/`), `/research` for research tickets, `/to-tickets` when a decision graduates into build work, `/tdd` + `/implement` for the build. - Claim a ticket by assigning yourself; resolve with a comment, close it, and append a one-line gist here under *Decisions so far*. ## Tickets - [ ] #25 Define what 'v1.0 server release' must include and its acceptance criteria - [ ] #26 Decide the publish transaction model: one FMRI per transaction vs many packages per transaction - [ ] #27 Decide the RBAC model: token-claim roles vs stored per-publisher roles, and admin bootstrap - [ ] #28 Choose the OIDC provider and token flows for CI publishers and humans - [ ] #29 Decide telemetry scope for v1: which OTLP signals, exporter, and whether it gates the release - [ ] #30 Decide the documentation format, location and minimum content for the server release - [ ] #31 Define the SQLite catalog load-testing plan: datasets, operations, pass criteria, where it runs - [x] #32 Research: how pkg5 models publication transactions, the trans/ directory and catalog updates after publish - [x] #33 Research: candidate OIDC providers and non-interactive token flows for CI publishers - [x] #34 Research: OTLP exporter stack for tracing-subscriber + tokio + axum, and its illumos build footprint - [x] #35 Research: does the rustls/aws-lc-sys crypto stack build on illumos, or should the depot use ring? - [ ] #36 Task: provision an OIDC test realm/client for pkg6depotd integration tests and CI ## Decisions so far - V1 proves a separate depot importing the historical split OpenIndiana repositories. The maintainer will provide access; production cutover is a follow-up. - The final repository also imports the separate OpenSolaris `legacy` V3 source under `opensolaris.org`; it is not a Hipster archive. Its 2,108,239 manifests require bounded, resumable import (#53). - 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. ### Newly tracked v1 work - [ ] #38 Atomic local p5p ingestion - [ ] #39 Import filters and two-stage retirement - [ ] #40 Command semantics audit - [ ] #41 IPS/SMF, TLS and ACME - [ ] #42 OpenIndiana 2020+ compatibility - [ ] #53 Bounded resumable historical repository import Decision tickets remain open for unresolved details/ADR capture. Deferred tickets #3, #18, #19, #27, #28 and #36 have been removed from the v1 milestone, without closing them. #29 and #30 carry the agreed telemetry and documentation contracts. <!-- one line per closed ticket: [title](link): gist --> - [Research: does the rustls/aws-lc-sys crypto stack build on illumos, or should the depot use ring?](https://code.aopc.cloud/OpenIndiana/ips/issues/35): aws-lc has upstream illumos fixes and aws-lc-rs ships universal pregenerated bindings, so no bindgen/libclang is needed on illumos (the override added with the CI migration was what forced it); keep aws-lc, ring switch is a 4-line fallback - [Research: candidate OIDC providers and non-interactive token flows for CI publishers](https://code.aopc.cloud/OpenIndiana/ips/issues/33): Forgejo OAuth2 access tokens are not validatable JWTs and there is no client-credentials/device flow, but Forgejo Actions issues OIDC ID tokens (issuer code.aopc.cloud/api/actions, JWKS live): recommend secretless CI publish via Actions ID tokens + Forgejo auth-code/PKCE ID tokens (groups claim) for humans; authentik only if a real IdP is ever needed - [Research: OTLP exporter stack for tracing-subscriber + tokio + axum, and its illumos build footprint](https://code.aopc.cloud/OpenIndiana/ips/issues/34): stay on OTel 0.31 + tracing-opentelemetry 0.32 (reqwest 0.12 pin), use OTLP/HTTP http-proto + reqwest-client (no tonic/protoc), add opentelemetry-appender-tracing for logs, init after daemonize; latent bug: both ring and aws-lc rustls providers are linked and no install_default() is called - [Research: how pkg5 models publication transactions, the trans/ directory and catalog updates after publish](https://code.aopc.cloud/OpenIndiana/ips/issues/32): pkg5 = one transaction per FMRI under trans/, close renames then rewrites the catalog under a lock (not two-phase, crashed txns linger); only the catalog/1 retrieval contract is client-visible, so pkg6 can make multi-package atomic transactions native and must keep catalog/1 semantics exact ## Earlier open questions (apply the updated scope above) - Catalog update after a commit: incremental update-log entry vs full rebuild, and how that interacts with the streaming rebuild work that just landed. Sharpens once the publish protocol is decided. - Archive upload handling: `.p5p` through the existing importer vs `.p6p` through the archive backend, size limits, streaming to disk, partial-failure semantics. Sharpens with the publish protocol. - Deployment shape for v1: SMF manifest, IPS package for pkg6depotd, TLS termination (built-in rustls vs reverse proxy), config file conventions. Sharpens once the release scope is fixed. - Audit logging of publishes (who published what, when) and its relation to telemetry. - Web UI and authentication: whether the htmx UI needs a login for publisher/admin views in v1. - Client-side publish tooling: how CI actually pushes (a `pkg6repo publish --remote` verb? a small `pkg6send`?), and how it obtains a token non-interactively. - Migration of the production depot from pkg5 to pkg6depotd: cut-over plan, rollback, and whether it is part of v1 or a follow-up. ## Out of scope - Client image operations (install/update, action task list, child/user images, facets, variants, mediators): Release 2 (client), tickets #1, #11–#16. - OCI-backed repositories (#10), SSH drop-in publishing (#17), new manifest format (#16): later releases. </details>
Author
Owner

RC14 candidate source is committed at 5cbf36a on feat/separate-depots. Named pkg6 SMF instances now use direct pkg/inst_root, pkg/port, pkg/address, pkg/ssl_cert_file and pkg/ssl_key_file properties; incomplete pairs fail closed. KDL remains for ACME and telemetry. IPS actuators target all instances on upgrade and removal. Local pkg6depotd nextest passed 121/121, release-script checks 564/564, operator book and native svccfg manifest validation passed. The exact-source native build/package gate is running on oibuild; no RC14 tag, oirepo6 upgrade, public proxy change or historical source import has occurred yet.

RC14 candidate source is committed at 5cbf36a on feat/separate-depots. Named pkg6 SMF instances now use direct pkg/inst_root, pkg/port, pkg/address, pkg/ssl_cert_file and pkg/ssl_key_file properties; incomplete pairs fail closed. KDL remains for ACME and telemetry. IPS actuators target all instances on upgrade and removal. Local pkg6depotd nextest passed 121/121, release-script checks 564/564, operator book and native svccfg manifest validation passed. The exact-source native build/package gate is running on oibuild; no RC14 tag, oirepo6 upgrade, public proxy change or historical source import has occurred yet.
Author
Owner

RC14 progress: PR #56 implements direct SMF properties (pkg/inst_root, pkg/address, pkg/port, pkg/ssl_cert_file, pkg/ssl_key_file) with named instances. The exact-tag v1.0.0-rc.14 prerelease passed the native oibuild build, 460 release-profile tests, IPS baseline dry run, and pkg5 smoke. Its tagged IPS package is installed and verified on private oirepo6; default and three named instances are online. oibldofgate's pkg5 client listed and fetched one source-backed legacy package from the named instance. The public proxy remains on the old host.

This does not complete the Release 1 acceptance gates: full bounded historical import, unified import CLI, Hipster 2020/2023/current snapshot client tests, load comparison, and automated live-image/SMF lifecycle testing remain open. Solstice's illumos PR job failed before compilation due to an sccache rustc -vV server-start timeout; the native oibuild gate passed.

RC14 progress: [PR #56](https://code.aopc.cloud/OpenIndiana/ips/pulls/56) implements direct SMF properties (`pkg/inst_root`, `pkg/address`, `pkg/port`, `pkg/ssl_cert_file`, `pkg/ssl_key_file`) with named instances. The exact-tag [v1.0.0-rc.14 prerelease](https://code.aopc.cloud/OpenIndiana/ips/releases/tag/v1.0.0-rc.14) passed the native oibuild build, 460 release-profile tests, IPS baseline dry run, and pkg5 smoke. Its tagged IPS package is installed and verified on private oirepo6; default and three named instances are online. oibldofgate's pkg5 client listed and fetched one source-backed `legacy` package from the named instance. The public proxy remains on the old host. This does not complete the Release 1 acceptance gates: full bounded historical import, unified import CLI, Hipster 2020/2023/current snapshot client tests, load comparison, and automated live-image/SMF lifecycle testing remain open. Solstice's illumos PR job failed before compilation due to an `sccache rustc -vV` server-start timeout; the native oibuild gate passed.
Sign in to join this conversation.
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
OpenIndiana/ips#24
No description provided.