Working on smine itself, from a checkout: every repo command is a make target.
A development checkout has no bin/PAYLOAD marker, so the apply engine and every Sync build the binaries with go build (Install § From source). Every make target is admitted by one gate rule, Bash(make *) (Permission System).
| Command | Does |
|---|---|
| make serve | Builds and runs the config server on :6001 against ~/.claude/settings.json. |
| make serve-dev | Sandboxed, detached server for this checkout; returns once listening. Free port (printed), bin/dev/home, no credential. DEV_CLAUDE_HOME=<dir>: another Claude home, ACDSL ledger included. |
| make serve-dev-stop | Stops this checkout's last serve-dev (pid in bin/dev/serve-dev.pid), then drops the Go module cache a sandboxed apply left under bin/dev/home/go: Go creates it read-only, and git worktree remove cannot delete it, so a worktree that saved a Smine setting would otherwise refuse to close. The next serve-dev downloads again. |
| Command | Does |
|---|---|
| make build | Go tools and Rust binaries to ./bin. |
| make test | Tests, race detector on. |
| make test-acdsl-smoke | The acdsl smoke (cmd/acdsl/smoke_test.go) alone: it projects, stages and strips real tracked files. |
| make audit | Fast gate. Serial: build-audit, projection strip, generate. Concurrent: mod verify, vet, cross-build, skills-check, golden-check, workflow-gen-check, fragment-check, acdsl check (verdicts cached per checkout), fixtures, Go tests (no race detector), changed Rust crates. SCOPE=all: both crates; BASE=<ref> overrides the derived branch base. |
| make audit-full | Release gate. Same prefix; concurrent gates, race tests, changed Rust crates, model batteries and queries; then the acdsl smoke alone. SCOPE=, BASE= as for audit. |
| make cross-build | Windows Go build, Linux Go vet: the forms CI proves. In audit. |
| make audit-linux | CI's Linux audit and test jobs in a container (latest stable Rust, unprivileged user) on a checkout snapshot. Needs Docker; not in audit. |
| make golden-check | Checks the eval goldens are current. In audit. |
| make workflow-gen | Regenerates the skills' workflow stage files from their sources; workflow-gen-check is in audit. |
| make lint | golangci-lint over the module. |
Each concurrent unit prints PASS or FAIL; full output in bin/test-logs/<unit>.log.
| Command | Does |
|---|---|
| make acdsl ARGS=… | acdsl runner: check, fixtures, project -strip, project -plan <path>. |
| make rules ARGS=… | Rules tool: generate, walk, render-skill <skill dir> … |
| make generate | Short for make rules ARGS="generate": untracked context/context.json from the entry docs, plus context/aspects.json. |
| Command | Does |
|---|---|
| make skill-render SKILL=x | Checks the model; re-saves <leaf>.cue and payloads canonically. |
| make skills-check | In audit. Fails on: non-canonical <leaf>.cue; leftover skill.cue; invalid model; orphaned payload; generated or markdown-era file in a skill dir; SKILL.md without <leaf>.cue; pipeline edge the other skill does not mirror; Skill(<leaf>) grant without a reaching edge; atom no pred reads; no smoke block. |
| make skill-export SKILL=x | Model with merged atoms as JSON. |
| make skill-import DIR=x | Imports a markdown-only skill dir or vocabulary.json into the model. |
| make skill-smoke SKILL=x TOKEN=label | Runs the declared smoke on its dummy input; prints the verdict. |
| make skill-smoke-verdict SKILL=x SESSION=id | Judges an interactive smoke's session. |
| make skill-bundle | Standalone bundle to dist/skills; fails on a smine reference. |
The z3 analysis behind these targets: Skill model § Z3 analysis.
| Command | Does |
|---|---|
| make model-check SKILL=x | One skill's clause checks plus z3 battery (z3 on the model tier only). |
| make model-query SKILL=x EXPR='…' | Does the model imply EXPR? unsat: holds, with the proving core. Example: EXPR='not asks_user'. |
| make model-diagram SKILL=x [PHASES=1] [JSON=1] | Derived model as mermaid stateDiagram-v2 on stdout. |
| make model-analyze SKILL=x | model-check plus every committed query in the skill's queries/. |
| make model-queries SKILL=x | Committed queries alone. |
docs/ is served at smine.info via Firebase Hosting (project smine-f5938, config firebase.json at the repo root). Every release tag redeploys it: the docs job in .github/workflows/ci.yml runs on v*.*.* tags with the FIREBASE_SERVICE_ACCOUNT_SMINE repository secret. make docs-deploy deploys by hand from a firebase logined machine.
One-time setup:
smine-f5938) in the Firebase console and enable Hosting.firebase init hosting:github writes the service account and the repository secret itself; or create a service account with the Firebase Hosting Admin role in the Google Cloud console and store its JSON key with gh secret set FIREBASE_SERVICE_ACCOUNT_SMINE < key.json (discard any workflow files hosting:github generates — the docs job in ci.yml is the deploy).smine.info, then copy the TXT verification record and the A records the console shows into the Ionos DNS panel for the domain (same flow as rollandrecord).Flags of bin/configserver; defaults are relative to the working directory. The installed server runs with the install record's values, so these matter when you run it by hand.
| Flag | Default | Purpose |
|---|---|---|
| -repos | ~/.claude/smine/repos.json | Repo registry: machine state in the state dir, in no checkout. |
| -routines | routines | One contract subdir per routine; routines/_templates/ holds the packaging templates. |
| -evals | evals | Eval results root, shown on each skill's Tests tab: evals/<skill>/<date>-<hash6>[-<n>]/eval.json or flat evals/<skill>-<date>[-<n>]/. A/B dirs ab-… never render. |
| -examples | examples | Skill examples root. |
| -agentwt | bin/agentwt | For worktree status and removal; made absolute at boot. |
| -context | context | Context source root of the Context page. |
| -peek-port | 4242 | peek-mcp HTTP port; 0 disables peek entirely. |
| -peek-control-port | 42442 | peek-mcp control dashboard and OTLP receiver port (peek's canonical base); 0 disables the dashboard. |
| -peek-start | true | Spawns peek-mcp when nothing serves the port. Reuses a listener only if its /healthz identity matches this profile's homes; else disables peek integration with a logged error. |
| -peek-bin | peek-mcp | Resolved via PATH. |
| -claude-home | ~/.claude | Passed to the spawned peek-mcp. |
| -codex-home | ~/.codex | Passed to the spawned peek-mcp. |