The Hushh engineering operating standard for building, verifying, and reporting work. Release transitions are explicit user-authorized operations governed by the canonical Admin release SOP; ordinary code changes do not imply UAT or production deployment.
Install
npx skillscat add hushh-labs/hushh-research/ship-discipline Install via the SkillsCat registry.
Ship Discipline — how we engineer at Hushh
Our operating standard for every line we ship. Role models: Jeff Dean (correctness and simplicity at scale, measure before you optimize, know your numbers) and Andrej Karpathy (first-principles, minimal elegant code that reads like a tutorial, become one with the data, verify by running). When in doubt, ask: would Jeff or Andrej sign off on this?
0. The two role models, in practice
Jeff Dean:
- Know the back-of-the-envelope numbers before you build (latency, throughput, index size, cost). Write them down.
- Correctness first, then simplicity, then speed. Profile before optimizing; never guess where the time goes.
- Design for the scale you'll actually hit. A linear scan over 33k rows is fine; over 33k × 24k per request is not — reach for the right data structure.
- Systems fail; make failure honest and recoverable (retries, backoff, rollback, graceful degradation).
Andrej Karpathy:
- First-principles. Understand the whole path end-to-end before changing a piece of it.
- The smallest change that fully solves the problem wins. Delete before you add.
- Code should read like a good explanation. A teammate should learn the domain from the diff.
- Become one with the data: look at the real inputs/outputs, the real page, the real API response — not your mental model of them.
- Verify by running. A passing test is evidence, not proof; drive the real thing.
1. The governed delivery loop
Every substantive change follows the applicable portion of this path. A merge, UAT deploy,
production deploy, or public release is a separate authority transition and happens only when the
user explicitly requests it. Follow.codex/skills/repo-operations/references/admin-release-sop.md for any such transition.
gate → PR → CI green → merge → [authorized UAT] → [authorized production] → verify → notify/index- Gate before PR: typecheck (
tsc --noEmit), lint, the full test suite, and — for anything with a runtime surface — a real build. Green locally before you ask CI. - One PR, one idea. Prefer single-file, additive, reversible changes. Small diffs review fast and roll back clean.
- Keep
maingreen. A redmainblocks the whole team. If you find it red, fixing it is priority zero — above your own task. - Never cancel someone else's build. Pass the no-cancel-inflight flag on deploys. If contention cancels yours, retry through it (auto-retry loop), don't retaliate.
- Pin the SHA for each authorized environment transition; UAT and production retain independent authority gates.
- Batch deploys when several changes are ready, to reduce pipeline thrash.
2. Verify end-to-end — "done" has evidence
Before you say it works or mark a task complete:
- Drive the actual flow — hit the live URL, call the endpoint, load the page, click the button. Read the real response.
- A green test suite is necessary, not sufficient. Tests can pass while the feature is broken (null in prod render, missing wiring, wrong data).
- Quote the evidence: the HTTP 200, the JSON field, the rendered element, the row count. If you can't show it, it isn't done.
- If a step was skipped or a test failed, say so plainly with the output. Never report success you haven't observed.
3. The audit → grade → remediate → re-grade loop (to A+)
When the goal is quality ("make it A+", "get it to an Apple bar"):
- Audit the live artifact against a concrete rubric (e.g. correctness, SEO/discoverability, UX, engagement, accessibility, service, engineering). Grade each dimension with evidence pulled from production, not from memory.
- Find the lowest-graded dimension. That's the next unit of work.
- Remediate the single highest-value gap. Ship it through the loop (§1).
- Re-grade with fresh live evidence. Repeat until every dimension is A/A+.
- Never assert a grade you can't back with an observation. "A+" is a rigorous internal rubric verified on the live surface — not an external certification, and we say so.
4. Honest status & board reporting (red / amber / green)
How we report progress — always this shape:
- Executive summary up front: what's going well, what needs attention, and what's genuinely blocked / needs help. Lead with the truth, not the wins.
- RAG per project: 🟢 green = shipped, live, compounding · 🟡 amber = progressing but a risk/dependency to watch · 🔴 red = blocked or degrading, needs a decision.
- Name the asks. Blockers that need a human decision get their own numbered list with the specific ask. Decision latency, not engineering, is often the real bottleneck — surface it.
- Never overclaim. "Readiness posture" ≠ "certified." "Merged" ≠ "live." Distinguish self-assessed grades from external validation.
- For a board-shareable version, render it as a RAG-coded artifact (see the reach/board-update pattern), keep the numbers pulled live on the reporting date, and footnote how grades were derived.
5. Reach-first: discoverability is part of "done"
Our north star is reach — humans actually reading/using what we build. For anything public-facing, "done" includes:
- In the sitemap; JSON-LD structured data where it fits (and only honest types — no
VideoObjectfor a non-video, no fake reviews). - Internal links so pages form a crawlable graph, not islands.
- Unique
<title>, meta description, canonical, and Open Graph / Twitter cards so it earns a SERP snippet and a share preview. - IndexNow submitted (Bing/Yandex/answer engines); flag Google Search Console if a human owner is needed.
- Coverage-gate thin pages (
noindex) so we never publish doorway/spam content — quality is a discoverability strategy, not a tax on it.
6. Consent-first data ethics (non-negotiable)
- Never bulk-copy a regulator's or third party's database wholesale. Cite it; link to the source of truth.
- Never bulk-hold contact PII. Drop email/phone/street at parse. Listings are cited, claimable, and removable by the person named.
- When unsure whether an action is reversible or outward-facing (deletes, publishes, sends, external posts), confirm first. Approval in one context doesn't extend to the next.
7. Leave a trail
- Track multi-step work as tasks; keep them current (in_progress when you start, completed only when §2 is satisfied).
- Capture durable decisions, architecture, and standards to the wiki so they survive across sessions — page names in prose, never raw file paths.
- Commit messages explain why, not just what. The diff shows what.
The one-line test for any change: Is it correct, is it the simplest thing that fully works, have I watched it work in production, and can a real person actually find and use it? If any answer is no, it isn't done yet.