Founder checks: no ArgoCD repository credentials; k3s registries.yaml holds auth only for the frozen Gitea host, none for forgejo.coulomb.social. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Assistant: claude-code Assistant-Model: opus Assistant-Process: 5457@bnt-lap001 Assistant-Session: 792bf84a-3783-4f5d-a811-cded61dd2012
116 lines
6.4 KiB
Markdown
116 lines
6.4 KiB
Markdown
# Anonymous forge consumers — ORGREF-WP-0002-T02
|
|
|
|
Machine-readable result: `access-consumers-2026-10-08.json`. Reproduce:
|
|
|
|
```bash
|
|
python3 tools/runtime_inventory.py --output inventory/runtime-2026-10-08.json
|
|
python3 tools/access_consumers.py --root /home/worsch \
|
|
--runtime inventory/runtime-2026-10-08.json \
|
|
--output inventory/access-consumers-2026-10-08.json
|
|
```
|
|
|
|
Read-only: 161 local working trees scanned, plus a fresh runtime capture
|
|
(`runtime-2026-10-08.json`: 135 controllers, 10 Applications, 7 AppProjects).
|
|
Secrets and node registry configuration were not inspected.
|
|
|
|
## What breaks when repositories and packages go private
|
|
|
|
| Class | Count | Reads | Will need |
|
|
| --- | --- | --- | --- |
|
|
| cluster-image-pull | 43 workloads | container images from the Forgejo registry, **none with `imagePullSecrets`** | node-level registry auth (k3s `registries.yaml` has **none for the forge**, founder check below) or pull credentials per namespace. Anonymous pulls confirmed working on 2026-10-08: anonymous registry token issued, tag list 200 |
|
|
| cluster-gitops | 10 ArgoCD applications over 5 repos | Git: railiance-platform (6 apps), activity-core, informed-decision, state-hub, target-revenue | ArgoCD repository credentials: **none exist today** (founder check below) |
|
|
| ci-runner | about 20 repos | own-source tarballs and cross-repo tarballs, anonymously (below) | job token for the own repository, a scoped read token across repositories |
|
|
| package index | kaizen-agentic, vergabe-teilnahme | PyPI `simple/` index without credentials | package-read token |
|
|
| federation | reuse-surface | about 60 capability indexes by raw URL | read identity, or a published index location |
|
|
| code readers | about 8 files, below | clones, API and raw reads without token handling | owner review; re-point to an authenticated path |
|
|
| campaign images | pr-hall-of-helix, fluid-telegram | Telegram fetching post images by raw URL | a deliberate public asset location (ORGREF-WP-0002-T01 point 4) |
|
|
|
|
Lower risk: `repo-gitops` and `repo-image-reference` are the cluster consumers
|
|
seen from their source repos. `doc-link` means links break for the public, not
|
|
consumers. `record-or-test` is evidence and fixtures.
|
|
|
|
## Per-entry review, 2026-10-08
|
|
|
|
**CI: anonymous source tarballs (breaks).** Workflows download their own source
|
|
with plain `curl`/`wget` from `/${GITHUB_REPOSITORY}/archive/<sha>.tar.gz`, with no
|
|
credentials: access-engine, activity-core, core-hub, coulomb-social, email-connect,
|
|
glas-harness, hub-core, issue-core, kaizen-agentic, key-cape, net-kingdom,
|
|
railiance-platform, reuse-surface, sbom-nexus, state-hub, tenant-engine,
|
|
the-custodian, user-engine, vergabe-teilnahme. Cross-repo fetches as well:
|
|
core-hub → hub-core, glas-harness → sand-boxer, state-hub → extra repos.
|
|
Work-record workflows (binky-control, repo-seed, runbook-tutorials) call the
|
|
forge base URL too. Fix: send the job token (`Authorization: token
|
|
${{ github.token }}`) for the job's own repository, and a scoped read token for
|
|
cross-repo fetches. Registry pushes in the same workflows are already
|
|
authenticated.
|
|
|
|
**Package indexes: anonymous reads (breaks).** PyPI `simple/` used without
|
|
credentials: kaizen-agentic install docs, and vergabe-teilnahme `pyproject.toml` /
|
|
`uv.lock` (issue-core 0.2.1). npm consumers (whynot-design, markitect
|
|
testdrive-jsui) already send `NPM_AUTH_TOKEN`.
|
|
|
|
**Federation: reuse-surface (breaks).** `registry/federation/sources.yaml` fetches
|
|
about 60 capability indexes by raw URL, anonymously.
|
|
|
|
**Code readers with no token handling found.** activity-core
|
|
`release_transport.py` (https clone of activity-core and railiance-platform),
|
|
`owner_return_eligibility.py` (forge API) and `run_artifacts.py`; sbom-nexus
|
|
`source_fetch.py`; repo-manager `source_ref.py`; frontend-patterns
|
|
`reference_consume.py`; state-hub `scripts/verify_image_pin.py`. Each owner
|
|
confirms and re-points it. Token-aware already: state-hub `forge_projection.py`,
|
|
railiance-platform `forgejo_package_prune.py` and its provisioning scripts.
|
|
activity-core context resolvers are partly token-aware. Smoke probes of `/v2/`
|
|
(core-hub, ops-hub) only check reachability.
|
|
|
|
**Not consumers.** Runbooks, docs and evidence that mention URLs;
|
|
`gitea.coulomb.social` references (frozen legacy host); kaizen-agentic project
|
|
URLs and whynot-design's SSH `repository` field.
|
|
|
|
## Not anonymous
|
|
|
|
All 160 local clones use SSH with the founder's key (`forgejo-remote`). They keep
|
|
working as long as that account can read the repositories.
|
|
|
|
## Founder checks (presence only, no secret values)
|
|
|
|
Agents do not read Secrets, so run these in your own terminal and paste the output.
|
|
|
|
1. ArgoCD repository credentials, by name, type and URL only:
|
|
|
|
```bash
|
|
kubectl -n argocd get secrets \
|
|
-l 'argocd.argoproj.io/secret-type in (repository,repo-creds)' \
|
|
-o go-template='{{range .items}}{{.metadata.name}} {{index .metadata.labels "argocd.argoproj.io/secret-type"}} {{if .data.url}}{{.data.url | base64decode}}{{end}}{{"\n"}}{{end}}'
|
|
```
|
|
|
|
2. k3s registry configuration on railiance01, as key names with every value
|
|
stripped:
|
|
|
|
```bash
|
|
ssh railiance01 'sudo test -f /etc/rancher/k3s/registries.yaml \
|
|
&& sudo sed -nE "s/^([[:space:]]*[A-Za-z0-9_.\"-]+:).*/\1/p" /etc/rancher/k3s/registries.yaml \
|
|
|| echo absent'
|
|
```
|
|
|
|
`absent`, or no `auth:` under the forge host, means all 43 pulls depend on
|
|
anonymous registry access today.
|
|
|
|
### Results, 2026-10-08 (run by the founder)
|
|
|
|
1. **ArgoCD: no repository credentials.** Empty output: no `repository` or
|
|
`repo-creds` Secrets. All 10 Applications read the forge anonymously.
|
|
2. **k3s: no registry auth for the forge.** `registries.yaml` exists with
|
|
`mirrors` and `configs.auth` (username, password) only for `92.205.130.254:<port>`,
|
|
the frozen legacy Gitea host. The port was cut off by the value-stripping
|
|
command. There is no entry for `forgejo.coulomb.social`, so all 43 image pulls
|
|
are anonymous. One node-level `configs."forgejo.coulomb.social".auth` entry
|
|
with a read-only package identity would cover all of them at once (T06). The
|
|
stale Gitea credential on the node is a cleanup item for railiance-forge or
|
|
railiance-infra.
|
|
|
|
## Left to owners (tracked in T06, not T02)
|
|
|
|
- Owners confirm the code readers listed under "no token handling found".
|
|
- Consumers outside these working trees (external sites and links, other
|
|
people's clones) cannot be found by scanning; T08's anonymous probe after each
|
|
wave is the backstop.
|