Justfile Commands
The project Justfile provides recipes for common development, build, and
deployment tasks. Run just --list to see all available recipes or
just <recipe> --help for usage details.
The intended developer entrypoint is direnv allow or nix develop, then
just info to confirm substrate state. For Bazel dogfood, use
just bazel-build-cached only after just cache-contract-strict passes. Raw
local bazel build, raw local bazel test, bazelisk, and --config=ci
remain compatibility or debug paths only.
Current main proves shared cache acceleration here, not full remote offload
for every developer workload.
Proxy
Recipes for the compatibility SOCKS5 proxy path. The preferred operator model
is direct or tailnet-private access to the honey cluster via
~/.kube/kubeconfig-honey.yaml and context honey.
| Recipe | Description |
|---|---|
just proxy-up |
Start the SOCKS5 proxy via SSH tunnel for compatibility access |
just proxy-down |
Stop the SOCKS5 proxy tunnel |
just proxy-status |
Check whether the proxy tunnel is running |
just bk <args> |
Run kubectl through the SOCKS proxy (shorthand for proxied kubectl) |
just bcurl <args> |
Run curl through the SOCKS proxy |
Development
General development workflow recipes.
| Recipe | Description |
|---|---|
just setup |
Seed .env, explain backend-init paths, and point back to just info |
just dev |
Start all development servers (app + docs) |
just check |
Run the bounded local contract suite, including docs, product truth, RBE, cache, and ARC guards |
just check-public-docs |
Validate the future public docs package manifest and scrub rules |
just dogfood-contract-audit |
Forbid first-party hosted-runner usage plus unclassified stale-endpoint and raw-Bazel drift |
just dogfood-contract-audit-self-test |
Prove the dogfood audit catches hosted scalar, block-list, matrix, and exception drift |
just public-alpha-visibility-report |
Report whether direct repo visibility is blocked by current tree/history |
just public-alpha-visibility-strict |
Fail until direct repo visibility blockers are resolved |
just public-alpha-export-check |
Validate the scrubbed public-alpha mirror seed manifest and scrub rules |
just public-docs-generate |
Regenerate structured public-docs reference pages from repo metadata |
just check-full |
Run bounded checks, full Nix flake checks, and tofu validation |
just info |
Print project info plus backend and Bazel substrate state |
just cache-contract |
Classify current cache attachment without contacting services or running Bazel |
just cache-contract-strict |
Require a real BAZEL_REMOTE_CACHE endpoint for cache-backed dogfood |
just cache-contract-nix-strict |
Require NIX_CONFIG to include the configured Attic substituter and public key |
just product-reality-review-check |
Validate the BCR/RBE/RustFS product reality review stays grounded |
just attic-public-key-contract-check |
Validate committed runner tfvars agree on the public Attic trust key |
just attic-cache-authority-check |
Verify live Attic cache public-read and trust-key authority |
just attic-nar-integrity-check [args...] |
Verify a live Attic narinfo entry has a NAR body that streams cleanly |
just setup-flywheel-cache-hints-check |
Validate composite-action cache hint exports without contacting live services |
just workflow-cache-proof-check |
Validate workflow proof lanes assert the cache attachment contracts |
just rbe-boundary-check |
Validate default Bazel surfaces stay cache-backed unless executor-backed mode is explicit |
just rbe-storage-provider-boundary-check |
Validate CAS/distdir docs have no Civo or premature provider selection |
just rbe-proof-contract-check |
Validate the explicit non-default RBE proof wrapper contract |
just rbe-target-eligibility-check |
Validate target-class eligibility before expanding RBE claims |
just rbe-platform-contracts-check |
Validate Linux and Darwin RBE platform identities and Darwin signing-custody boundaries |
just rbe-worker-toolchain-model-contract-check |
Validate the current RBE worker toolchain model boundary |
just browser-runtime-authority-contract-check |
Validate the Chromium browser runtime authority for web RBE proof classes |
just web-rbe-candidate-template-contract-check |
Validate the public web RBE candidate template and guide |
just arc-runner-executor-endpoint-contract-check |
Validate opt-in ARC runner executor endpoint wiring |
just gf-reapi-cell-manifest-check |
Validate the explicit gf-rbe REAPI proof manifest boundary |
just gf-reapi-cell-capacity-policy-check |
Validate the gf-reapi-cell proof-window scale-to-zero capacity boundary |
just gf-reapi-cell-publish-contract-check |
Validate gf-reapi-cell image publication and manifest rendering boundaries |
just gf-reapi-cell-proof-contract-check |
Validate the explicit gf-reapi-cell live proof harness boundary |
just darwin-rbe-proof-dispatch-contract-check |
Validate the Darwin-specific proof dispatch/readiness wrapper |
just gf-reapi-ac-nuke-key-contract-check |
Validate surgical action-cache nuke-key, quarantine, and rollback mechanics |
just gf-reapi-ac-attestation-chaos-check |
Validate W2.5 non-attested action-cache writer rejection and nightly workflow wiring |
just bazel-cache-exposure-policy-check |
Validate developer-machine and package-cache exposure policy boundaries |
just bazel-remote-cache-cas-integrity-audit [args...] |
Audit bazel-remote CAS decoded payload digest integrity |
just bazel-remote-cache-cas-integrity-contract-check |
Validate the CAS integrity audit stays read-only and failure-signaling |
just pilot-workflow-contract-check |
Validate public pilot workflow examples stay cache-backed and write-gated |
just bazel-executor-backed-contract-check |
Validate opt-in executor-backed Bazel wrapper wiring |
just bazel-benchmark-modes-contract-check |
Validate cold/cache-backed/executor-backed benchmark evidence stays separated |
just consumer-bazel-wrapper-contract-check |
Validate copied consumer Bazel wrapper cache, fetch, and input wiring |
just flywheel-consumer-env-contract-check |
Validate copied consumer Bazel environment profiles |
just flywheel-profile-distribution-contract-check |
Validate fleet-managed non-secret profile distribution wiring |
just flywheel-enrollment-frontdoor-contract-check |
Validate enroll/doctor/verify profile-state classification |
just flywheel-doctor [args...] |
Explain the current GloriousFlywheel enrollment/profile state |
just flywheel-verify [args...] |
Fail unless the current shell is attached or explicitly in local-proof mode |
just flywheel-enroll <profile> [args...] |
Materialize fallback .env.flywheel.local profile metadata |
just flywheel-consumer-env <profile> [args...] |
Materialize a sourceable non-secret consumer Bazel env profile |
just dev-attach-contract-check |
Validate just dev-attach uses strict Bazel/Nix attachment semantics |
just rustfs-openebs-restart-hygiene-contract-check |
Validate RustFS/OpenEBS restart ownership work stays bounded |
just tofu-state-contract-check |
Validate active honey S3 state keys stay explicit and fail closed elsewhere |
just rustfs-bucket-index-rca-empty-state-keys-contract-check |
Validate bucket-only RustFS RCA mode handles no required state keys |
just rustfs-state-authority-parser-contract-check |
Validate RustFS S3 list-buckets parsing ignores owner display names |
just attic-nar-integrity-contract-check |
Validate Attic NAR integrity failure reporting stays structured and read-only |
just rustfs-repair-surface-contract-check |
Validate RustFS repair-surface inventory stays read-only and truth-preserving |
just rustfs-admin-status-contract-check |
Validate RustFS admin status probing stays read-only and truth-preserving |
just rustfs-heal-semantics-contract-check |
Validate RustFS heal source audit stays source-only and truth-preserving |
just rustfs-bucket-meta-semantics-contract-check |
Validate RustFS bucket-metadata admin audit stays source-only and truth-preserving |
just rustfs-trusted-publication-gate-check |
Validate the static TIN-1147 trusted Attic publication backend gate |
just rustfs-trusted-publication-gate-contract-check |
Validate the TIN-1147 gate contract and documentation wiring |
just attic-backend-replacement-package-gate [args...] |
Validate a non-secret TIN-1147 Attic backend replacement package |
just attic-backend-replacement-package-template [output] |
Write the intentionally non-live Attic backend replacement package template |
just rustfs-upgrade-topology-candidate-check |
Validate the static RustFS upgrade-topology candidate packet |
just rustfs-upgrade-topology-candidate-contract-check |
Validate the upgrade-topology candidate packet and documentation wiring |
just rustfs-upgrade-topology-proof-plan-check |
Validate the static RustFS upgrade-topology proof plan |
just rustfs-upgrade-topology-proof-plan-contract-check |
Validate the upgrade-topology proof plan and documentation wiring |
just rustfs-upgrade-topology-plan-guard [plan-json] |
Guard a saved OpenTofu plan for the RustFS upgrade-topology attempt |
just rustfs-upgrade-topology-plan-guard-contract-check |
Validate the RustFS upgrade-topology saved-plan guard wiring |
just tofu-module-docs-check |
Validate OpenTofu module reference docs match tofu/modules |
just bazel-external-fetch-authority [args...] |
Report Bazel external repository/archive fetch authority |
just bazel-repository-cache-evidence [args...] |
Summarize run-local Bazel repository-cache population evidence |
just bazel-external-input-manifest [args...] |
Render the Bazel lockfile external input manifest |
just nix-flake-source-input-manifest [args...] |
Render locked Nix flake source archive inputs |
just nix-flake-source-input-authority [args...] |
Validate the Nix flake source input authority contract |
just nix-flake-source-mirror-package [args...] |
Package already-materialized Nix flake source archives into the mirror layout |
just nix-flake-source-mirror-verify [args...] |
Verify a provider-neutral Nix flake source mirror package root |
just nix-flake-source-mirror-restore [args...] |
Restore a local Nix flake source archive root from a mirror package |
just nix-flake-source-mirror-package-contract-check |
Validate the Nix flake source mirror package/restore primitive |
just nix-flake-source-authority-package-gate [args...] |
Validate a non-secret Nix flake source authority package |
just nix-flake-source-authority-package-template [output] |
Write the intentionally non-live Nix flake source authority package template |
just nix-flake-source-authority-package-contract-check |
Validate the Nix flake source authority package gate wiring |
just bazel-distdir-mirror-package [args...] |
Package a verified local distdir into the provider-neutral mirror layout |
just bazel-distdir-mirror-verify [args...] |
Verify a provider-neutral distdir mirror package root |
just bazel-distdir-mirror-restore [args...] |
Restore a local Bazel distdir from a provider-neutral mirror package root |
just bazel-distdir-mirror-package-contract-check |
Validate the provider-neutral distdir mirror package primitive |
just bazel-distdir-mirror-restore-contract-check |
Validate restored --distdir proof from a provider-neutral mirror package |
just bazel-distdir-full-package-proof |
Run the TIN-1468 full-candidate distdir package/restore proof |
just bazel-distdir-full-package-proof-contract-check |
Validate the TIN-1468 full-candidate proof workflow and docs wiring |
just bazel-distdir-mirror-live-proof [args...] |
Prove a validated distdir mirror package through the selected live S3-compatible authority |
just bazel-distdir-mirror-live-readiness [args...] |
Check live mirror package and scoped credential readiness before proof runtime |
just bazel-distdir-mirror-github-readiness [args...] |
Check visible GitHub variable/secret names for TIN-1468 live-proof injection |
just e3-external-input-authority-status [args...] |
Render read-only E3/TIN-1447 external-input authority close-gate status |
just bazel-distdir-mirror-live-proof-contract-check |
Validate TIN-1468 live mirror proof workflow and safety wiring |
just bazel-external-input-distdir [args...] |
Materialize a verified Bazel distdir from candidate input metadata |
just bazel-distdir-coverage [args...] |
Validate the Bazel distdir source-proof coverage contract |
just bazel-external-input-authority [args...] |
Validate the durable Bazel external input authority contract |
just bazel-external-input-authority-package-gate [args...] |
Validate a non-secret Bazel external-input authority package |
just bazel-external-input-authority-package-template [output] |
Write the intentionally non-live external-input authority package template |
just bazel-vendor-mode-canary |
Run the W3.4 Bazel vendor-mode external-input canary |
just bazel-vendor-mode-canary-contract-check |
Validate W3.4 vendor-mode canary workflow, script, and docs wiring |
just bazel-external-input-manifest-check |
Validate the Bazel external input manifest guard |
just nix-flake-source-input-authority-contract-check |
Validate the Nix flake source input authority contract |
just bazel-external-input-distdir-check |
Validate the Bazel external input distdir materializer guard |
just bazel-distdir-coverage-contract-check |
Validate the Bazel distdir source-proof coverage contract |
just bazel-external-input-authority-contract-check |
Validate the durable Bazel external input authority contract |
just bazel-external-input-authority-package-contract-check |
Validate external-input authority package gate wiring |
just e3-external-input-authority-status-contract-check |
Validate E3 external-input authority status fixtures and docs wiring |
just bazel-external-fetch-authority-self-test |
Validate external-fetch authority classification and wrapper CLI wiring |
just bazel-repository-cache-evidence-contract-check |
Validate W3.3 repository-cache evidence generation |
just bazel-http-archive-pins-check |
Validate direct Bazel http_archive / http_file calls declare non-empty sha256 pins |
just bazel-lockfile-contract-check |
Validate MODULE.bazel.lock checker stale-vs-unavailable behavior |
just developer-cache-attachment-proof [target] [upload] |
Prove developer-machine cache attachment with a bounded Bazel target |
just public-docs-export [out] |
Materialize the scrubbed future public docs package into out |
just public-alpha-export [out] |
Materialize the scrubbed public-alpha mirror seed into out |
just bazel-external-input-authority-package-gate --package <path> validates
the non-secret W3/TIN-1468 package for a future durable Bazel external-input
mirror. The package must name a dedicated endpoint and bucket, scoped
GF_EXTERNAL_INPUT_MIRROR_* credential environment variables, a dedicated
mirror_prefix, mirror layout, restore proof, read-only consumer exposure,
retention/maintenance behavior, quota policy, observability, and authority
separation. It rejects Civo, RustFS, current Attic/cache/state buckets, inline
secrets, protected prefixes, and template sentinels. The package is readiness
evidence only; the durable authority contract remains
no-live-durable-authority until live restore proof updates covered_inputs.
just bazel-external-input-authority-package-template [output] writes the
expected package shape with posture=candidate_only, replace-me, and
example.invalid sentinels. It must fail the package gate until an operator
fills in real non-secret backend details, then the live-readiness guard must
still reject it until the posture is deliberately promoted to proof_ready.
Do not commit credentials into the package.
just nix-flake-source-input-manifest inventories the locked GitHub archives in
flake.lock, including each owner/repo, rev, narHash, original ref, and archive
URL. just nix-flake-source-input-authority validates
docs/contracts/nix-flake-source-input-authority.json: current first-party CI is
classified as authenticated-live-GitHub-only, not durable authority. The gate
requires setup-flywheel and nix-job to keep Nix github.com access-token
plumbing, requires every GitHub flake input to remain rev+narHash pinned, and
fails if the contract claims durable coverage before mirror, restore, retention,
provenance, auth, and consumer exposure evidence exists.
just nix-flake-source-mirror-package --source-manifest <manifest.json> --source-root <archives> --mirror-root <mirror> packages already-materialized
flake source archives into a provider-neutral local mirror root. The package
records archive_sha256 for tarball bytes separately from the locked Nix
narHash; it is a local byte/provenance primitive, not live durable source
authority. just nix-flake-source-mirror-verify checks the package bytes and
sidecars, and just nix-flake-source-mirror-restore reconstructs a local source
archive root plus nix-flake-source-archive-manifest.json for the future live
restore proof.
just nix-flake-source-authority-package-template writes the non-secret package
shape for the future dedicated Nix flake source archive authority. The template
uses posture=candidate_only, replace-me, and example.invalid sentinels, so
just nix-flake-source-authority-package-gate must reject it until an operator
fills in real backend details. The package uses scoped credential env names such
as GF_NIX_FLAKE_SOURCE_MIRROR_ACCESS_KEY_ID and must not reuse Attic,
OpenTofu state, Bazel distdir, Bazel remote cache, or RBE CAS/action-cache
surfaces. Passing the package gate is still not live durable authority; the
status stays authenticated-live-GitHub-only until mirror placement, restore,
retention, provenance, auth-boundary, and consumer-exposure evidence exists.
just bazel-distdir-full-package-proof runs the TIN-1468 full-candidate
package mechanics proof: materialize every entry in
docs/contracts/bazel-external-input-mirror-candidates.json, package the
verified bytes into the provider-neutral mirror layout, verify
--all-candidates, restore --all-candidates, and emit
bazel-distdir-full-package-proof-evidence.json. The scheduled workflow runs
on tinyland-nix-heavy and mirrors evidence to the Actions step summary.
Artifact upload is opt-in through
GF_UPLOAD_BAZEL_DISTDIR_FULL_PROOF_ARTIFACTS=true so GitHub artifact quota
does not mask the proof result. This remains package/restore mechanics only:
it is not live durable mirror storage, CAS/action-cache authority, or
broad/default RBE.
just bazel-distdir-full-package-proof-contract-check is the bounded local
guard used by just check. It verifies the script, workflow, and docs wiring
without downloading the full candidate archive set.
just bazel-distdir-mirror-live-proof --package <package.json> --mirror-root <mirror-root> --all-candidates is the live TIN-1468 proof harness. It first
revalidates the non-secret authority package and local mirror package, then
uses the package’s scoped GF_EXTERNAL_INPUT_MIRROR_ENDPOINT,
GF_EXTERNAL_INPUT_MIRROR_REGION,
GF_EXTERNAL_INPUT_MIRROR_ACCESS_KEY_ID, and
GF_EXTERNAL_INPUT_MIRROR_SECRET_ACCESS_KEY environment variables to upload
the package to the selected bucket/prefix, download it back into a fresh mirror
root, verify the bytes, restore a local BAZEL_DISTDIR, and write
bazel-distdir-mirror-live-proof-evidence.json. The matching manual workflow,
Bazel Distdir Mirror Live Proof, dogfoods tinyland-nix-heavy, does not use
GitHub-hosted runners, and mirrors evidence into the Actions step summary
instead of depending on artifact quota. Passing this proof is candidate live
authority evidence; contract promotion remains a separate reviewed change.
just bazel-distdir-mirror-live-readiness is the fail-closed preflight for
that live proof. It validates the non-secret authority package, requires
posture=proof_ready, checks that the scoped GF_EXTERNAL_INPUT_MIRROR_*
environment names are present, verifies endpoint/region values match the
package, and writes redacted
bazel-distdir-mirror-live-readiness-evidence.json. Missing package or missing
credentials is a readiness blocker, not runner capacity or Bazel proof failure.
just bazel-distdir-mirror-github-readiness checks the GitHub-side injection
surface before dispatching the live proof. It lists visible GitHub variable and
secret names only, never values. Endpoint and region may be GitHub variables
or secrets, but the access-key and secret-key names must be GitHub secrets.
RustFS, Attic, Civo, OpenTofu state, broad AWS, Bazel remote cache, and future
RBE CAS/action-cache credentials are reported as substitute names and do not
count as TIN-1468 readiness.
just e3-external-input-authority-status renders the read-only E3/TIN-1447
close-gate status from GitHub workflow metadata, the non-secret authority
package gate, and the same GitHub variable/secret-name readiness surface. It
reports the W3.4 vendor-mode nightly streak plus the latest on-demand green
vendor proof, the Bazel Distdir Full Package Proof nightly streak, whether a
proof_ready authority package exists, scoped mirror injection readiness, and
whether a reviewed Bazel Distdir Mirror Live Proof has passed on main. Because
operator review is not inferable from Actions metadata, pass reviewed live
proof IDs explicitly, for example --reviewed-live-proof-run-id 123456789.
The command is intentionally
non-mutating: it reads run metadata and visible GitHub name lists only, never
secret values, and performs no S3, Bazel, Kubernetes, Attic, OpenTofu, or RBE
mutation.
just bazel-vendor-mode-canary runs the W3.4/TIN-1470 vendor-mode canary:
stage verified distdir inputs for the Linux x64 Node toolchain and the
hermetic_launcher prebuilt stubs, invoke bazel vendor with a bounded
scratch-disk and timeout guard, and, on success, consume the generated vendor
directory for //:deployment_bundle. The default full scope is the
lockfile-authoritative E3 close signal; GF_VENDOR_MODE_SCOPE=production
passes --ignore_dev_dependency for operator investigation without rewriting
MODULE.bazel.lock. GF_VENDOR_MODE_DISTDIR_INPUTS can override the staged
input set for focused investigations; the legacy single-input
GF_VENDOR_MODE_DISTDIR_INPUT remains accepted. The scheduled canary runs on
tinyland-nix-heavy and requires a 192Gi scratch preflight because current
full-scope proofs materialize roughly 170Gi before cleanup. It also passes
GF_VENDOR_MODE_BAZEL_HOST_JVM_XMX to Bazel as an explicit host JVM heap
envelope. The workflow writes evidence JSON to the Actions step summary and job
log, and attempts artifact upload on a best-effort basis because GitHub
artifact quota must not hide the canary result. A green canary is mirror
completeness evidence only; it is not durable mirror storage, CAS/action-cache
authority, or broad/default RBE.
just bazel-vendor-mode-canary-contract-check is the bounded local guard used
by just check. It verifies the script, workflow, and docs wiring without
vendoring the external repository graph.
First-Party CI Dogfood
just dogfood-contract-audit enforces the rule that GloriousFlywheel’s own
merge-blocking validation, security scans, Bzlmod/Bazel canaries, RBE proof
surfaces, and runner-status workflows must dogfood shared tinyland-*
capability-class runners. The source repo has a zero-exception hosted-runner
rule for first-party CI, publication, status, and release workflows. The audit
fails direct hosted runs-on scalars, multi-line runs-on lists, matrix/env
hosted-runner literals, and any attempt to add a configured hosted-runner
exception. Queue pressure, billing, artifact quota, or runner availability
issues must be fixed in the shared runner substrate or handled as best-effort
evidence, not hidden behind a GitHub-hosted fallback.
Nix
Recipes for Nix-based builds and maintenance.
| Recipe | Description |
|---|---|
just nix-shell |
Enter the same devshell contract as direnv allow |
just nix-build |
Build the project with Nix |
just nix-build-container |
Build the OCI container image via nix2container |
just nix-check |
Run nix flake check |
just nix-update |
Update flake inputs |
OpenTofu
Infrastructure-as-code recipes for planning and applying changes. Each recipe
takes a stack name argument (e.g., attic, gitlab-runners, runner-dashboard).
| Recipe | Description |
|---|---|
just tofu-state-contract <stack> |
Print the current state-name and proven S3 key contract for one stack/environment |
just tofu-backend-audit |
Summarize backend/init status across all four active stacks |
just tofu-state-authority-proof |
Prove the live honey RustFS-backed S3 state candidate through bounded port-forward and signed S3 access |
just tofu-state-authority-deep-check [stack] |
Deep-check RustFS state authority, including Deployment health, bucket metadata, optional state key, and write/read/delete proof |
just rustfs-bucket-index-rca [args...] |
Capture a bounded RustFS bucket-index RCA snapshot without restarting RustFS |
just tofu-state-ha-readiness [args...] |
Check the current S3 state authority against the expected-red HA gate |
just ha-state-candidate-inventory [args...] |
Inventory live object-store/storage surfaces before choosing an HA OpenTofu state authority candidate |
just ha-state-authority-truth-contract-check |
Check current docs preserve the live HA state-authority failure and TIN-1026/TIN-1017 completion metrics |
just ha-state-candidate-static-gate [args...] |
Validate the written static contract for a future HA OpenTofu state authority candidate |
just ha-state-selected-candidate-static-gate |
Validate the selected managed/appliance S3 HA OpenTofu state candidate contract artifact |
just ha-state-selected-candidate-contract-check |
Check the selected HA state candidate contract and docs wiring |
just ha-state-endpoint-package-gate [args...] |
Validate the non-secret endpoint package for the selected HA OpenTofu state candidate |
just ha-state-endpoint-readiness [args...] |
Check endpoint package and scoped TOFU_HA_STATE_* proof credential readiness before live proof |
just ha-state-github-secret-readiness [args...] |
Check visible GitHub secret names for scoped TOFU_HA_STATE_* proof authority |
just ha-state-endpoint-package-template [output] |
Write an intentionally non-live endpoint package template to fill before proof |
just k8s-secret-last-applied-audit [args...] |
Audit Kubernetes Secrets for last-applied annotations that embed secret data |
just k8s-secret-last-applied-cleanup-plan [args...] |
Render redaction-safe commands that remove leaky Secret last-applied annotations |
just ha-state-candidate-proof [args...] |
Prove a scratch/disposable S3-compatible OpenTofu state candidate before protected state migration |
just ha-state-candidate-inventory-self-test |
Run the offline guard self-test for the HA state candidate inventory classifier |
just ha-state-candidate-static-gate-self-test |
Run the offline guard self-test for the HA state candidate static contract validator |
just ha-state-endpoint-package-self-test |
Run the offline guard self-test for the HA endpoint package gate |
just ha-state-endpoint-readiness-self-test |
Run the offline guard self-test for the HA endpoint readiness gate |
just ha-state-github-secret-readiness-self-test |
Run the offline guard self-test for the HA GitHub secret-name readiness gate |
just ha-state-candidate-proof-self-test |
Run the offline guard self-test for the HA state candidate proof harness |
just arc-runtime-audit |
Inspect live ARC runner-set envelopes, listener config, runner counts, placement, and stale runtime drift |
just arc-prove-listener-caps [args...] |
Settle-aware listener cap prove gate: transient listener recreation settles, persistent drift hard-fails |
just arc-reap-zombies --scale-set <name> [args...] |
Reap idle leaked (zombie) no-job EphemeralRunner CRs that would stall a quiesce drain; supports --dry-run |
just arc-network-continuity-audit [args...] |
Classify Kubernetes API/CNI, kubelet eviction, and node-pressure evidence for ARC disconnects |
just arc-listener-queue-drift [args...] |
Correlate queued GitHub jobs with ARC scale-set activity for listener/session drift |
just arc-shared-label-capacity-audit [args...] |
Inspect shared ARC workflow-label capacity across owner overlay scale sets |
just arc-burst-capacity-audit [args...] |
Inspect ARC burst capacity, shared-label fairness, queue pressure, active jobs, quota, and fast-local scratch |
just arc-burst-capacity-audit-self-test |
Run offline fixture tests for ARC burst capacity diagnostics |
just arc-diagnostic-self-tests |
Run offline fixture tests for ARC network, runtime, queue drift, shared-label, and burst-capacity diagnostics |
just runner-scale-contract-check |
Validate committed runner scale-to-zero, placement, and resource envelope contracts |
just runner-capacity-model-check |
Validate committed runner namespace quotas against ARC/GitLab burst envelopes |
just kubelet-imagefs-capacity-audit [args...] |
Inspect kubelet root/imagefs capacity separately from durable storage capacity |
just kubelet-imagefs-capacity-audit-self-test |
Run offline fixture tests for kubelet root/imagefs warning and critical boundaries |
just honey-runner-workdir-audit [hosts...] |
Inspect honey runner host _work/ state for stale checkout blockers |
just honey-runner-workdir-remediate <host> <repo> … |
Preview or apply bounded remediation for one honey runner repo workdir |
just honey-runner-workdir-reconcile [args...] |
Scan honey runner hosts and automate safe single-repo remediation planning or apply |
just honey-runner-host-lifecycle <host> [action] … |
Inspect or control the bounded lifecycle state for one honey runner host root |
just honey-runner-checkout-triage [args...] |
Start from a failed GitHub Actions run and drive the bounded honey checkout-remediation surface |
just kvm-cache-prewarm-job [args...] |
Render or apply the trusted in-cluster KVM cache prewarm publisher Job |
just orgwide-enrollment-scoreboard [args...] |
Generate the live orgwide runner enrollment scoreboard from recent GitHub workflow state |
just orgwide-enrollment-queue [args...] |
Generate the live orgwide enrollment promotion queue from the current scoreboard |
just implementation-overlay-preflight <root> <tfvars> <repo> [args...] |
Run the read-only implementation-overlay enrollment gate, including core-pin drift checks |
just arc-runner-taxonomy-guard [paths...] |
Validate committed ARC extra runner sets stay capability-class shaped |
just arc-runner-residue-audit [args...] |
Classify live ARC runner residue against shared, overlay-owned, and compatibility lanes |
just arc-runner-rehome-manifest-check |
Validate the static ARC residue rehome manifest without touching cluster or OpenTofu state |
just arc-runner-residue-rehome-plan [args...] |
Render the selected non-mutating ARC residue rehome plan and state-move command skeleton |
just arc-runner-residue-state-check <core-state> <overlay-state> [args] |
Check pulled core and overlay state JSON files against the selected rehome manifest |
just bazel-dogfood-tranche-status [args...] |
Render the live tranche-1 Bazel dogfood proof bundle from current GitHub workflow state |
just tofu-backend-scaffold <stack> |
Create config/backends/<stack>-<env>.hcl from the backend example |
just tofu-backend-scaffold-s3 <stack> |
Create an S3-compatible config/backends/<stack>-<env>.hcl for the active backend family |
just tofu-backend-materialize-http <stack> |
Write config/backends/<stack>-<env>.hcl from the current TF_HTTP_* environment |
just tofu-backend-materialize-s3 <stack> |
Write an S3-compatible backend file from the current TOFU_BACKEND_S3_* environment |
just tofu-backend-materialize-gitlab-legacy <stack> |
Write config/backends/<stack>-<env>.hcl from gitlab.project_id + TF_HTTP_PASSWORD |
just tofu-preflight <stack> |
Check local prerequisites for a stack before tofu init |
just tofu-init <stack> |
Initialize tofu for a stack |
just tofu-plan <stack> |
Run tofu plan for a stack (uses {ENV}.tfvars plus stack-specific additive tfvars when present) |
just tofu-plan-guard <stack> |
Inspect a saved tfplan for destructive runner/cache rollout drift before apply |
just tofu-apply <stack> |
Apply a saved plan for a stack |
just tofu-deploy <stack> |
Full deploy cycle: init, plan, apply |
just tofu-validate-all |
Validate all initialized stacks and check module formatting |
Note: tofu-plan expects a {ENV}.tfvars file (default dev.tfvars) in
the stack directory. ENV=dev and ENV=prod are logical deployment
environments and can both map to the same physical cluster, such as honey.
For arc-runners, the local operator path also auto-includes
{ENV}-policy.tfvars before local overrides and
{ENV}-extra-runner-sets.tfvars when present, so the committed ARC baseline
and additive lanes like tinyland-nix-heavy join the same local plan/apply
path. For overlay deployments, create your tfvars there or use the per-stack
Justfiles directly.
Current backend note:
just tofu-init <stack>follows the active backend family declared in that stack’sbackend.tf- all four active stacks now use
backend "s3"on the environment-ownedhoneystate path TOFU_BACKEND_CONFIG_FILE,TOFU_BACKEND_CONFIG_DIR, andTOFU_BACKEND_S3_*are now the primary local init paths across those active stacksTF_HTTP_*remains compatibility-only for legacy or archived HTTP-backend repair pathstofu-applyruns the saved-plan guard by default and fails before apply if the plan deletes/replaces protected runner namespaces, namespace policy, cache PVCs/buckets, or introduces repo-scoped ARC registration URLs or repo-shaped runner label drift; setGF_TOFU_PLAN_GUARD_ALLOW=1only for a reviewed maintenance exception- for
arc-runners,tofu-applyalso runsscripts/arc-local-apply-source-guard.sh, which refuses dirty or non-origin/mainlocal source; use the managedDeploy ARC Runnersworkflow for ordinary capacity changes and setGF_ARC_RUNNERS_LOCAL_APPLY_ALLOW=1only for a reviewed break-glass local apply - when a stack flips to
backend "s3", the same root entrypoint can use a matching backend HCL file or the liveTOFU_BACKEND_S3_*environment path - if
config/backends/<stack>-<env>.hclexists,just tofu-init <stack>now treats it as the implicit local default without requiringTOFU_BACKEND_CONFIG_DIR - the live direction is environment-owned S3-compatible state on
honey
just tofu-preflight <stack> is the shortest local check before init. It
validates:
config/organization.yaml- the resolved
ENVcluster context - the resolved kubeconfig path and local context presence
{ENV}.tfvarsfor the chosen stack- for
arc-runners, the baseline{ENV}-policy.tfvarsfile when present - for
arc-runners, the optional{ENV}-extra-runner-sets.tfvarsfile when present - the currently configured backend-init path
- when the active family is
s3, theTOFU_BACKEND_S3_*environment path and state-key resolution
just tofu-backend-audit runs the same preflight logic across all four active
stacks and prints the current backend mode, backend ref, and first blocking
reason for each one. This is the fastest way to confirm whether Slice 1 is
blocked on local setup drift or on one shared backend-authority decision.
just tofu-state-authority-proof is the live runtime check for the proven
RustFS-backed S3 candidate on honey. It reads the cluster-managed credentials
secret, opens a bounded port-forward to attic-rustfs-openebs, runs signed
aws s3api reads, and prints the current bucket and object-key view. Use this
when the question is “does the environment-owned S3 state authority actually
exist and answer now?” rather than “can the current local stack init path run?”
just tofu-state-authority-deep-check [stack] is the stronger protected-apply
guard. It uses the cluster-managed RustFS secret and a bounded port-forward,
but signs S3 requests without requiring AWS CLI. It checks the RustFS Deployment
and ready pod, inspects /data/<bucket> and
/data/.rustfs.sys/buckets/<bucket> when kubectl exec is allowed, verifies
the S3 API bucket view, optionally requires the stack’s canonical state object,
GETs/parses that state object as JSON with --read-state-objects, and
writes/reads/deletes a temporary sentinel object. Use this before protected
OpenTofu mutation when RustFS bucket-index reliability is in question.
just rustfs-bucket-index-rca [args...] captures the incident/RCA evidence
around RustFS bucket-index reliability without restarting RustFS. It prints the
workload shape, selected pod, RustFS process/version evidence, PVC/job state,
bootstrap and lifecycle logs, recent RustFS logs, namespace events, and the
state authority deep check. Pass --scratch-probe to create and delete an
isolated scratch bucket that proves normal API/disk coherence without touching
the real OpenTofu state objects. The default tofu-state bucket probe checks
the known GloriousFlywheel state keys. Non-default buckets are bucket-only
checks unless you pass explicit keys. Pass --strict-scratch-disk-markers with
--scratch-probe when the probe should fail if scratch bucket disk markers are
missing after create or still present after API delete. Lifecycle Job log reads
are bounded by default with --job-log-timeout 3s and --job-log-tail 160.
The RCA also captures transient rustfs-bucket-ensure-* Job and Pod names,
logs, labels, annotations, owner references, and event-only pod names because
those objects can appear in the event window immediately before a bucket-index
recurrence, then be TTL-cleaned before the incident artifact is collected. Large
bucket directories are sampled rather than fully enumerated, and expensive
du summaries are skipped on bucket-sized paths, so an attic bucket with many
chunk directories cannot consume the canary window before bucket-index and NAR
evidence is captured. Example:
just rustfs-bucket-index-rca --bucket attic \
--state-key opentofu/states/mail-honey.tfstate
The same probe runs through the self-hosted RustFS State Authority Canary
workflow on main, on demand, and hourly while RustFS remains the interim
state authority. That workflow runs on the shared tinyland-nix-operator
dogfood lane because it uses kubeconfig-backed operator probes and bounded
port-forwards; it is not allowed to fall back to hosted runners or the generic
Nix overflow lane. It publishes the interim HA-readiness output, read-only
attic bucket-index RCA output, Attic NAR integrity output, strict scratch
bucket-index RCA output, and read-only HA state candidate inventory as
artifacts. The Attic evidence steps run with if: always() so tofu-state
failure does not prevent capture of cache-read evidence, and stderr is folded
into the uploaded artifacts so exact FAIL: lines are preserved outside the
Actions log. The scratch RCA path uses --strict-scratch-disk-markers, so a
green canary means the scratch bucket was visible through both the S3 API and
RustFS disk markers during create, and the disk markers were gone after API
delete. The state RCA path also reads and JSON-validates the known OpenTofu
state object bodies without logging contents. It is current coherence evidence
for known RustFS debt, not a strict HA gate and not Bazel RBE or BCR authority.
A NO_LIVE_HA_STATE_CANDIDATE inventory verdict should be treated as captured
TIN-1012 evidence, not as a canary failure.
just rustfs-repair-surface-inventory [args...] captures the live RustFS
repair/admin surface without starting a repair, creating a scratch bucket,
restarting the pod, or running Attic publication. It records the deployment
shape, selected pod, image, process command line, top-level rustfs CLI help,
safe non-config rustfs info output, installed admin/client binary candidates,
and recent repair-relevant logs. Use it for TIN-1147 evidence before deciding
whether the next path is a signed RustFS heal probe, a RustFS upgrade/topology
change, or backend replacement. A green inventory does not restore trusted
Attic writes and does not promote RustFS to HA state or RBE CAS/action-cache
authority.
just rustfs-admin-status-probe [args...] sends one status-only request to the
signed admin endpoint /rustfs/admin/v3/background-heal/status through a
temporary port-forward. It uses the deployed RustFS credentials but does not
call /heal/, create scratch buckets, restart RustFS, or run Attic
publication. A green probe proves admin-auth observability for TIN-1147; it is
not a non-restart repair proof and does not restore trusted Attic writes.
just rustfs-heal-semantics-audit [args...] audits the tagged RustFS source
tree, defaulting to /private/tmp/rustfs-v1.0.0-beta.1-source. It does not
call live /heal/ endpoints. It also does not port-forward, restart RustFS,
create buckets, or run Attic publication. It verifies the status endpoint remains
observability-only and records the current source finding that
/rustfs/admin/v3/heal/{bucket} parses HealOpts but builds the channel
request with create_heal_request, whose dry_run field is None; the heal
processor then defaults missing dry_run to false. Treat that endpoint as a
mutating repair path unless a future source audit proves otherwise.
just rustfs-bucket-meta-semantics-audit [args...] audits the tagged RustFS
source tree, defaulting to /private/tmp/rustfs-v1.0.0-beta.1-source. It does
not call live bucket-metadata admin endpoints, port-forward, restart RustFS,
create buckets, or run Attic publication. It verifies that
/rustfs/admin/v3/export-bucket-metadata is tied to the current bucket API
view through list_bucket/get_bucket_info, not an independent disk-marker
reindex path. It also records that /rustfs/admin/v3/import-bucket-metadata
is a mutating archive import path that can call make_bucket with
force_create; the current handler does not persist the accumulated imported
metadata config updates. Treat export/import-bucket-metadata as unproved for
TIN-1147 until a future controlled live proof shows otherwise.
just rustfs-trusted-publication-gate-check [args...] validates
rustfs-trusted-publication-backend-gate.json,
the static TIN-1147 stop/go gate for restoring trusted Attic publication. The
gate accepts only three proof paths: non-restart RustFS repair/reindex,
RustFS upgrade/topology fix, or backend replacement. It explicitly rejects
restart-only recovery, green canary-only coherence, source-only admin-route
existence, dry-run assumptions, ARC dispatch evidence, RBE proof evidence, and
OpenTofu state-only HA proof as substitutes for trusted Attic publication
backend evidence.
just attic-backend-replacement-package-gate --package <path> validates the
non-secret package for the backend_replacement path in the TIN-1147 trusted
Attic publication gate. The package must keep the trusted publication gate
closed, name only replacement-backend endpoint and credential environment
variables, reject inline secret material, reject the current
attic-rustfs-openebs and cache service endpoints, and document scratch
object proof, representative small-check/medium-check publication proof,
read compatibility for existing Attic objects, retention, restore,
maintenance, observability, rollback, and quarantine. It is a static package
gate only; it does not run live kubectl, OpenTofu, RustFS repair, or Attic
publication commands.
just attic-backend-replacement-package-template [output] writes the expected
Attic backend replacement package shape. The generated template contains
replace-me and example.invalid sentinels and must fail
just attic-backend-replacement-package-gate --package <output> until an
operator fills in real non-secret backend details. Do not commit credentials
into the package; it may name ATTIC_BACKEND_REPLACEMENT_* environment
variables but not their values.
just rustfs-upgrade-topology-candidate-check [args...] validates
rustfs-upgrade-topology-candidate.json,
the non-secret TIN-1152 packet for evaluating RustFS 1.0.0-beta.4 through
the TIN-1147 upgrade/topology path. The packet records upstream release and
compare links, preserves the current beta.1 rollback digest, records the
selected Docker Hub beta.4 manifest/platform digests, and keeps trusted Attic
publication disabled until operator-approved post-upgrade tofu-state,
attic bucket-index, NAR integrity, and representative
small-check/medium-check publication evidence exist.
just rustfs-upgrade-topology-proof-plan-check [args...] validates
rustfs-upgrade-topology-proof-plan.json,
the source-owned, non-mutating proof plan for the upgrade-topology path. The plan narrows
the eventual live change to the rustfs_image field in
tofu/stacks/attic/honey.tfvars, preserves the beta.1 rollback digest, rejects
Civo as an endpoint or fallback, requires just tofu-plan-guard attic, and
keeps trusted Attic publication disabled until post-upgrade tofu-state,
bucket-index RCA, NAR integrity, and representative small-check/medium-check
publication evidence clear the current NoSuchBucket, curl 18, and
size_download=0 failure classes.
just rustfs-upgrade-topology-plan-guard [plan-json] validates the tofu show -json
output for the future upgrade-topology maintenance-window plan. It is stricter than the
generic just tofu-plan-guard attic: it accepts only digest-pinned beta.1 ->
upgrade-topology candidate RustFS container image updates for the live Deployment and, if present,
the drained legacy StatefulSet template. It rejects Secret data changes,
selector changes, PVC/storage/service drift, delete/create actions, wrong image
direction, and plans that do not include the live
module.rustfs[0].kubernetes_deployment_v1.rustfs[0] image update.
The managed Deploy Attic Stack workflow uses the same guard when manually
dispatched with plan_scope=rustfs_upgrade_topology. That proof scope may only
continue past expected-red RustFS state authority during action=plan; all
applies still require strict state authority and post-apply candidate-image
verification.
just tofu-state-ha-readiness [args...] checks the current S3 state authority
against the HA implementation gate. It is expected-red for the current RustFS
singleton unless run with --expect-interim, because the current path is one
RustFS Deployment replica on a bumble-bound OpenEBS ZFS ReadWriteOnce PVC.
TIN-1002 captured the candidate plan; TIN-1012 owns making this strict gate
green. Use it as evidence that the state path is guarded but not yet an HA
authority.
just tofu-state-ha-readiness --expect-interim
just ha-state-candidate-proof [args...] is the TIN-1013 proof harness for a
candidate that is meant to replace the current guarded RustFS singleton. It
requires --endpoint-package <path> and validates that package through
just ha-state-endpoint-package-gate before any S3 or OpenTofu action runs.
The package supplies the approved endpoint, region, and non-state scratch
bucket. Credentials still come through TOFU_HA_STATE_ACCESS_KEY and
TOFU_HA_STATE_SECRET_KEY or matching command line flags. The harness refuses
direct endpoint, region, or scratch bucket values that do not match the package.
It intentionally does not inherit TOFU_BACKEND_S3_* or broad AWS_*
variables, because those can refer to the active interim state backend or a
wider cloud credential than TIN-1026 allows. By default it proves list-buckets,
head-bucket, and bounded object write/head/read/delete against the packaged
non-state scratch bucket. It refuses the active tofu-state bucket and the
protected attic, arc-runners, gitlab-runners, and runner-dashboard
state keys.
Use --run-disposable-tofu --use-lockfile to add the disposable backend proof:
the harness creates a temporary root module with backend "s3", initializes
OpenTofu against a scratch key with native S3 lockfile mode enabled, applies an
output-only state, verifies a no-op plan, changes the state, restores the first
object body, and verifies the restored state again. The proof fails early if
the repo-managed OpenTofu binary is older than the lockfile-capable version
required by the selected HA contract. Use --keep-scratch-bucket --checkpoint-file <path> before a pod restart or node-maintenance event, then
rerun with
--verify-existing --from-checkpoint <path> after the event to prove the
scratch bucket/object still answer. New checkpoints record the endpoint package
digest, and checkpoint verification refuses a different endpoint package file.
This command is OpenTofu state-authority hardening; it is not Bazel RBE, BCR,
CAS, or action-cache authority.
just ha-state-candidate-static-gate --contract <path> validates the written
contract that must exist before any future backend is treated as the HA
OpenTofu state authority. The gate requires endpoint, credential, recovery,
locking, failure-behavior, observability, bucket-divergence response, proof
order, and protected-migration fields. It rejects the current
attic-rustfs-openebs singleton, Sting local-path storage, Attic/Bazel cache
surfaces, and the active tofu-state bucket as final-state candidate
contracts. Use just ha-state-candidate-static-gate-self-test for the offline
fixture guard.
just ha-state-selected-candidate-static-gate validates the selected
non-secret contract artifact at
docs/contracts/ha-opentofu-state-managed-s3-candidate.json. That artifact
selects a managed or appliance S3-compatible state service as the next proof
target. It does not prove a live endpoint, migrate protected state, or turn the
current RustFS singleton into HA.
just ha-state-endpoint-package-gate --package <path> validates the non-secret
TIN-1026 endpoint package that must exist before just ha-state-candidate-proof
runs against a real service. The package must name a non-placeholder HTTPS
endpoint, region, network audience, state-only credential source and rotation
owner, TOFU_HA_STATE_* injection variables, scratch bucket and scratch policy,
protected state denials, recovery behavior, maintenance proof method,
state-locking behavior, observability, proof commands, and authority
separation. The proof commands must include the disposable OpenTofu proof with
--use-lockfile, so endpoint readiness cannot skip the locking requirement.
The gate rejects the current attic-rustfs-openebs singleton, in-cluster
nix-cache.svc endpoint, active tofu-state bucket, inline secret fields, and
broad cache/RBE authority claims. Use just ha-state-endpoint-package-self-test
for the offline fixture guard. This is endpoint readiness, not a protected
state migration.
just ha-state-endpoint-readiness --endpoint-package <path> is the operator
preflight for TIN-1026. It validates the same non-secret package, then checks
that scoped proof credentials are present as TOFU_HA_STATE_ACCESS_KEY and
TOFU_HA_STATE_SECRET_KEY without printing their values. If
TOFU_HA_STATE_ENDPOINT, TOFU_HA_STATE_REGION, or
TOFU_HA_STATE_SCRATCH_BUCKET are set, they must match the package. The package
path can also come from TOFU_HA_STATE_ENDPOINT_PACKAGE. A missing package,
unedited template, mismatched override, or missing scoped credential returns
TIN-1026_NOT_READY. A green result is only permission to run the scratch and
disposable proof; the readiness command does not touch Kubernetes, S3, or
OpenTofu state.
just ha-state-github-secret-readiness [args...] is the GitHub-side TIN-1026
preflight. It lists visible GitHub secret names only, never values, and checks
for scoped TOFU_HA_STATE_ACCESS_KEY and TOFU_HA_STATE_SECRET_KEY authority.
RUSTFS_*, ATTIC_*, and broad AWS_* names are reported when visible but do
not count as HA state proof credentials. By default it checks repo-level secrets
for tinyland-inc/GloriousFlywheel; pass --org <org> or
--environment <name> when the proof runner intentionally relies on org or
environment secrets. Org secret-name listing requires org admin or Actions
secrets permission; an inaccessible org inventory is reported as unknown rather
than silently ignored. A green result is only GitHub secret-name readiness; it
does not validate the endpoint package or touch Kubernetes, S3, or OpenTofu.
just ha-state-endpoint-package-template [output] writes the exact endpoint
package JSON shape expected by the gate. The generated file intentionally
contains replace-me and example.invalid sentinels and must fail
just ha-state-endpoint-package-gate --package <output> until an operator fills
it with real non-secret endpoint, policy, retention, maintenance, and
observability details. Do not commit credentials into the package; credentials
come from TOFU_HA_STATE_ACCESS_KEY and TOFU_HA_STATE_SECRET_KEY or another
secure injection path.
just k8s-secret-last-applied-audit --context <context> audits live
Kubernetes Secrets for kubectl.kubernetes.io/last-applied-configuration
annotations that still embed data or stringData. It reports only
namespace/name and key names, never annotation values. A candidate TIN-1026
proof credential source is not hygiene-clean while this audit is red; remove
the annotation or recreate the Secret through a path that does not persist
secret material in object metadata before using it for TOFU_HA_STATE_*.
just k8s-secret-last-applied-cleanup-plan --context <context> renders a
reviewable shell plan for the same findings. The plan removes only the
kubectl.kubernetes.io/last-applied-configuration metadata annotation from
each affected Secret with kubectl annotate ... last-applied-configuration-.
It may name affected Secret keys for review, but it does not print Secret
values and it does not execute the commands.
just ha-state-candidate-inventory [args...] is the read-only live candidate
classifier for TIN-1012. It checks known object-store and storage surfaces,
including the current attic-rustfs-openebs state path, staging
S3-compatible test candidates,
TCFS/SeaweedFS services, Sting local-path classes, and Longhorn presence. The
normal evidence mode exits 0 even when no HA candidate is present so operators
can capture the reality. Pass --fail-without-candidate when you need a
blocking gate. This inventory only classifies possible OpenTofu state authority
inputs; it is not Bazel RBE, BCR, CAS, or action-cache proof.
TOFU_HA_STATE_ACCESS_KEY=... \
TOFU_HA_STATE_SECRET_KEY=... \
just ha-state-candidate-proof \
--endpoint-package ./endpoint-package.json \
--run-disposable-tofu \
--use-lockfile
Restart or node-maintenance proofs should use a kept checkpoint and explicit cleanup. The same endpoint package file content must be used for verification and cleanup, because the checkpoint records the package digest.
just ha-state-candidate-proof \
--endpoint-package ./endpoint-package.json \
--keep-scratch-bucket \
--checkpoint-file /tmp/gf-ha-state-checkpoint.json
# Restart or maintenance event happens here.
just ha-state-candidate-proof \
--endpoint-package ./endpoint-package.json \
--verify-existing \
--from-checkpoint /tmp/gf-ha-state-checkpoint.json
just ha-state-candidate-proof \
--endpoint-package ./endpoint-package.json \
--cleanup-checkpoint \
--delete-scratch-bucket \
--from-checkpoint /tmp/gf-ha-state-checkpoint.json
just attic-nar-integrity-check [args...] verifies the live Attic cache path
that Nix uses after narinfo resolution. It mints a short-lived read-only token
from the in-cluster Attic signing secret, fetches <cache>/<hash>.narinfo, then
downloads the advertised NAR body and fails if the HTTP stream closes early or
transfers zero bytes. Use it when Nix reports Transferred a partial file from
the Attic substituter, because cache metadata can remain present while the
RustFS-backed NAR body path is broken.
just attic-nar-integrity-check --store-hash 8iv5j0f2difw6wg9vwj9r2raacb08fkv
just tofu-state-contract <stack> prints the current state name and the
proven ENV=dev or ENV=honey S3 key when one is locked. Use this before
writing or reviewing backend files so you do not silently fall back to the
wrong object name during the remaining cutovers.
just tofu-state-audit checks the known legacy GitLab state paths for the four
active stacks individually and reports which ones actually exist, along with
their Terraform version and serial. This replaces the older blind
project-level state listing assumption, which does not work against the current
GitLab API shape used by the archived legacy mirror.
just arc-runtime-audit inspects the live ARC runtime on the active cluster
context and prints:
- which runner sets are live
- the
AutoscalingRunnerSetphase for each runner set - the live
minRunners/maxRunnerscaps for each runner set - the active runner pod count for each runner set
- the live listener-config
min_runners/max_runnerscaps when present - whether listener caps have drifted away from the
AutoscalingRunnerSet - whether live runner pods disagree with
status.currentRunners - the current CPU and memory envelope for each lane
- the current
nodeSelectorandtolerations - the live
ATTIC_SERVERvalue when present - whether
tinyland-nix-heavyexists yet - whether the heavy lane is accidentally depending on storage-biased
bumbleinstead of the currently admitted ARC payload surface - active runner job pod placement by scale set label
- stale idle
EphemeralRunnerSetblockers when a listener is missing while no-job runners are still registered - recent active runner logs for ARC broker/session continuity errors such as
Socket Error: TryAgain,acquirejob failed, cancelled-job handoff messages such asJob message not found, invalid job assignment, or lost server communication - a
kubectl top nodessnapshot when metrics are available
Use this after an arc-runners rollout to confirm the live cluster matches the
repo contract instead of trusting stale runtime state. It is also the repeatable
operator guard for TIN-620-style runner/CNI continuity checks.
The script also supports a bounded strict mode:
bash ./scripts/arc-runtime-audit.sh honey arc-runners arc-systems --fail-on-listener-cap-driftbash ./scripts/arc-runtime-audit.sh honey arc-runners arc-systems --fail-on-listener-cap-drift --fail-on-active-listener-gapbash ./scripts/arc-runtime-audit.sh honey arc-runners arc-systems --fail-on-runner-count-driftbash ./scripts/arc-runtime-audit.sh honey arc-runners arc-systems --fail-on-runner-session-driftbash ./scripts/arc-runtime-audit.sh honey arc-runners arc-systems --fail-on-stale-idle-listener-blocker
Add --emit-drift-tsv to any strict invocation to also print machine-readable
drift-tsv lines (set, reason, spec caps, listener caps) for each drifting
set; just arc-prove-listener-caps consumes these to separate transient
listener recreation from persistent drift after a managed apply, and
just arc-reap-zombies --scale-set <name> [--dry-run] is the bounded manual
counterpart of the managed apply’s pre-quiesce idle-leaked EphemeralRunner
reap.
The listener-cap strict mode exits nonzero when an idle lane is missing listener
config or when an idle listener-config cap disagrees with the matching
AutoscalingRunnerSet. Add --fail-on-active-listener-gap for post-apply
proofs that must also fail when config is missing while active runners still
exist. Without that active-gap flag, strict listener-cap mode intentionally does
not fail on missing config or cap drift while runners are still active, because
ARC can defer listener replacement until the in-flight pods drain. The
runner-count strict mode exits nonzero when live runner pods disagree with
status.currentRunners. The runner-session strict mode exits nonzero when
active runner pod logs contain known ARC broker/session continuity errors. If
the log excerpt shows cancelled-job handoff evidence on a max-1 operator lane,
first verify the replacement GitHub job is still queued and the pod has no
Runner.Worker process, then delete only the affected EphemeralRunner. Do
not use that cleanup as a generic queue-drain shortcut or hosted-runner escape
hatch.
The stale-idle listener blocker strict mode covers the TIN-1647 failure shape:
maxRunners > 0, no listener-config, and one or more running no-job
EphemeralRunner objects owned by an EphemeralRunnerSet for the same
capability lane. It is non-mutating. To turn its cleanup hint into an operator
action, first capture GitHub runner API output and pass it through
--github-runners-json; the audit only prints an EphemeralRunnerSet delete
command when every candidate runner is verified as busy=false with GitHub
status online or offline. Before deleting the set, also confirm the
candidate pods have no Runner.Worker process. Never delete an assigned runner
or use this as hosted-runner fallback.
just arc-network-continuity-audit is the companion TIN-620 classifier for
the Kubernetes evidence around a lost-runner incident. It reads events, node
conditions, and ARC runner pod status, then separates:
- API/CNI continuity evidence such as
no route to host, connection refused,i/o timeout, kube-root-ca registration drift, and configmap/secret cache sync failures - kubelet eviction or pressure evidence such as
Evicted,DiskPressure, andephemeral-storage - node readiness or network-unavailable evidence
Use this after GitHub reports The self-hosted runner lost communication with the server so the incident is classified before blaming cache, auth, overlay,
or downstream repo code. The bounded strict modes are:
just arc-network-continuity-audit --runner-name <pod> --fail-on-network-driftjust arc-network-continuity-audit --runner-name <pod> --fail-on-evictionjust arc-network-continuity-audit --fail-on-node-pressure
just arc-listener-queue-drift --repo <owner/name> --run-id <run-id> is a
read-only TIN-620 diagnostic for the queue/scale gap that arc-runtime-audit
cannot see by itself. It correlates queued GitHub Actions jobs with live ARC
AutoscalingRunnerSet status and listener pods. When multiple owner-overlay
scale sets advertise the same workflow-facing label, --repo makes the
diagnostic prefer the scale set whose githubConfigUrl matches the queued
repo’s exact repo or owner/org scope. Use --fail-on-drift to exit nonzero
when a queued job maps to a scale set with maxRunners > 0, a running
listener, and zero current/pending/running ARC runner activity. That state means
the problem is not a simple scale-set cap or raw cluster size issue; it is a
listener/session/broker handling symptom.
just arc-shared-label-capacity-audit joins live Helm release values with ARC
AutoscalingRunnerSet status and groups scale sets by workflow-facing
tinyland-* labels. Use it for TIN-627-style checks where several owner
overlays intentionally publish the same shared label through distinct ARC
registration identities.
The audit is read-only. It prints the scale sets, owner scopes, current runner
counts, per-scale-set max total, resource envelopes, and placement for each
matching label. A warning on a label means ARC is enforcing maxRunners per
scale set only; it is not a global concurrency cap for that shared label.
Optional strict flags are available for policy experiments, but should not be used as default product gates until a real global-capacity controller or policy decision exists:
just arc-shared-label-capacity-audit --fail-on-cross-owner-labeljust arc-shared-label-capacity-audit --fail-on-multi-scale-labeljust arc-burst-capacity-audit --fail-on-warningjust arc-burst-capacity-audit --fail-on-honey-pod-pressurejust arc-burst-capacity-audit --fail-on-missing-overflow-pvc
just arc-diagnostic-self-tests runs the offline regression fixtures for
arc-network-continuity-audit, arc-runtime-audit,
arc-listener-queue-drift, arc-shared-label-capacity-audit, and
arc-burst-capacity-audit. It is part of just check and CI validation, so
API/CNI versus eviction classification, broker/session log classification,
listener-cap drift, queue owner matching, shared-label capacity warnings, Honey
pod-slot pressure, active runner job attribution, included runner placement
reasons, and fast-local DinD scratch PVC regressions remain covered without
requiring cluster access. The placement section is where Unschedulable /
Too many pods failures should show up during a shared-label fanout before an
operator reaches for a live scale-set mutation. The overflow-saturation section
is the follow-on classifier: it calls out the product-relevant case where a
Honey-bound baseline lane has pod-slot-blocked runners while the matching
Sting compute-expansion lane is already at its source-owned maxRunners value
and the Sting node still has pod headroom. Treat that as a reviewed
cap/storage-envelope decision, not as proof that the cluster is out of CPU or
memory.
The burst audit also prints Shared Label Queue Pressure. That section joins
the included label report, active EphemeralRunner job repositories, and
not-ready runner pod scheduler messages. Use it when a scarce capability lane,
such as tinyland-nix-heavy, has pendingEphemeralRunners while its declared
slot is occupied by another repository. A
queued-behind-active-runner-capacity classification is queue/admission
evidence; a scheduler-resource-pressure classification means Kubernetes is
reporting resource pressure such as Insufficient ephemeral-storage and should
be read before raising ARC maxRunners.
The burst audit also prints JIT Runner Assignment Traps. That section keeps
same-label overflow incidents from being misread as generic resource
exhaustion. offline-no-job-cleanup-candidate means the runner has no visible
GitHub job assignment and its pod or ARC runner is not ready; verify the GitHub
runner is offline/not busy before deleting the EphemeralRunner.
assigned-job-at-risk means ARC has already attached a GitHub job to the
runner, but Kubernetes has not made the pod usable; do not delete it unless the
GitHub job is cancelled or explicitly declared stale. idle-no-job-runner
means the runner is ready and unassigned, so leave it alone because ARC may
still hand it work.
For Nix runner pods, the included placement rows also print storage-guidance
when Sting reports Insufficient ephemeral-storage. That warning names the
implementation boundary operators must check before raising caps: Nix runner
root/store behavior needs a proved fast-local root/workdir model before Sting
raw NVMe can count as usable Nix runner capacity. The first source-owned
TIN-1400 model is tinyland-nix-compute-expansion with per-pod
local-path-sting-fast-ephemeral PVCs for /nix and /home/runner/_work; do
not lower heavier Nix lane requests or move heavier lanes until their exact
storage model is proved live. The TIN-1600 correction lowers only the
PVC-backed tinyland-nix-compute-expansion runner root ephemeral-storage
request to 1Gi while leaving the PVC sizes intact. The TIN-1649 memory
correction separately raises that same shared lane to a 4Gi memory request
and 16Gi memory limit after dogfood OOM evidence.
The managed Deploy ARC Runners path has a separate productionization
contract. It must run on an operator/control-plane lane outside the shared
consumer labels it quiesces, use quiesce-arc-warm-runner-set.sh --freeze-max-runners so existing listeners cannot refill the lane during
drain, and keep a cap snapshot that can be restored if quiesce or tofu apply
fails. The managed workflow owns best-effort failure restore and gives active
shared jobs a bounded 20-minute drain window before failing closed. On success it
generates and guards a fresh post-quiesce apply plan, restores caps from source
tfvars targets before proving listener caps, and avoids applying a stale
pre-quiesce plan that cannot see the manual max-freeze drift. The pre-quiesce
snapshot is only a failure rollback; after a successful apply it may contain
the old cap that the source change intentionally replaced. tinyland-nix-heavy
is only the bootstrap fallback; once tinyland-nix-operator is live, set
ARC_DEPLOY_RUNNER_LABEL to that label.
just runner-capacity-model-check is the committed, offline guard for the live
runner namespace ResourceQuota and LimitRange values. It parses the ARC and
GitLab honey.tfvars files, derives the modeled burst envelope, and fails if a
quota is too loose to serve as a real admission backstop or too small for the
largest modeled runner pod. This is in-namespace capacity hygiene, not a
cross-overlay global shared-label policy, and it does not claim every lane can
run at its individual max concurrently when the quota is intentionally the
finite machine-envelope stop.
just runner-scale-contract-check keeps the committed ARC and GitLab runner
scale/placement policy explicit. It fails if ARC scale-to-zero minima drift
from zero, if runner storage envelopes become implicit, or if default ARC/GitLab
runner placement silently moves back to storage-biased bumble before the
TIN-613 live remediation decision is explicit.
just kubelet-imagefs-capacity-audit reports node-level kubelet capacity that
is not visible from durable storage size alone:
- Kubernetes
ephemeral-storagecapacity and allocatable values - current scheduled pod request and limit envelopes
- kubelet summary
rootfs,imagefs, andcontainerfscapacity, available bytes, and used bytes when the kubelet summary endpoint is available Ready,DiskPressure, andNetworkUnavailablestatus per node- warnings when filesystem availability is below the configured threshold even
if
DiskPressure=False
The live audit can also read recorded fixtures through --nodes-json,
--pods-json, and --summary-json-dir. just kubelet-imagefs-capacity-audit-self-test uses those fixture inputs to keep
healthy, warning, and critical threshold behavior covered without cluster
access.
Use this for TIN-613-style incidents where a node such as bumble has large
OpenEBS/ZFS durable storage but a much smaller kubelet root/image filesystem.
The default mode is read-only and non-failing:
just kubelet-imagefs-capacity-auditjust kubelet-imagefs-capacity-audit --node bumblejust kubelet-imagefs-capacity-audit --fail-on-criticaljust kubelet-imagefs-capacity-audit-self-test
just honey-runner-workdir-audit inspects the default honey runner hosts
(honey-am-1 and honey-am-2, or hosts you pass explicitly) over SSH and
reports:
- visible repo workdirs under the runner
_work/root - stale
.git/index.lockfiles - sample non-writable files that can break
actions/checkout - sample ownership mismatches
- largest workspace directories
Use this for checkout failures that happen before downstream repo code runs,
such as EACCES unlink errors in persistent _work/* paths.
just honey-runner-workdir-remediate <host> <repo> [--mode unlock|remove] [--apply]
is the bounded remediation pair for that audit:
- dry-run by default
- scoped to one repo workdir on one runner host
unlockrestores owner write bits so the tree can be inspected or removedremoverestores owner write bits and deletes the contaminated repo workdir
Use this only after the affected runner has been stopped or drained. See Honey Runner Workdir Contract for the lifecycle boundary and escalation rules around that flow.
just honey-runner-workdir-reconcile sits between those two commands. It
scans the selected honey runner hosts, classifies contaminated repo workdirs,
and then:
- prints a bounded remediation plan when exactly one repo workdir is dirty on a host
- stops at escalation when more than one repo workdir is contaminated on the same host
- can run the safe single-repo remediation automatically when used with
--apply --confirm-drained
Use this as the default operator entrypoint after a checkout-failure audit when the question is “which hosts can I recover safely right now without widening cleanup past the contract boundary?”
just honey-runner-host-lifecycle <host> [status|drain|start|restart] is the
bounded lifecycle surface for one honey runner host root. It:
- discovers the runner root under
/home/jess/am-runners/<host>unless you override it - prefers
svc.shwhen present and falls back torun.shwhen needed - writes a repo-owned drain marker file before stop/restart actions
- verifies that the matching runner process actually stops or starts within a bounded grace window
Examples:
just honey-runner-host-lifecycle honey-am-2 status
just honey-runner-host-lifecycle honey-am-2 drain
just honey-runner-host-lifecycle honey-am-2 start
Use --local --runner-root /tmp/honey-am-2 when you want to validate the
launcher contract against a local fake runner root without touching a real
host.
just honey-runner-checkout-triage starts one step earlier when you already
have the failing GitHub Actions run id or run URL. It:
- pulls the run metadata and full log with
gh - extracts honey host and repo-workdir targets from the checkout failure lines
- runs the bounded host reconcile surface for those hosts
- previews the targeted bounded repo remediation for the extracted workdir
- prints the follow-on host lifecycle commands for drain and restart
- can apply that bounded remediation only when
--apply --confirm-drainedis supplied and the reconcile result still says each host is a safe one-repo candidate
Examples:
just honey-runner-checkout-triage \
https://github.com/Jesssullivan/scheduling-bridge/actions/runs/24525417273
just honey-runner-checkout-triage \
--repo Jesssullivan/scheduling-bridge \
24525417273 \
--parse-only
Use --parse-only when you want the repo-owned run/log archaeology without
touching the remote honey hosts from the current shell.
just orgwide-enrollment-scoreboard is the live reporting path for the
orgwide enrollment contract. It scans the configured owners from
config/orgwide-enrollment-scoreboard.json, inspects recent non-fork repos
with workflows through the GitHub API, and prints:
- real runner authority on the default branch
- template consumers by mode
- named authority exceptions when non-default branches are still relevant
Use just orgwide-enrollment-scoreboard --format json when you want to feed
the result into another report or compare the current live census with the
earlier research baselines.
just orgwide-enrollment-queue is the follow-on execution surface for that
scoreboard. It combines the live scoreboard with
config/orgwide-enrollment-queue.json and prints:
- runner-authority-blocked repos whose counted self-hosted proof is currently dead because the repo exposes zero accessible runners or equivalent reachability failure
- related issue and proof-policy metadata for owner-boundary blockers, including closure canary dispatch policy, required assigned-job proof, and evidence that explicitly does not count
- hybrid-authority cleanup repos that already have real authority but still need explicit policy or convergence cleanup
- template-contract cleanup repos that should stay visible but not be confused with runner enrollment
- platform-prereq repos whose promotion story is blocked on missing shared runner reachability or similar authority debt
- real promotion candidates that are ready for actual rollout energy
- repos that should stay hosted and out of the active migration metric
Use just orgwide-enrollment-queue --format json when you want the queue in a
machine-readable form for issue updates or PM rollups.
Use repeated --repo owner/name arguments for a scoped live queue around a
small owner-boundary decision.
Use just orgwide-enrollment-queue-contract-check when changing queue policy
fields. It keeps the #407, #412, and #413 closure-proof guardrails from
collapsing into queued-job or repo-shaped-runner claims.
just arc-runner-taxonomy-guard is a source-config guard for the ARC runner
stack. It inspects committed literal runner_label assignments and
extra_runner_sets entries. It fails if new runner lanes use repo-scoped
GitHub URLs in committed core stack config, runner labels outside the shared
tinyland-* capability namespace, or project-identity labels such as
dell-7810-*.
The guard does not inspect live cluster residue. Live compatibility debt stays tracked through the enrollment queue and operator issues.
just arc-runner-residue-audit is the read-only live classifier for ARC runner
residue. It queries Helm releases and ARC AutoscalingRunnerSet objects and
groups them as shared capability lanes, implementation-overlay-owned lanes,
Jess-rehomed compatibility lanes, standalone compatibility lanes, or unknown
repo scopes.
just arc-runner-rehome-manifest-check validates
config/arc-runner-residue-rehome.json, the static selected-disposition
manifest for the current Jess personal-boundary rehome path. It does not pull
or mutate state.
just arc-runner-residue-rehome-plan renders that manifest for operator review.
Use --format commands to print dry-run tofu state mv command skeletons
after the core and overlay state files have been pulled from initialized stack
checkouts. The rendered commands are local state-file operations; they are not a
remote-backend apply path.
just arc-runner-residue-state-check validates pulled OpenTofu state JSON files
against the same manifest and prints only resource addresses. In the default
pre-move phase it expects selected source addresses to exist in core state and
destination addresses to be absent from overlay state. Use --phase post-move
after local state-file movement and before any state push. Do not push either
state file unless the post-move checker reports summary: 0 blockers.
just bazel-dogfood-tranche-status is the live operator path for tranche-1
Bazel productization proof. It reads config/tranche-proof-status.json,
queries the current GitHub workflow state for the bounded proof bundle, and
prints:
- the current source-repo Bazel proof on GloriousFlywheel
- the
labbenchmark/cache-evidence canary - the canonical
scheduling-kitpackage-lane proof - the
tinyland-inc/scheduling-kitmirror-integrity proof - the explicit
scheduling-bridgepublish dry-run proof - the intentional
tinyland.devhybrid-by-policy boundary
Use just bazel-dogfood-tranche-status --format json when you want the bundle
in a machine-readable form for issue updates or program rollups.
That same bundle now has an Actions workflow path through
Tranche Proof Status. The workflow dogfoods tinyland-nix, renders the
command on main, on demand, and on a daily schedule, publishes text and JSON
artifacts, and writes the text view into the workflow run summary.
The source-repo tranche proof itself now has a separate routine workflow path
through Source Bazel Proof on main, on demand, and on a daily schedule.
That keeps the bounded Bazel/cache-first package from riding inside the broader
Platform Proof runner-contract matrix.
The Actions workflow now prefers a GitHub App path when
TRANCHE_PROOF_GH_APP_CLIENT_ID and TRANCHE_PROOF_GH_APP_PRIVATE_KEY are
set as GitHub Actions secrets. With those in place, the workflow mints bounded
owner-scoped read tokens for tinyland-inc and Jesssullivan instead of
relying on one broad PAT. TRANCHE_PROOF_GH_APP_ID remains a compatibility
fallback if the client-id secret is not present yet.
Tranche-proof workflow runs now require that GitHub App path and fail fast if
those App secrets are missing, instead of silently falling back to a broad PAT.
Local shells can still provide TRANCHE_PROOF_GH_TOKEN_<OWNER> overrides such
as TRANCHE_PROOF_GH_TOKEN_TINYLAND_INC and
TRANCHE_PROOF_GH_TOKEN_JESSSULLIVAN when you want to inspect the bundle
outside Actions without reusing the Actions App flow.
The GF REAPI Cell Proof workflow reuses the same GitHub App secret
pair for private consumer checkouts. For supported owners (tinyland-inc and
Jesssullivan), it mints a repository-scoped token for the requested
consumer_repository with contents: read; private proof dispatches should set
require_consumer_app_token=true so missing App credentials fail before the
consumer checkout rather than being misclassified as RBE target evidence.
Public consumer proofs should leave that input false so the checkout stays on
the workflow’s normal GITHUB_TOKEN path.
When the App permission update is still blocked, the proof workflow can be
dispatched with --consumer-checkout-authority repo-scoped-deploy-key or
--consumer-checkout-authority owner-scoped-secret instead of
--require-consumer-app-token. The deploy-key path is preferred when a
read-only deploy key can be installed on the consumer repo; it requires
GF_REAPI_CONSUMER_CHECKOUT_SSH_KEY_TINYLAND_DEV or
GF_REAPI_CONSUMER_CHECKOUT_SSH_KEY_MASSAGEITHACA. The token path requires a
fixed repo secret for the owner:
GF_REAPI_CONSUMER_CHECKOUT_TOKEN_TINYLAND_INC or
GF_REAPI_CONSUMER_CHECKOUT_TOKEN_JESSSULLIVAN. Use repository-scoped read
credentials only; do not replace this with a broad PAT or a free-form workflow
input token. The checkout credential only gets the consumer workspace to the
next proof gate; passing checkout is not RBE evidence until the proof artifact
shows nonzero remote execution.
The same proof workflow can stage the private tinyland-schemas v0.2.4
archive through --tinyland-schemas-private-handoff. That path mints a
GitHub App token scoped to tinyland-inc/tinyland-schemas, downloads the
GitHub codeload tag archive matching the BCR-recorded archive sha256 and
prefix, verifies its sha256, and exposes it through BAZEL_DISTDIR for the
proof run. This is private proof-run distdir staging, not durable mirror
authority, repository-cache retention, CAS/action-cache authority, or
broad/default RBE.
For arc-runners, local tofu-plan, tofu-refresh, and tofu-destroy also
accept GHCR_USERNAME and GHCR_TOKEN. When those are set, the root operator
path passes them through as ghcr_username and ghcr_token so OpenTofu can
create or rotate an explicitly configured GHCR pull secret. The current
honey runtime does not use imagePullSecrets on the ARC lanes by default, so
public-image plans can leave those variables unset without causing artificial
drift.
just tofu-backend-scaffold <stack> creates the expected local backend file in
config/backends/. Once that file exists, it becomes the implicit local
default for just tofu-init <stack>. Preflight will still fail until you
replace the example placeholder values with a real current backend endpoint and
credentials.
just tofu-backend-scaffold-s3 <stack> writes the same local filename, but
with the migration-prep S3-compatible example instead of the active HTTP one.
That is preparation only. Preflight will reject that file until the matching
stack backend.tf also switches to the s3 backend family.
If you are repairing a legacy generic HTTP backend path and already have the
coordinates exported in your shell, just tofu-backend-materialize-http <stack>
will capture those TF_HTTP_* values into the local backend file for that
stack.
If you already have the target-direction S3-compatible coordinates exported in
your shell, just tofu-backend-materialize-s3 <stack> will capture those
TOFU_BACKEND_S3_* values into the local backend file for that stack. That
still does not change the active stack backend family by itself.
For the current proven honey baseline, that helper now uses the live dev
key map instead of assuming <stack>-<env>.tfstate:
attic->attic/terraform.tfstatearc-runners->arc-runners/terraform.tfstategitlab-runners->tinyland-infra/gitlab-runners/terraform.tfstaterunner-dashboard->tinyland-infra/runner-dashboard/terraform.tfstate
If you are preparing a different environment or a non-baseline layout, set
TOFU_BACKEND_S3_KEY explicitly before running the helper.
If you still rely on legacy GitLab HTTP state and you know the real
gitlab.project_id, just tofu-backend-materialize-gitlab-legacy <stack>
will write the local backend file for you from config/organization.yaml plus
TF_HTTP_PASSWORD. That is compatibility-only; the four active stacks on
current main now use backend "s3".
Bazel
Build system recipes for the Bzlmod-based build. The normal GloriousFlywheel
story is direnv allow or nix develop, just info, then
just cache-contract-strict, then just bazel-build-cached once the shell is
attached to a real shared cache. That proves cache-backed local execution with
shared acceleration, not full remote execution.
| Recipe | Description |
|---|---|
just bazel-build-cached |
Build all Bazel targets against the shared cache-backed contract |
just developer-cache-attachment-proof |
Build one bounded target after strict developer-machine cache attachment |
just dev-attach |
Check developer cache attachment and print next steps or run the bounded proof |
just bazel-devshell-authority-check |
Verify devshell bazel resolves through Bazelisk and .bazelversion |
just gf-reapi-cell-test |
Run the GF-owned minimal REAPI proof-cell tests |
just gf-reapi-token-exchange [args...] |
Mint a short-lived gf-reapi-cell JWT/profile from GitHub OIDC without printing bearer tokens |
just bazel-rbe-proof [args...] |
Run the explicit non-default RBE proof wrapper |
just gf-reapi-cell-resolve-digest [args...] |
Resolve the immutable published gf-reapi-cell image digest from GitHub Packages |
just gf-reapi-cell-digest-resolver-contract-check |
Validate gf-reapi-cell GHCR digest resolution for proof dispatch inputs |
just gf-reapi-cell-proof [args...] |
Run or render the explicit gf-reapi-cell proof harness |
just gf-reapi-cell-proof-dispatch [args...] |
Dispatch or render the GF REAPI Cell Proof workflow |
just darwin-rbe-proof-readiness [args...] |
Check Darwin proof inputs and render the dry-run dispatch command |
just darwin-rbe-proof-readiness-contract-check |
Validate the Darwin proof readiness preflight |
just gf-reapi-cell-proof-artifact-contract-check |
Validate downloaded gf-reapi-cell proof artifact evidence and proof-result.json |
just gf-reapi-proof-artifact-download [args...] |
Download and verify a hosted GF REAPI Cell Proof artifact |
just gf-reapi-proof-artifact-download-contract-check |
Validate hosted proof artifact download and verification handoff |
just gf-reapi-ac-nuke-key [args...] |
Dry-run or execute a surgical gf-reapi-cell action-cache nuke-key drill |
just gf-reapi-ac-nuke-key-contract-check |
Validate nuke-key dry-run, execute, quarantine, symlink refusal, and rollback |
just gf-reapi-ac-attestation-chaos-check |
Validate the W2.5 non-attested AC writer chaos gate and workflow wiring |
just bazel-remote-cache-cas-integrity-audit |
Audit bazel-remote CAS decoded payload digest integrity |
just bazel-remote-cache-cas-integrity-contract-check |
Validate the CAS integrity audit contract |
just pilot-workflow-contract-check |
Validate public pilot workflow examples stay cache-backed and write-gated |
just bazel-executor-backed-contract-check |
Validate opt-in executor-backed Bazel wrapper wiring |
just bazel-benchmark-modes-contract-check |
Validate mode-separated Bazel benchmark evidence generation |
just consumer-bazel-wrapper-contract-check |
Validate copied consumer Bazel wrapper cache, fetch, and input wiring |
just flywheel-consumer-env-contract-check |
Validate copied consumer Bazel environment profiles |
just flywheel-profile-distribution-contract-check |
Validate fleet-managed non-secret profile distribution wiring |
just flywheel-enrollment-frontdoor-contract-check |
Validate enroll/doctor/verify profile-state classification |
just flywheel-doctor [args...] |
Explain the current GloriousFlywheel enrollment/profile state |
just flywheel-verify [args...] |
Fail unless the current shell is attached or explicitly in local-proof mode |
just flywheel-enroll <profile> [args...] |
Materialize fallback .env.flywheel.local profile metadata |
just flywheel-consumer-env <profile> [args...] |
Materialize a sourceable non-secret consumer Bazel env profile |
just rbe-target-eligibility-check |
Validate the RBE target eligibility manifest |
just rbe-platform-contracts-check |
Validate Linux and Darwin RBE platform identities and signing custody boundaries |
just rbe-worker-toolchain-model-contract-check |
Validate the current RBE worker toolchain model boundary |
just browser-runtime-authority-contract-check |
Validate the Chromium browser runtime authority for web RBE proof classes |
just web-rbe-candidate-template-contract-check |
Validate the public web RBE candidate template and guide |
just arc-runner-executor-endpoint-contract-check |
Validate opt-in ARC runner executor endpoint wiring |
just bazel-build |
Fail with guidance instead of normalizing raw local Bazel as the default path |
just bazel-test |
Fail with guidance instead of normalizing raw local Bazel as the default path |
just bazel-clean |
Fail with debug-only cleanup guidance instead of running raw local Bazel |
Kubernetes
Cluster inspection and debugging recipes. All commands route through the proxy
when HTTPS_PROXY is set, but the preferred path is direct or tailnet-private
access to honey.
For the current Tinyland on-prem rollout, the cache-oriented helper defaults now
use the live nix-cache namespace.
| Recipe | Description |
|---|---|
just k8s-pods |
List pods in the target namespace |
just k8s-logs |
Tail logs from a pod |
just k8s-describe |
Describe a Kubernetes resource |
just k8s-events |
Show recent events in the namespace |
just k8s-forward |
Port-forward to a pod or service |
App (Runner Dashboard)
Recipes for the SvelteKit runner-dashboard application.
| Recipe | Description |
|---|---|
just app-install |
Install app dependencies with pnpm |
just app-dev |
Start the SvelteKit dev server |
just app-build |
Production build via adapter-node |
just app-test |
Run the test suite (Vitest) |
just app-check |
Run svelte-check (type checking) |
Runners
Shortcut recipes for the GitLab Runner infrastructure stack (gitlab-runners).
| Recipe | Description |
|---|---|
just runners-init |
Initialize tofu for the runners stack |
just runners-plan |
Plan changes to the runners stack |
just runners-apply |
Apply changes to the runners stack |
just runners-status [namespace] |
Show pods, HPA, and Helm releases (default: gitlab-runners) |
just runners-logs <runner> [namespace] |
Tail logs from a runner release |
Cache Platform
Shortcut recipes for the cache platform stack (tofu/stacks/attic/). This
stack deploys the complete Nix binary cache platform: CNPG Operator, PostgreSQL
cluster, RustFS S3-compatible object storage, Attic API server, GC worker, DNS
records, cache init job, warming CronJob, and optional Bazel remote cache.
The stack directory is named attic for state backend compatibility, so
just tofu-deploy attic also works.
| Recipe | Description |
|---|---|
just cache-init |
Initialize tofu for the cache platform stack |
just cache-plan |
Plan changes to the cache platform stack |
just cache-apply |
Apply changes to the cache platform stack |
just cache-deploy |
Full deploy cycle (init + plan + apply) |
just cache-status |
Show cache platform status (pods, operators, storage) |
just cache-health |
Run health check against the Attic API endpoint |
Docs
Recipes for the documentation site.
| Recipe | Description |
|---|---|
just docs-dev |
Start the documentation site dev server |
just docs-build |
Build the documentation site for deployment |
TeX
Recipes for building the research document.
| Recipe | Description |
|---|---|
just tex |
Compile the TeX research document to PDF |
just tex-clean |
Remove TeX build artifacts |
just tex-watch |
Watch for changes and recompile automatically |
Related
- Environment Variables — variables consumed by these recipes
- Configuration Reference — organization.yaml used by tofu recipes
- Pipeline Overview — CI equivalents of local recipes