prj-forgejo-org-refactor/workplans/ORGREF-WP-0001-foundation-and-entry-gate.md
tegwick 92d436c6a6 Point the org-refactor entry gate at the open decisions.
Assistant: grok
Assistant-Session: 01a10938-ab49-7280-877a-c06f64c06ddd
2026-10-05 02:39:36 +02:00

271 lines
14 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
id: ORGREF-WP-0001
type: workplan
title: "Foundation, blast-radius inventory, and execution entry gate"
domain: infotech
repo: prj-forgejo-org-refactor
status: blocked
flavor: implementation
owner: codex
topic_slug: railiance
created: "2026-08-11"
updated: "2026-10-05"
related_repos:
- railiance-forge
- railiance-platform
- railiance-apps
- railiance-master
state_hub_workstream_id: "c1dcd349-1a7a-51ae-8827-4ce96cfe0008"
---
# ORGREF-WP-0001 - Foundation, blast-radius inventory, and execution entry gate
## Status note
`blocked` after authorized read-only preparation on 2026-09-28. The founder's
August 11 production deferral remains in force. T01/T02 now have review artifacts
and are waiting on evidence/access and stewardship decisions; T03–T05 have not
started.
This workplan exists so the finding and its evidence are not lost, and so the
condition for starting is written down and checkable rather than a judgement
call made from memory months later.
The user authorized preparation on September 28. T01/T02 are `wait` after the
bounded preparation below; their acceptance criteria are not yet met. T03 onward
still requires all four gate conditions.
2026-10-05: T01 is wait on the authenticated-metadata decision
`5f3680fc-0cd5-4d27-ba39-59fbdd13313c`. T02 also waits on the stewardship
review `60c5767c-d510-4d13-9a24-d5d58485b7e5`. T03 and T04 wait on the
rollback-gate decision `e9aca79b-f167-4326-94cd-037dcea34cd2`. T05 waits on
T01–T04. None of these tasks started a forge change.
## Entry gate — do not start T03 onward until all four hold
1. **Family declaration validator is live and green.** The rapp/rail/reef
validator proposed to `railiance-master` (message `04c776c4`, amended by
`f88f938d`) is running. Without it there is no way to tell whether a
post-migration inconsistency was caused by the migration.
2. **Deployable coverage is known.** Every live deployable maps to exactly one
rapp (the coverage check from decision `d07ee5f9`). Migrating image paths
for workloads nobody has inventoried is how the container-registry failure
mode goes unnoticed.
3. **The G1 inventory command exists and returns a stable result** across two
consecutive runs with no fleet changes between them.
4. **A rollback has been demonstrated** on a throwaway or low-stakes repo,
covering both Git path and package-registry recovery.
T01 and T02 below are safe to run at any time — they are read-only and they
build the evidence the gate depends on.
## Readiness review — 2026-09-28
See [evidence, owner records and next sequence](../history/2026-09-28-readiness-review.md).
| Condition | Current evidence | Disposition |
| --- | --- | --- |
| 1 | Validator implemented in `RMASTER-WP-0021-T05`; current local scan: 16 declarations, zero errors, one warning | Green for inspected fleet; rerun before execution |
| 2 | Fresh September 28 platform capture: 68 units; validator reports 52 errors/10 warnings. Wider runtime capture covers 132 controllers | Not met; owner mapping/name drift and collector coverage still need resolution |
| 3 | Collector implemented; 141 public repos + 12 additional local paths, 2,160 source/archive references. Paired reference sets match but fleet revisions/content changed; private/package/access evidence missing | Not met; partial inventory is not G1 acceptance |
| 4 | No applicable Git/package transfer rollback receipt found | Not met; T03 onward remains gated |
**Circular prerequisite:** T04 cannot produce the first condition-4 proof while
it is itself gated on that proof. Pending decision
`e9aca79b-f167-4326-94cd-037dcea34cd2` proposes a separately scoped disposable
forge-owner rehearsal after conditions 1–3, with all four conditions retained for
production. It is a proposal, not an exception to AGENTS.md. Until the gate is
explicitly amended, consume independently authorized applicable proof or remain
deferred. Do not start T03/T04 to work around this dependency.
The [exact proposed amendment](../decisions/rollback-gate-amendment.md) is now
reviewable; approval has been requested but is not assumed from preparation
authorization. No standing rule has changed.
Reuse owner work instead of rebuilding it: `RPF-WP-0028` provides durable image
inventory; `RPF-WP-0048-T03` provides digest/rollback retention protection.
Neither establishes complete current rapp coverage or org-transfer recovery.
## Boundaries
This project may:
- inventory, plan, sequence, and verify the migration
- test Forgejo behavior against throwaway orgs and repos
- coordinate child work records in participating repos
It must not:
- move a production repo before the entry gate holds
- change any repo's internal structure or content
- absorb rapp-context or State Hub domain grouping (separate dimensions,
decision `d07ee5f9`)
## Tasks
```task
id: ORGREF-WP-0001-T01
status: wait
needs_human: true
decision_id: 5f3680fc-0cd5-4d27-ba39-59fbdd13313c
blocking_reason: "The September 28 collector is not G1 acceptance. Authenticated metadata still waits on decision 5f3680fc, and an unchanged-fleet pair is still missing."
priority: high
state_hub_task_id: "4964bf8f-96eb-59f0-8a50-5ecb5c7dbc8f"
```
2026-09-29 (CUST-WP-0074-T05 backfill): this task was `wait` with no external dependency or human gate stated, which Task Wait Qualifiers v0.1 treats as unqualified; set to `todo`. Re-add `wait` with a qualifier if a real gate exists.
Build the re-runnable `coulomb/` reference inventory (G1). Must cover: git
remotes across all repos, ArgoCD `repoURL` values, chart image `repository:`
paths, `Chart.yaml` `home:`/`sources:`, submodules, and CI configs. Also include AppProject source allowlists, repository access
references, reusable Actions, runners/webhooks, package indexes, digest/tag
retention inputs, and release/rollback image references. Output a
machine-readable inventory under `inventory/` plus a command that can be
re-run to verify clean at G6. Discover actual server product/version and all
Git/registry endpoints; owner docs disagree with the seed's Forgejo-only naming.
Reconcile server repository IDs with registered repos and clones; do not treat
151 local origins as a complete server census. Inventory package ownership
separately from linked repositories. Capture source revisions, unavailable
surfaces, exclusions and reference owners without secret values.
Acceptance: two normalized inventory runs match with no intervening fleet
changes; unresolved coverage is explicit and prevents G1 acceptance. G6 checks
moved paths against an approved disposition list, preserving legitimate retained
`coulomb` paths and historical records. This read-only collector/evidence belongs
here; production fixes belong to the owning repos.
Preparation delivered September 28:
- `tools/inventory.py`, paired snapshots and `inventory/comparison.json`;
150 non-coordinator local checkouts plus two pinned public remote-only archives,
2,133 local + 27 archive reference occurrences, no scan errors.
- Fresh workload and GitOps exports, source revision/content hashes, exclusions,
machine-readable repo/State Hub reconciliation and safe reference-only records.
- Four focused tests pass; the migration cleanliness precheck correctly refuses
incomplete coverage and an unapproved matrix.
- Waiting on authenticated metadata decision
`5f3680fc-0cd5-4d27-ba39-59fbdd13313c`, exclusion/consumer coverage review and an
unchanged-fleet pair. The existing credential lane was denied by flex-auth;
package ownership and private completeness are not known.
See [inventory instructions and gaps](../inventory/README.md). T01 is not done.
The follow-up now links [owner records](../inventory/owner-followups.md), a
52-row coverage review queue, 326 excluded-item dispositions and four submodule
pins. An immediate retry still observed hub-core changing; condition 3 remains
unmet. Authenticated evidence has an explicit [export contract](../inventory/owner-evidence-contract.md).
Known starting evidence, verified 2026-08-11: 112 repos with a `coulomb/`
origin; `repoURL: https://forgejo.coulomb.social/coulomb/railiance-platform.git`
in `railiance-platform/argocd/applications/`; `repository:
forgejo.coulomb.social/coulomb/core-hub` in `railiance-apps/charts/core-hub/values.yaml`;
`home:`/`sources:` URLs across at least five charts.
```task
id: ORGREF-WP-0001-T02
status: wait
depends_on: [ORGREF-WP-0001-T01]
needs_human: true
decision_id: 60c5767c-d510-4d13-9a24-d5d58485b7e5
blocking_reason: "The taxonomy draft waits on the G1 inventory (T01) and on stewardship review 60c5767c. The September 28 matrix is not acceptance."
priority: high
state_hub_task_id: "00d150ed-81dd-51ac-af7b-197900373cbe"
```
Establish the org-assignment criteria and draft the taxonomy (G2) for
`railiance`, `netkingdom`, `helixforge`, `binky`, `experimental`, and what
`coulomb` retains. Criteria must be written so a future repo can be placed
without re-litigating — that is what gets promoted at G7.
Guidance from the 2026-08-11 design review: an org is a **stewardship** grouping
answering "who may push, what is discoverable together." It is deliberately not
a legal-entity grouping (that lives in LICENSE, copyright headers, and
contribution records, which survive repo moves) and not a deployment grouping
(that is rapp context, a separate dimension per decision `d07ee5f9`).
Open question to settle here: `experimental` is a lifecycle grouping rather than
a stewardship one. Decide whether it is a legitimate exception or whether
experimental work belongs in its steward's org with a different visibility or
archival policy. Draft preference: keep it with its steward unless a shared
incubator has an explicit accountable owner. Target org names remain candidates.
Acceptance requires every server repo's stable ID, target, steward, rationale,
visibility/team permissions and unresolved assignment (if any); approve the
matrix and select the permanent convention owner before declaring G2 complete.
Preparation delivered September 28: [taxonomy proposal](../taxonomy/README.md)
and CSV/JSON matrix cover 153 known paths: 122 proposed org assignments and 31
explicitly unresolved stewards. Visibility is preserved by proposal; named teams,
actual grants and missing private IDs still need owner evidence. Recommend no
lifecycle-only `experimental` org and `the-custodian` as the durable convention
home, both pending acceptance. Decision
`60c5767c-d510-4d13-9a24-d5d58485b7e5` tracks the concrete review. G2 is not accepted. The deeper review proposes
whynot as an additional steward, and records evidence for ops-hub/disaster-control.
Naming and maintainer acceptance remain pending.
```task
id: ORGREF-WP-0001-T03
status: wait
depends_on: [ORGREF-WP-0001-T01, ORGREF-WP-0001-T02]
needs_human: true
decision_id: e9aca79b-f167-4326-94cd-037dcea34cd2
blocking_reason: "The August 11 production deferral remains in force. Throwaway forge behavior does not start while G1 and G2 are unaccepted and the rollback-gate decision is open."
priority: high
state_hub_task_id: "4b57ef3f-2a7c-56ff-b19d-e751b0b4685d"
```
Verify the deployed forge product/version's actual behavior against a throwaway org (G3),
for **both** the Git path and the package registry. Test repository transfer,
organization rename and package ownership separately; do not infer that a repo
transfer moves its packages. Include authenticated Git/CI access, private pulls,
digests/tags and relevant package indexes. Specifically: does a
renamed org leave a working redirect for `git clone`/`git fetch`? Does it for
`docker pull`? For how long? Is it configurable? Do not assume from
documentation — the container-registry path is the dangerous one because its
failure is deferred to the next pod reschedule rather than surfacing at rename
time.
```task
id: ORGREF-WP-0001-T04
status: wait
needs_human: true
decision_id: e9aca79b-f167-4326-94cd-037dcea34cd2
blocking_reason: "Rollback proof cannot bootstrap its own prerequisite. Decision e9aca79b is still open, and the August 11 production deferral remains in force."
priority: high
state_hub_task_id: "a55d95e2-6014-5d84-ba6e-b178c3901f3e"
```
Prove rollback (G4) on a low-stakes repo: move it, confirm GitOps sync and
image pull both recover, move it back, confirm again. Produce the evidence
record. This revalidates the previously accepted condition-4 evidence for the selected
migration path; it cannot bootstrap its own prerequisite under the standing gate.
Record exact operation, product/version, old/new paths, uncached pulls, GitOps
revision/health, retention protections, credentials scope, cleanup and recovery
time. Unrelated application rollout rollback is not acceptable transfer proof.
```task
id: ORGREF-WP-0001-T05
status: wait
depends_on: [ORGREF-WP-0001-T01, ORGREF-WP-0001-T02, ORGREF-WP-0001-T03, ORGREF-WP-0001-T04]
blocking_reason: "The cutover plan is written from T01–T04 evidence. Those tasks are still open."
priority: medium
state_hub_task_id: "3ad6090f-5aa9-5087-a670-37d7b2ffdb7c"
```
Write the migration sequencing and cutover plan from the T01–T04 evidence:
ordering, per-stage rollback point, which references must change ahead of the
move versus after it, and how a deliberate pod-reschedule test is used to prove
G6 rather than assuming success. Include release broker/admission readiness,
AppProject/repository access updates, old/new package availability and retention
protection for live and rollback digests. Identify owners, abort criteria and
validation receipts for each stage. Start with a low-stakes wave; never combine
an org split with an unplanned host or forge-product migration.
## Residuals
- T01 metadata access/completeness: `5f3680fc-0cd5-4d27-ba39-59fbdd13313c`.
- T02 matrix/maintainer/convention acceptance: `60c5767c-d510-4d13-9a24-d5d58485b7e5`.
- Resolve pending gate decision `e9aca79b-f167-4326-94cd-037dcea34cd2`.
- Fresh deployable coverage and gap closure remain with platform/framework and
workload owners; link their work by stable ID rather than importing tasks.
- T05 produces the plan only. Follow-on file-backed workplans must cover migration
waves (G5/G6), durable convention publication (G7) and retirement evidence.
Create those after foundation acceptance; no migration task is implied done.