Dev Attachment Field Notes — May 2026
J3 of the May 10-16 sprint plan (2026-05-10-cache-forward-toward-rbe.md).
Status: SCAFFOLD for Jess to fill in on a real resource-constrained machine. Claude prepared the structure; the friction-log content is empty until the field test runs.
Purpose
Capture real friction points when a resource-constrained dev machine
attempts to attach to the GloriousFlywheel cache substrate. The output
informs the next iteration of just dev-attach (C4 alpha scaffold) and
the productionized self-service attachment path.
This is ground truth, not a designed flow. The point is to write down what actually happened, not what should have happened.
Test machine
| Field | Value |
|---|---|
| Machine name / role | e.g. yoga / personal laptop |
| OS / version | macOS 15.x or NixOS 24.11 |
| Architecture | aarch64 / x86_64 |
| Network position | direct, tailnet, both? |
| Pre-existing tooling | direnv? nix? bazel? just? |
| Cluster context available? | y/n — kubectl config get-contexts honey |
Step-by-step probe
For each step: (1) capture the exact command run, (2) the actual output (or the relevant line from the actual output), (3) time-to-result, (4) any surprise.
Step 1 — Cold-start state probe
# Verify nothing is attached yet
just dev-attach
- Run command above.
- Result: expected to print “Cache attachment: incomplete” with hint block
- Time: record seconds
- Surprise / friction: empty until run
Step 2 — Operator port-forward (Bazel cache)
kubectl --context honey -n nix-cache port-forward \
svc/bazel-cache 19092:9092
- Open in a separate shell. Confirm it stays foregrounded.
- Result: record port forward output
- Time-to-first-listening-line: seconds
- Surprise / friction: record any kubeconfig issues, certificate warnings, RBAC errors
Step 3 — Export Bazel cache env
export BAZEL_REMOTE_CACHE=grpc://127.0.0.1:19092
export GF_BAZEL_SUBSTRATE_MODE=shared-cache-backed
- Verify exports are set in the current shell.
- Surprise / friction: record direnv .env handling notes if applicable
Step 4 — Re-run dev-attach without proof
just dev-attach
- Should now show Bazel attached but Attic incomplete.
- Result: record
- Surprise: record any mismatch with Step 1 expectations
Step 5 — Configure Attic (Nix substituter)
# Operator-provided values
export ATTIC_SERVER=http://attic.<your-internal-host>
export ATTIC_CACHE=main
export ATTIC_PUBLIC_KEY=<operator-provided-key>
- Confirm operator handed all three values.
- Surprise / friction: record if values were obvious to find or required digging
- Bonus: did
direnv/.envmake this materially easier or harder?
Step 6 — Full attachment + proof
just dev-attach --proof
- Should run the bounded
//:deployment_bundleproof. - Result: record exit code, time elapsed, cache hit/miss summary
- Time-to-first-cache-hit: record
- Surprise: record any unexpected build steps, network calls, or output
Step 7 — Re-run for cache validation
just dev-attach --proof
- Should be substantially faster on second run if cache is real.
- Time delta vs Step 6: record
- If not faster, what does that say? record
Friction summary
(Fill in after running all steps.)
Top 3 friction points
- empty
- empty
- empty
Quick wins (could land in next C4 iteration)
- empty
Out-of-scope but worth noting
- empty (e.g. tailnet routing, certificate trust, multi-architecture handling)
Inputs for next C4 iteration
Suggestions for scripts/dev-attach.sh improvements based on this
field test (filled in by Jess):
- empty
Acceptance vs J3
Plan acceptance: “friction log committed at
docs/runners/dev-attachment-field-notes-2026-05.md. Feeds Claude’s
C4.”
- File exists at the right path: ✓ (this scaffold)
- Field test executed and documented: pending Jess on-device run
- Feeds C4 next iteration: pending — Claude picks up after Jess fills in friction summary
Related
- TIN-1070 — sprint control list (J3)
- C4 alpha scaffold:
scripts/dev-attach.sh docs/runners/cache-integration.md— operator-side bring-up- TIN-650 / TIN-758 — closed: developer-machine cache attachment proof + exposure policy