Register in commander

Register this project in Commander so its usage telemetry and its test passes have a project to attach to.

markdownguidev1EYCF-9MBYcommanderrunbooktelemetrytest-passes

Updated 2026-10-17

Runbook: register cuppy / Semarchy in the Commander console

Status 2026-10-11: REGISTERED on the dev instance; prod row still operator-hand. Commander DEV (the instance that holds the test harness, the dev-gov standards and the usage telemetry) already carries the row Semarchy — semarchy.cuppy.io, slug semarchy, short id pv7ckc, id 9f4392d4-3211-4372-977c-d12f2acfa507, with working_dir and git_repo_path both at . That row is the record for the rewrite week; session labels use cuppy-rewrite-<sprint>. A second dev row cuppy.io (hub) points at /home/datashield/projects/cuppy/, a different checkout, and is left as is. The production console (commander.myorg.ai) has no row; creating it is the production database write below, operator-hand.

Why the console panel is empty

Two separate causes, one now fixed:

  1. Fixed. QUICKSTART.md existed only at .claude/QUICKSTART.md. The boot-sequence endpoint reads it

from the project root (claude-commander/server.js:7930, path.join(gitPath, 'QUICKSTART.md')). It is now at the root, matching every sibling project.

  1. Outstanding. There is no project row. Commander holds thirteen projects and none is this one, so the

panel has nothing to resolve. The 2026-07-20 commit "onboard Semarchy App Factory into Commander" added tracking/PROJECT.md to this repository but never created the row.

Register it

Use the API rather than raw SQL: short_id is NOT NULL with no default and the endpoint generates it, and the endpoint also applies the plan gates. Authenticated as the operator, against the console:

curl -sS -X POST https://commander.myorg.ai/api/projects \
  -H 'content-type: application/json' \
  -H "authorization: Bearer $COMMANDER_TOKEN" \
  -d '{
    "name": "cuppy / Semarchy",
    "slug": "cuppy-semarchy",
    "working_dir": ".",
    "git_repo_path": ".",
    "live_url": "https://cuppy.io",
    "pm2_processes": ["semarchy"],
    "database_name": null,
    "color": "#b1162f",
    "preflight_prompt": "Read QUICKSTART.md then execute the boot contract. No greetings. Minimize tokens before the selection; maximize quality after it.",
    "notes": "One process serves cuppy.io and semarchy.cuppy.io on 8787. semarchy.cuppy.io is walled behind the beta signup; cuppy.io is public; anonymous MCP stays open on both. Storage is SQLite plus file stores; the dedicated Postgres cluster is Phase 1. Production still deploys from .-app-factory/src until the cutover runbook is executed."
  }'

git_repo_path is the field the boot-sequence endpoint prefers (git_repo_path || working_dir), so point both at the checkout. Point them at the checkout, not at the running tree: the running tree is not a git repository, so the panel's branch, status and log would all come back empty.

Verify

curl -sS -H "authorization: Bearer $COMMANDER_TOKEN" \
  https://commander.myorg.ai/api/boot-sequence/<new-project-id> | head -c 400

Expect quickstart and currentWork non-null and gitStatus.branch = sprint/phase-0-preconditions.

Note on ordering

Registering before the cutover is correct and intentional. The console should describe the repository that is the source of truth, not the directory that happens to be running. After the cutover the two agree.

Read this document as markdown — the same bytes an agent receives.