smackerel-no-defaults
Enforce Smackerel's NO-DEFAULTS / fail-loud SST policy. Use when editing config, Docker Compose, deploy adapters, docs, instructions, skills, env handling, host bind addresses, or any runtime value that could be hidden by fallback syntax.
- License 许可
- MIT
- 最近更新
- 2026-11-07
- Stars
- ★ 1
- Forks
- 0
01 前言 Front Matter
- name
- smackerel-no-defaults
- description
- Enforce Smackerel's NO-DEFAULTS / fail-loud SST policy. Use when editing config, Docker Compose, deploy adapters, docs, instructions, skills, env handling, host bind addresses, or any runtime value that could be hidden by fallback syntax.
03 SKILL.md 正文
Smackerel NO-DEFAULTS Guard
Goal
Prevent silent runtime fallback config. Smackerel must fail loudly when required config is missing so agents and operators cannot accidentally ship hidden defaults.
This skill covers Smackerel's generic repo-owned configuration and deployment contracts. Final host configuration for a concrete self-hosted, cloud VM, or other deployment target belongs in an operator-private deploy-adapter overlay, not in this repo.
Use This Skill When
- Editing
config/smackerel.yaml,scripts/commands/config.sh,docker-compose.yml,deploy/compose.deploy.yml, or deploy adapter logic. - Changing docs, instructions, or skills that describe config, env vars, ports, host bind addresses, or deployment.
- Reviewing any use of shell/Compose interpolation,
os.getenv,process.env, or config helper defaults. - Touching
HOST_BIND_ADDRESS, port mappings, env files, or Build-Once Deploy-Many config bundles.
Blocking Rules
- No
${VAR:-default}or${VAR-default}for SST-managed runtime values. - No language-level fallback for required config (
os.getenv("KEY", "default"),process.env.KEY || "default",unwrap_or(...)). - No docs language that implies an implicit fallback (
safe-by-default,loopback default,preserves loopback). - No generated config edits by hand.
- No deploy adapter may rely on Compose to invent missing values.
Required Patterns
| Surface | Required Pattern |
|---|---|
| Compose / shell required value | ${VAR:?clear error message} |
| Go required env | os.Getenv("KEY") plus explicit empty-value error |
| Python required env | os.environ["KEY"] or explicit empty-value error |
| TypeScript required env | process.env.KEY plus explicit missing-value throw |
| Loopback bind | Explicit HOST_BIND_ADDRESS=127.0.0.1 in generated/apply-time env, never a Compose fallback |
HOST_BIND_ADDRESS Contract
The live deploy bind-address contract is:
ports:
- "${HOST_BIND_ADDRESS:?HOST_BIND_ADDRESS must be set by deploy adapter}:${CORE_HOST_PORT}:${CORE_CONTAINER_PORT}"
The deploy adapter must write HOST_BIND_ADDRESS explicitly into app.env before Compose starts. If it cannot determine the bind address, it must fail before docker compose up. 127.0.0.1 is valid only as an explicit configured value.
Review Checklist
[ ] Touched files contain no hidden fallback for required runtime config.
[ ] Any mention of `${VAR:-default}` labels it as forbidden, not recommended.
[ ] `HOST_BIND_ADDRESS` docs say adapter-set explicit value + fail-loud Compose.
[ ] `deploy/compose.deploy.yml` and `internal/deploy/compose_contract_test.go` match.
[ ] Validation evidence uses repo-standard commands from `.github/copilot-instructions.md`.
Anti-Patterns
| Anti-Pattern | Why It Blocks | Fix |
|---|---|---|
${HOST_BIND_ADDRESS:-127.0.0.1} in live Compose |
Missing adapter config silently becomes loopback | ${HOST_BIND_ADDRESS:?HOST_BIND_ADDRESS must be set by deploy adapter} |
| "loopback default" in docs | Teaches agents to rely on fallback behavior | "explicit loopback value" |
os.getenv("SMACKEREL_AUTH_TOKEN", "") for required config |
Auth misconfig becomes empty string | Required env read plus explicit empty check |
Adapter omits HOST_BIND_ADDRESS because Compose has a fallback |
Adapter contract is incomplete | Adapter writes the value or fails before Compose |
04 同仓库更多 Skills
smackerel-trace-capture
Wire Smackerel's concrete validate-plane stack into the framework trace-driven defect-discovery method. Use when running live-category tests (integration/e2e/e2e-ui/stress) against the ephemeral test stack; capturing SLO or trace evidence; hunting latency/error/perf bugs from spans; querying the test-stack Jaeger or Prometheus; or touching `.specify/runtime/observability`. Concrete smackerel endpoints + the exact `capture-slo.sh` command; do NOT duplicate `bubbles-observability-adapter` — this only adds the wiring.
bubbles-workflow-mode-resolution
Resolve a Bubbles workflow mode against `bubbles/workflows.yaml`, including template inheritance, status ceilings, gate wiring, and decision policy. Use when picking a mode for a request, when a guard reports a mode-related failure, or when extending workflows.yaml with a new mode or template. Covers natural-language intent routing and the workflow registry consistency rules.
bubbles-workflow-execution-loops
Run per-round synchronous workflow execution loops correctly. Use when orchestrating a multi-round workflow, dispatching specialist subagents, handling round-based remediation, or interpreting a workflow mode's execution policy. Covers authorized direct execution, dispatch-and-wait, batch-then-summarize prohibition, and mapped-mode execution.
bubbles-vscode-agent-constraints
Design agents that fit the VS Code Copilot Chat runtime instead of fighting it. Use when authoring or editing any `*.agent.md`; when adding `tools:`, `agents:`, `handoffs:`, `model:`, `user-invocable:`, or `disable-model-invocation:` frontmatter; when designing an orchestrator that dispatches specialists; when a design implies agent-calls-agent-calls-agent chaining; when a subagent dispatch silently no-ops or an agent cannot be selected in the dropdown; or when writing a governance rule about delegation that the runtime cannot actually enforce. Prevents multi-level-subagent designs, prose-only dispatch laws, and frontmatter/body contradictions.
bubbles-upkeep-cadence
How to schedule, dispatch, and record recurring operational upkeep tasks (backup, restore-drill, BCDR-drill, patch-cycle, secret-rotation, flag-cleanup, compliance-sweep). Use when authoring or modifying `config/upkeep-calendar.yaml`, when investigating a missed task, when reading the upkeep ledger, or when adding a new task type.
bubbles-test-integrity
Enforce real, specification-driven test quality during any test work. Use when writing tests, implementing scope test plans, reviewing test coverage, or validating DoD test items. Triggers include writing tests, adding test coverage, implementing scope tests, reviewing test plans, marking test DoD items, and verifying Gherkin scenario coverage.