feat(outline): onboard the Outline wiki #705

Merged
binjovi-bot merged 1 commit from feat/onboard-outline into trunk 2026-09-13 13:02:51 +00:00
Owner

Onboards the Outline wiki at outline.sean.farm, Part B of the plan that Part A
(create_repository) unblocked.

What is here

Everything for Outline that this repository owns:

piece where
namespace, AppProject, repo Secret, root Application infrastructure/outline-argocd/manifest.yaml
Hydra OIDC client (ESO-generated secret, no RBAC) infrastructure/outline-argocd/oidc.yaml
S3 credential delivery into ns outline infrastructure/outline-argocd/credentials.yaml
Valkey StatefulSet (the queues) infrastructure/valkey-outline/
CNPG tenant database + OpenBao policy infrastructure/tenantdatabase/outline.yaml, policy.yaml
scoped RustFS key infrastructure/rustfs-identities/outline.yaml
gateway listeners, certificate, portal card infrastructure/portal/
Flux wrappers clusters/seanfarm/infrastructure/{outline,valkey-outline}.yaml

Outline's own Deployment, Service and HTTPRoute are NOT here. They belong to
sean/outline and reach the cluster through the root Application.

No ForgejoRepository CR

This is the first repository created by Binjovi's create_repository MCP tool,
which queues the repository and its codeberg push mirror together. A CR would be
a second owner of the same object, and the two disagree the first time either is
edited. tests/outline.sh refuses one.

Three settings that carry more weight than they look

  • maxmemory-policy noeviction on the Valkey. Outline drives it through
    bull, and BullMQ must not run on a Redis with a cache eviction policy: an
    evicted key is a silently dropped job, not an error. A default allkeys-lru
    Valkey passes every health check and loses work.
  • appendonly yes. The same queues are the only record of in-flight work,
    and a node roll restarts this pod by design.
  • The exact OIDC callback, ${URL}/auth/oidc.callback, read from
    plugins/oidc/server/auth/oidcRouter.ts at v1.10.1. Hydra refuses a
    redirect_uri that does not match character for character, and reports it on
    Hydra's own login page — a wrong path here looks like a broken Outline with the
    cause in another namespace.

arm64

The registrar runs on the multi-arch house toolchain (the pin from #701), the
Valkey image is pinned to an index digest verified to carry a linux/arm64
child, and the Valkey carries the arm-canary toleration.

Guard

tests/outline.sh is new and wired into tests/check.sh. It checks the whole
shape as one object and carries seven negative controls, each proved to go red.
tests/lib/rustfs-contracts.jq now also reads AWS_ACCESS_KEY_ID as an identity
access key: each consumer's driver fixes its own spelling, and without this an
identity escapes the check merely by having been written against a different
upstream.

Ships with

sean/binjovi-plans declares the outline bucket and its policy in
object-store.json; Binjovi converges them. Until that catalog is released, the
Secret here holds a key RustFS has never heard of and uploads answer 403 — the
intended order, not a fault.

https://claude.ai/code/session_01JGe4pyhQ36AhgDfPJry4d3

Onboards the Outline wiki at `outline.sean.farm`, Part B of the plan that Part A (`create_repository`) unblocked. ## What is here Everything for Outline that this repository owns: | piece | where | |---|---| | namespace, AppProject, repo Secret, root Application | `infrastructure/outline-argocd/manifest.yaml` | | Hydra OIDC client (ESO-generated secret, no RBAC) | `infrastructure/outline-argocd/oidc.yaml` | | S3 credential delivery into ns `outline` | `infrastructure/outline-argocd/credentials.yaml` | | Valkey StatefulSet (the queues) | `infrastructure/valkey-outline/` | | CNPG tenant database + OpenBao policy | `infrastructure/tenantdatabase/outline.yaml`, `policy.yaml` | | scoped RustFS key | `infrastructure/rustfs-identities/outline.yaml` | | gateway listeners, certificate, portal card | `infrastructure/portal/` | | Flux wrappers | `clusters/seanfarm/infrastructure/{outline,valkey-outline}.yaml` | Outline's own Deployment, Service and HTTPRoute are NOT here. They belong to `sean/outline` and reach the cluster through the root Application. ## No ForgejoRepository CR This is the first repository created by Binjovi's `create_repository` MCP tool, which queues the repository and its codeberg push mirror together. A CR would be a second owner of the same object, and the two disagree the first time either is edited. `tests/outline.sh` refuses one. ## Three settings that carry more weight than they look - **`maxmemory-policy noeviction`** on the Valkey. Outline drives it through `bull`, and BullMQ must not run on a Redis with a cache eviction policy: an evicted key is a silently dropped job, not an error. A default `allkeys-lru` Valkey passes every health check and loses work. - **`appendonly yes`**. The same queues are the only record of in-flight work, and a node roll restarts this pod by design. - **The exact OIDC callback**, `${URL}/auth/oidc.callback`, read from `plugins/oidc/server/auth/oidcRouter.ts` at v1.10.1. Hydra refuses a `redirect_uri` that does not match character for character, and reports it on Hydra's own login page — a wrong path here looks like a broken Outline with the cause in another namespace. ## arm64 The registrar runs on the multi-arch house toolchain (the pin from #701), the Valkey image is pinned to an index digest verified to carry a `linux/arm64` child, and the Valkey carries the `arm-canary` toleration. ## Guard `tests/outline.sh` is new and wired into `tests/check.sh`. It checks the whole shape as one object and carries seven negative controls, each proved to go red. `tests/lib/rustfs-contracts.jq` now also reads `AWS_ACCESS_KEY_ID` as an identity access key: each consumer's driver fixes its own spelling, and without this an identity escapes the check merely by having been written against a different upstream. ## Ships with `sean/binjovi-plans` declares the `outline` bucket and its policy in `object-store.json`; Binjovi converges them. Until that catalog is released, the Secret here holds a key RustFS has never heard of and uploads answer 403 — the intended order, not a fault. https://claude.ai/code/session_01JGe4pyhQ36AhgDfPJry4d3
feat(outline): onboard the Outline wiki
Some checks failed
binjovi/ci Binjovi failed the frozen plan
8887583492
Give outline.sean.farm everything this repository owns: the namespace,
the ArgoCD seed that lets sean/outline own its own Deployment, a CNPG
tenant database, a Valkey for the queues, a scoped RustFS key, a Hydra
OIDC client, the gateway listeners, the certificate and the portal card.

THE REPOSITORY HAS NO ForgejoRepository CR. It is the first one created
by Binjovi's create_repository MCP tool, which queues the repository and
its codeberg push mirror together. A CR would be a second owner of the
same object. tests/outline.sh refuses one.

Three settings carry more weight than they look:

  maxmemory-policy noeviction on the Valkey. Outline drives it through
  bull, and BullMQ must not run on a Redis with a cache eviction policy:
  an evicted key is a silently dropped job, not an error. A default
  allkeys-lru Valkey passes every health check and loses work.

  appendonly yes. The same queues are the only record of in-flight work,
  and a node roll restarts this pod by design.

  The exact OIDC callback, ${URL}/auth/oidc.callback, read from Outline's
  own router. Hydra refuses a redirect_uri that does not match character
  for character, and reports it on Hydra's login page -- so a wrong path
  here looks like a broken Outline with the cause in another namespace.

The registrar runs on the multi-arch house toolchain, the Valkey image is
pinned to a verified multi-arch index digest, and the Valkey carries the
arm-canary toleration: every node in this fleet is arm64.

tests/lib/rustfs-contracts.jq now also reads AWS_ACCESS_KEY_ID as an
identity access key. Each consumer's driver fixes its own spelling, and
without this an identity escapes the check merely by having been written
against a different upstream.

The bucket and the policy behind the key are declared in
sean/binjovi-plans object-store.json, which Binjovi converges; that
change ships beside this one.

Claude-Session: https://claude.ai/code/session_01JGe4pyhQ36AhgDfPJry4d3
sean force-pushed feat/onboard-outline from 8887583492
Some checks failed
binjovi/ci Binjovi failed the frozen plan
to fa51ca2452
All checks were successful
binjovi/ci Binjovi completed the frozen plan
2026-09-13 13:01:10 +00:00
Compare
binjovi-bot deleted branch feat/onboard-outline 2026-09-13 13:02:52 +00:00
Sign in to join this conversation.
No reviewers
No labels
No milestone
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
sean/seanfarm!705
No description provided.