Skip to content

docs(examples): mark webTerminal/tailscale as planned, not v1 CRD fields - #52

Merged
stubbi merged 3 commits into
mainfrom
docs/full-featured-planned-sidecars
Jun 3, 2026
Merged

docs(examples): mark webTerminal/tailscale as planned, not v1 CRD fields#52
stubbi merged 3 commits into
mainfrom
docs/full-featured-planned-sidecars

Conversation

@stubbi

@stubbi stubbi commented Jun 3, 2026

Copy link
Copy Markdown
Collaborator

Summary

Refs #42. The full-featured example advertised spec.webTerminal and spec.tailscale (Tailscale Serve) blocks, but the v1 CRD does not expose these fields. They are future "Plan 3" work; the only sidecar mechanism shipping today is the generic spec.sidecars escape hatch. Applying the example silently pruned those blocks (the apiserver drops unknown fields), which misleads operators into thinking the features are wired up.

Changes

Verification

  • Example parses as valid YAML; confirmed webTerminal/tailscale are gone and the real sidecars field remains.
  • Cross-checked against HermesInstanceSpec json tags: webTerminal and tailscale were the only two example keys with no corresponding CRD field.
  • No em/en dashes introduced (per repo punctuation rule).

Tracking issue #42 stays open for the actual feature; this just stops the docs from promising it early.

The full-featured example advertised spec.webTerminal and spec.tailscale
blocks, but the v1 CRD does not expose these fields. Only the generic
spec.sidecars escape hatch exists today; web-terminal and Tailscale Serve are
future "Plan 3" work. Applying the example silently pruned those blocks (the
apiserver drops unknown fields), which misleads operators into thinking the
features are wired up (#42).

Remove the phantom blocks from the example spec and from the "fields
demonstrated" table, and add a "Planned (not yet in the v1 CRD)" note that
points at #42 and the spec.sidecars workaround.

Refs #42

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@stubbi
stubbi merged commit c81dfd6 into main Jun 3, 2026
13 checks passed
@stubbi
stubbi deleted the docs/full-featured-planned-sidecars branch June 3, 2026 20:26
stubbi added a commit that referenced this pull request Jun 3, 2026
## Summary

Design + implementation plan for first-class `spec.tailscale.mode=serve`
on `HermesInstance`, addressing #42. No production code yet: this is the
spec and a TDD task-by-task plan for review before implementation.

- **Spec:**
`docs/superpowers/specs/2026-06-03-hermes-tailscale-serve-design.md`
- **Plan:**
`docs/superpowers/plans/2026-06-03-hermes-tailscale-serve.md`

## Design decisions

- **Ephemeral node + fixed hostname.** In-memory tailscaled state,
`--ephemeral`, `TS_HOSTNAME` defaulting to the instance name. Node
auto-removes on pod termination; MagicDNS name stays stable. No state
PVC and no `TS_KUBE_SECRET`, so no new per-instance RBAC.
- **Sidecar in the hermes pod** (not a companion Deployment) so Serve
can proxy tailnet `:443` to `http://127.0.0.1:8443` (the gateway port).
- **Serve-only first cut.** `mode` enum is `serve` only; left extensible
for funnel later (out of scope per #42).
- **NetworkPolicy** gains Tailscale UDP egress (3478 STUN, 41641
direct); control/DERP already ride the baseline TCP/443, so it degrades
to relayed connectivity rather than failing if UDP is blocked.
- `TailscaleReady` condition and webhook validation mirror the existing
gateway patterns.

## Notes surfaced during planning

- `ROADMAP.md` lists tailscale under "Shipped (v1.0.0)" although it was
never wired. The plan corrects this when the feature actually ships (and
PR #52 already de-advertised it in the full-featured example).

## Next step

On approval, implement task-by-task per the plan (subagent-driven).
Happy to adjust scope/decisions first.

Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant