Skip to content

docs: record component accountability and lifecycle procedures - #14

Merged
joey-huckabee merged 3 commits into
mainfrom
docs/component-accountability-and-lifecycle
Sep 16, 2026
Merged

joey-huckabee merged 3 commits into
mainfrom
docs/component-accountability-and-lifecycle

Conversation

@joey-huckabee

Copy link
Copy Markdown
Contributor

Closes the remaining Package 2 items: record source, redistribution,
licensing, lifecycle, and update ownership for every runtime component, and
define lock refresh, key rotation, mirroring, rollback, and disconnected
transfer.

Component accountability

artifacts/components.json binds all 79 locked runtime RPMs to a publisher
policy carrying source, redistribution terms, license reference, support
lifecycle, named update owner, and expected RPM vendor. scripts/components.py
validates it against both locks, and the native jobs re-check every recorded
license tag, source RPM, and vendor header against each acquired RPM.

Licenses are recorded as the publisher's own RPM tag. They are not relabelled
into SPDX-shaped strings, because that would turn upstream metadata into a
project-authored legal conclusion.

Lifecycle and controlled transfer

docs/ARTIFACT-LIFECYCLE.md defines roles and required reviewers for lock
refresh, signing-key rotation and emergency revocation, mirrors, rollback, and
connected-to-disconnected transfer. A key change is never inferred from a
failed signature or an RPM header. scripts/transfer.py plus its schema bind a
payload to its repository revision, architecture lock, and component inventory;
the separately conveyed manifest digest does not replace publisher signatures.

Runtime contract

docs/RUNTIME-CONTRACT.md records startup diagnostics, reload and
graceful-stop behavior, and the enforced inventories. The smoke suite now
requires precise mounted-configuration and unwritable-path diagnostics,
worker-replacing reloads that retain PID 1, complete active-request draining on
SIGQUIT, the exact embedded 79-RPM manifest, and an empty dynamic-module
directory.

Note on the inventory rebind

This branch was prepared before the lock refresh in #11, so the second commit
rebinds it: both lock SHA-256 values and the six affected source-RPM records
(openssl x2, systemd x4).

Those records were verified against the actual RPM headers of a freshly
acquired AMD64 bundle rather than edited to match the locks — all 79 packages
verify, and no license tag changed across either rebuild. That ordering matters
here: editing the inventory to agree with the locks would have made the check
self-confirming, which is precisely what this file exists to prevent.

🤖 Generated with Claude Code

Bind all 79 locked runtime RPMs to their license tag, source RPM, publisher
and redistribution policy, lifecycle boundary, and named update owner, and
check that inventory against every acquired RPM in native CI.

Define reviewed lock refresh, signing-key rotation and revocation, immutable
mirroring, image rollback, and disconnected transfer, with a schema and
fail-closed manifest binding a payload to its repository revision,
architecture lock, and component inventory.

Record the rootless runtime and lifecycle contract, and strengthen the smoke
suite to require precise mounted-configuration and unwritable-path
diagnostics, worker-replacing reloads that retain PID 1, complete
active-request draining on SIGQUIT, the exact embedded 79-RPM manifest, and
the reviewed NGINX compile-feature and empty dynamic-module inventories.
The artifact locks moved onto the patched UBI 9.8 bases, so the
accountability inventory no longer matched them. Rebind both lock SHA-256
values and update the six affected source-RPM records:

  openssl, openssl-libs          -> openssl-3.5.8-1.el9_8.src.rpm
  systemd, systemd-libs,
  systemd-pam, systemd-rpm-macros -> systemd-252-67.el9_8.6.src.rpm

License, vendor, and source-RPM records were verified against the actual RPM
headers of a freshly acquired AMD64 bundle rather than assumed: all 79
packages verify, and no license tag changed across either rebuild. The
package set, publisher policies, lifecycle boundaries, and update owners are
unchanged.
@joey-huckabee
joey-huckabee merged commit 6d7a63d into main Sep 16, 2026
7 checks passed
@joey-huckabee
joey-huckabee deleted the docs/component-accountability-and-lifecycle branch September 16, 2026 03:14
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant