Files
.github/company/agents/savannah-savings/MEMORY.md
T
Test User ec3434d111 chore: sync company/ export snapshot with current configuration
- Added better-auth skills (6 new skill files)
- Added savannah-savings cluster-infrastructure resources and recent memory
- Updated agent AGENTS.md files for barcode-betty, checkout-charlie, deal-dottie, stockboy-steve
- Updated .paperclip.yaml and README.md to match current config
- Added coupon-carl 2026-04-15 memory file

Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-04-15 20:59:30 +00:00

79 lines
6.0 KiB
Markdown

# Tacit Knowledge — Savannah Savings (CTO)
How I operate and patterns I've learned.
## Organization
- Manager: Coupon Carl (CEO, `f2395b62-cb26-4595-b026-d506fde1c2c1`)
- Direct reports: Barcode Betty (`71f37521-8e62-4d27-bd9c-cfd52b5b3a07`), Stockboy Steve (`01dfbf79-c93d-4224-a7d9-05b2779e425e`), Checkout Charlie (`b8b294e3-a12d-4bff-b321-6f020792b21c`)
- Deal Dottie (`ff0b8079-5823-4c4f-ad40-6a5147246594`) — QA role, UAT tester
- Rollback Rhonda — **TERMINATED** as of 2026-04-01. Cannot assign tasks.
- Handoff chain: Engineer → QA (Checkout Charlie) → CTO (me). UAT run by Deal Dottie.
- Markdown Martha (`9becc57b`) — CMO, idle. Not a direct report.
## Memory System Notes
- Layer 1 (PARA): `$AGENT_HOME/life/` — entity knowledge graph
- Layer 2 (Daily Notes): `$AGENT_HOME/memory/YYYY-MM-DD.md`
- Layer 3 (Tacit): this file (`$AGENT_HOME/MEMORY.md`)
- Memory bootstrapped 2026-03-28 by CEO (CAR-64)
## UAT Ownership Model (CEO Directive, 2026-03-30; updated 2026-04-02)
- **CTO owns ALL UAT knowledge** in a playbook at `$AGENT_HOME/playbooks/uat-playbook.md`
- Rollback Rhonda terminated 2026-04-01. Deal Dottie (`ff0b8079-5823-4c4f-ad40-6a5147246594`) is the active UAT tester.
- HEARTBEAT.md still references Rhonda for UAT assignment — route UAT tasks to Deal Dottie instead.
- When UAT work arrives, CTO decomposes into atomic tasks — one URL, one action, one verification per task
- Playbook matures continuously after every UAT cycle
- Plan: CAR-198
## GitHub App Review Pattern
- CTO GitHub App (`cartsnitch-cto`) CAN submit formal `APPROVE` reviews via API: `gh api repos/{owner}/{repo}/pulls/{n}/reviews -X POST -f event=APPROVE -f body="..."`
- Do NOT use `gh pr review --comment` — that creates `COMMENTED` state, not `APPROVED`
- Branch protection requires 2 `APPROVED` reviews before merge — comment reviews don't count
- QA has a separate app (`cartsnitch-qa`) that can also submit approvals
- Always submit formal approvals, not just comment-based reviews
- **Self-approval blocker:** If CTO app pushed commits to a branch, GitHub blocks `APPROVE` review from that same app ("Can not approve your own pull request"). In this case, submit a COMMENT review noting CTO approval and hand off to CEO with a note about the constraint.
## GitHub CLI Multi-Account Auth
- Multiple gh accounts exist in `/paperclip/.config/gh/hosts.yml` (CEO, CTO, engineer, QA bots + groombook bots)
- `gh auth login --with-token` adds/updates account but does NOT switch active account
- After login, MUST run `gh auth switch --user cartsnitch-cto[bot]` to make CTO account active
- Check with `gh auth status` before any GitHub operations
- Active account determines which bot identity is used for API calls
## Task Decomposition Lessons
- Never delegate "investigate and fix" — investigate first, then delegate the specific fix
- MiniMax M2.7 agents cannot follow 500-line instruction docs — keep under 120 lines
- Each delegated task: 1 file change, exact repo/branch/path, step-by-step, no ambiguity
- Include full context in every task — don't assume delegate has context from previous tasks
## QA Handoff Lessons (2026-04-14)
- Charlie (QA) uses Playwright browser tools — cannot run unit tests or CLI commands
- Engineering task descriptions are NOT QA briefs. Always write a separate QA section when creating tasks that will need QA review.
- QA brief MUST include: (1) PR URL, (2) numbered test steps with explicit PASS criteria per step, (3) On FAIL → reassign to Betty, On PASS → hand off to CTO
- Frame QA steps as code review checks (open file in diff, verify X is present), NOT test execution
- Three tasks bounced (CAR-557, CAR-576, CAR-579) because original descriptions were engineer-oriented with no QA-ready steps
- Best pattern: engineer opens PR and comments with URL → CTO writes QA brief with the PR URL and reassigns to Charlie
## Playwright MCP
- Correct Playwright URL for CartSnitch: `http://playwright-cartsnitch:8931/sse` (NOT `http://playwright:8931/mcp`)
- Board confirmed 2026-03-31: Playwright was never broken, just misconfigured URL
- Each app gets its own Playwright sidecar with naming convention `playwright-<app>`
## Infra & CI Lessons
- Never use `:latest` image tags in production k8s manifests — containerd caches can serve stale digests. Always pin to CalVer or SHA tags.
- The k3s cluster has nodes: dot (control-plane), mindy (worker), wakko (control-plane), yakko (control-plane), buttons (gpu/worker).
- When debugging pod CrashLoops, always exec into the container and check the actual config files.
- GitHub App token script needs `chmod +x` before each session — permissions don't persist.
- **Merge-conflict silent drops:** When GitHub reports a PR as "merged", always verify with `git merge-base --is-ancestor <sha> main`. Merge conflicts can silently drop changes. PR #76's auth session fix was lost this way during PR #61 merge — the merge resolved auth.ts without the session mapping. After any merge, verify target file content on main matches expectations.
- **Foreign commit in infra PR #105** (2026-04-02): "Flea Flicker" (`flea-flicker@groombook.io`) committed to cartsnitch/infra. Not a CartSnitch identity — groombook is a different org. Check all PRs for non-CartSnitch commit authors going forward. Investigate how cross-org push access occurred.
- **Infra repo IS Flux GitOps:** `cartsnitch/infra` is referenced by the `cartsnitch` GitRepository in the cluster. It IS the Flux GitOps source of truth for CartSnitch. Do NOT escalate Flux CRD/RBAC changes to the bootstrap repo (`cpfarhood/kubernetes`). Add Flux resources (Kustomization CRDs, RBAC) directly to the infra repo. Board was clear (2026-04-03): "the infra repo is flux gitops."
- **Flux architecture:** Bootstrap (`flux-system/cartsnitch`) creates GitRepository + Kustomizations in `cartsnitch` namespace. Existing Kustomizations: `cartsnitch-dev` (path `./apps/overlays/dev`), `cartsnitch-prod` (path `./apps/overlays/prod`). All use `cartsnitch-flux` SA. New environment overlays need: a Flux Kustomization CRD + RBAC in the infra repo.