| 1 | check, lint, typecheck, build all die on this Mac: bare git is blocked by the Xcode license | pnpm repo:check:changed → "You have not agreed to the Xcode license"; package.json:12-15 route through --changed; ~15 scripts call bare git | Every session on adamobook, every pre-commit hook | High | 5 min | sudo xcodebuild -license accept (or point xcode-select at CommandLineTools) |
| 2 | Standing red gates: contract test fails, 9 vitest failures, all stale prose assertions | scripts/__tests__/repo-check.test.ts:195 (sheet-localizer lint); check-kubota-containment.ts:52; 4 skill test files asserting old SKILL.md wording | Anyone trying to prove a change is safe | High | 45 min | Lint exemption for sheet-localizer; fix powerpoint/tests/check-skill.test.ts:127 first |
| 3 | git status is never clean: 75 dirty files, 1,077 append-only ledgers, two unignored dirs, a routine erroring hourly | crons/**/history/*.jsonl ×1,077 (24 of 75 dirty); .remember/ and tmp/ untracked+unignored; fleet-drift writes ERRORS.md every hour since crons/fleet/ was deleted in 46b348faa | Every land, every "did I change anything?" check | High | 30 min | Ignore .remember/, fix the !/tmp/ block at .gitignore:291, restore crons/fleet/ |
| 4 | Root pnpm test runs 57 of ~1,400 tests; crons and skills have no test script at all | config/vitest/vitest.config.mts:5-70 hand-lists globs; crons/package.json and .forgebot/skills/package.json have no scripts; 200 cron tests + ~470 skill tests never run | Agents told "run the tests" get a false green | High | 30 min | Add "test": "vitest run" to both packages; skip-guard the 3 live-network Slack/Fireflies tests first |
| 5 | Per-app test wiring lies: forgefarm borrows the skills suite, forgescene is "exempt" but ships 7 tests, forgepoll/ara pass on passWithNoTests | apps/forgefarm has a test script and no vitest config, so it resolves the root config; apps/forgescene/package.json exemption says "No automated test suite"; apps/forgepoll/vitest.config.ts:11 | repo:check --changed on those apps | High | 20 min | Add apps/forgefarm/vitest.config.ts with root: __dirname; delete forgescene's stale exemption |
| 6 | Toolchain nags on every command: Node engine warning, vitest v2 root vs v3 majority, a literal placeholder in the workspace file | No .nvmrc; engines 24.x, machine 25.8 → [WARN] Unsupported engine per pnpm call; pnpm-workspace.yaml:92 '@google/genai': set this to true or false; root vitest ^2.1.9 vs 57 packages on ^3.2.4; package.json workspaces still lists apps and artifacts | Everyone, constantly, in small doses | High | 20 min | Add .nvmrc = 24, set genai to false, bump root vitest to ^3.2.4, drop the two dead workspaces entries |
| 7 | Registries drift from disk: apps-metadata misses 13 apps and lists a ghost, launch.json misses 2 routines and double-books a port | apps/_registry/apps-metadata.json: 70 entries vs 83 folders; forgelessons has no folder; .claude/launch.json lacks fleet-drift and forge-valley report entries; example and example-local both on 4075; a sync script exists and was not run | /start, FleetView, anything walking the registry | High | 20 min | Run crons/routines/routines-maintenance/sync-launch-json.ts; seed the 13 apps from scripts/gen-app-build-inputs.ts |
| 8 | Slack channel context is split and holey, so ForgeBot answers client channels cold | channels/greg-forgebot + greg_forgebot share one ID; sentry_adamobot + sentry_forgebot share one ID; 5 proposal channels have no CHANNEL.md; 8 registry rows point at missing folders; 394 hardcoded channel IDs have no name anywhere | Every Slack-facing routine and agent | High | 40 min | Merge the two duplicate pairs, scaffold 5 files from channels/_template, name the top 10 IDs |
| 9 | "Is this routine scheduled?" cannot be answered from the repo | .hermes/cron/jobs.json holds 1 job for 36 routines; 14 routines' last REPORT is dated 2026-07-12, 5 have no date at all; only forgebuild and forgesales are current | Anyone debugging why a watchdog went quiet | Med | 30 min | Add a schedule: frontmatter line to every ROUTINE.md; have routines-maintenance assert it |
| 10 | Template copy-paste debt: 77 byte-identical API handlers, 16 placeholder crons, 11 SecretsPage variants | health ×12, sentry-issues ×12, github-status ×11, vercel-deployments ×11, doppler-set ×11 (md5-identical); 15 apps schedule a no-op /api/cron/hourly hourly; SecretsPage has 5 distinct hashes | Every fix becomes an N-way edit | High | 30 min | Delete the placeholder crons from 15 vercel.json; extract github-status.ts into a package as the proof |