Demo packs
crewship seed populates a fresh workspace with three packs. A pack is
one real use case, run by one crew, that reads a real public source and can
be run again tomorrow — and checked. Each follows the same shape, which is
the shape most repeated work has once you look at it: a cheap probe that
costs nothing, an expensive judgement only when there is something to judge,
a human decision before anything irreversible.
Every pack ships four things to its crew: the scripts (under
/crew/shared/scripts, with their own unit tests that go test runs), the
routines, a Page the report routine writes, and the issues that
walk a person through it. One crew per pack, deliberately: /crew/shared is
a per-crew volume, so a hand-off through files only works inside a crew.
Nightly CI watch
Scheduled workflows fail differently from PR checks: nothing blocks, nobody is paged, and the red sits there. Worse is the failure that is not red at all — a cron dropped in a YAML refactor, a workflow GitHub disabled after sixty idle days. No green appears and no red either.ci-probe is agentless. It reads the Actions API, classifies every scheduled
workflow as RED, STALE (no run for 48 hours), RUNNING or OK, and
returns wake. Scheduled as the wake gate of ci-nightly-triage, it costs
nothing on a green night:
ci-triage and
known-flaky skills, finds the concrete cause of each stale workflow, and
posts one inbox notification whose last line is
COUNTS: regressions=… flaky=… infra=… stale=… unclear=…. Those numbers
must agree with the probe’s, and crewship seed verify checks that they do.
The Page ci-watch shows the probe’s verdict per failure class and the
coverage line; the full triage with links is the notification.
Docs drift
docs_drift.py compares the YAML/JSON tags of Go structs with the
identifiers in backticks and YAML blocks of a documentation page, in both
directions: a phantom is a key the page describes and the code does not
have; a gap is a field the code has and the page never mentions. The
pairs are curated in config/docs_map.json on the quality crew’s shared
volume — keep them narrow, a whole package against one page is unreadable.
Candidates are not findings. Jordan reads the real files from the checkout
under /crew/shared/work, confirms or rejects every candidate with a path
and a line, admits any truncation, and ends with
COUNTS: candidates=… confirmed=… rejected=… truncated=…. verify
reconciles the candidate count with the scan and, given a local checkout,
checks that every cited path exists at the scanned commit.
Casey’s issue carries the human boundary: a confirmed finding that is a
security claim — an allowlist or validation the docs promise and the
code does not enforce — is escalated as a DECISION, not worded alone.
Site replica
Say “copy seznam.cz” to Alex, or start the lead issue. Alex delegates inside the crew, one hand-off at a time: Taylor inventories the live page intocontent-map.json (its sections array is the contract), Sam extracts the
structured data.json with a small tested script, Robin builds a
self-contained index.html — no scripts, no external assets, one h1, a
viewport tag — and Jamie runs the acceptance check and reports PASS, FAIL or
NOT BUILT. Alex writes GO or NO-GO.
replica_check.py is the mechanical bar: it exists, it is a document, it is
self-contained, it covers at least 70 % of the inventoried sections. Whether
it looks right stays with the person who opens the file from the crew’s
files. site-replica-audit publishes the verdict to the Page and the inbox;
until somebody builds the replica it reports NOT BUILT, and verify counts
that as skipped rather than green.
Credentials
The packs that read GitHub need a token. Put a read-only one (actions:read and repository read; the packs never write) in .env.local
next to the Anthropic key:
GH_TOKEN every agent already knew, and
additionally a crew-scoped CLI_TOKEN on each pack crew, bound to that
crew’s GH_TOKEN slot. Crew scope is not decoration: a routine’s
{{ secrets.CLI_TOKEN }} is resolved by type, preferring the author crew’s
own credential and otherwise the newest — and the demo vault’s inert GitHub
accounts are created after the real one. Without the crew scope the newest
inert token would win and every GitHub call would fail quietly.
Without SEED_GITHUB_TOKEN the packs are still seeded — crew, scripts,
routines, Page, issues — and reported as skipped by verify, never as
green.
A re-seed over an existing workspace refreshes the stored value from the
variable, so a rotated token lands on the next crewship seed rather than
leaving last month’s token in place under the same name.
Verifying
crewship seed for the row-by-row
contract. In short: scripts byte-identical to the seed, the probe against an
independent read of the source, the agent’s counts against the probe, no
secret in the report, the notification in the inbox, the panels written by
that run.
Where the packs came from
The three packs are the demo-sized versions of the templates kept in the privatecrewship-manifests catalogue, whose market research found the same
two shapes of pain in every segment it looked at: clocks nobody watches
(a deadline running from a moment nobody recorded) and meters nobody
watches (something stops, and silence looks like calm). A wake gate is not
an optimisation there; it is the condition under which anybody lets an agent
run at all.