Skip to content

Locale en · ko

Off the Desk — PapaCoder Field Notes

By Harin Kim · Published 5 Aug 2026

Summary

Part 7 (finale) of Coding Is Conversation. How ADR-0005, draft-only Internal API, WIP=1, and the editorial DAG live in the Labs repo.

Parts 1–6 stacked tools, vibe coding, roles, harnesses, loops, and graphs. Theory still leaves one question: so what does it look like in our repo?

Takeaway: At PapaCoder Labs we pinned that ladder into specs, a board, an Internal API, and Admin publish. Agents draft. Humans publish.

This is part 7 (finale) of Coding Is Conversation. The field notes are patterns already written into papacoder-labs. Sibling projects stay out unless Owner-approved and non-secret—per the series plan—so we omit them here on purpose.

Earlier: tools · vibe · multi-agent · harness · loops · graphs

Where the ladder lands in the repo

PartIdeaWhere it shows up in PapaCoder Labs
01Surface & billingCursor for build/editorial runs; ship on Vercel BFF
02Vibe → shipSmall slices + Admin/public URL; re-read code when secrets appear
03Roles & handoffsagents/editorial/*, agents/development/* cards + typed artifacts
04HarnessInternal API key, no DATABASE_URL for agents, draft-only
05Loops & WIPDev board Now=1, one series slug per run, quality/accuracy gates
06GraphsEditorial stage DAG + series-draft-run.md orchestrator
07FieldThe story below — ADR-0005 through Admin Publish

Rendering diagram…

Decision 1 — Simplify the boundary for cost (ADR-0005)

For MVP we skipped a separate NestJS/Railway API and run one Next.js app on Vercel as the BFF. Bodies live in Neon post_translations.markdown, not Git MDX; history in revisions. Locales ko/en are independently optimized (ADR-0005).

Agent writes go Cursor → POST /api/internal/... → Application use-cases → Prisma. No direct DB access for agents. The ADR’s platform cost band (~US$10–20/month excl. LLM) is an estimate; tokens are separate.

Lesson: “agent-friendly” is not “give agents the database.” A thin Internal API + human publish is the harness.

Decision 2 — Editorial is a DAG; publish is human

The runbook’s mental model is two doors (editorial-draft-publish):

DoorAuthAllowed
Cursor / agentsINTERNAL_API_KEYCreate/update drafts only
Owner / AdminBetter Auth sessionEdit + Publish

Stages live in agents/editorial/workflow.md. This series uses packages/agents/prompts/editorial/series-draft-run.md to pick one queued slug and run that DAG end-to-end. Artifacts land under packages/agents/runs/<date>-<slug>/; Neon is the draft SSOT after upsert.

Quality: agent-side eligibility is roughly ≥85 plus accuracyFail blocks. Eligibility does not replace publish — constitution: AI drafts; human publishes.

We once nearly “finished” with pretty Markdown only in chat and nothing in Admin. “Done” became Internal API 201/200 + Admin URL.

Decision 3 — Development uses the same grammar (WIP=1 board)

Platform work treats agents/development/board.md as the Single Source of Progress. Exactly one card in Now. Two cards means an orchestrator bug (agents/development/workflow.md). Loops/resume sessions re-read the board, not chat folklore.

Editorial WIP=1 (slug) and development WIP=1 (card) are the same muscle on different surfaces—where parts 5–6 stop being philosophy and become ops.

Decision 4 — Split secrets from write authority

Field checklist we repeat:

[ ] Agents: INTERNAL_API_KEY only — no DATABASE_URL in agent env
[ ] Draft upsert via POST /api/internal/drafts (never a publish endpoint)
[ ] Secrets in env / secret store — never commit production.env values
[ ] Human gate for Publish, force-push, prod migrate, credential edits
[ ] Run artifacts may mirror under docs/editorial/… but Neon is SSOT after upsert

Parts 4–5 collapse into this list. If the only control is “don’t touch .env” in a prompt, you’ve already lost on a real team.

Practice: the minimum set to port elsewhere

You don’t need to clone PapaCoder. Four file habits carry most of the ladder:

# 1) AGENTS.md — harness policy (forbidden / required checks)
# 2) board.md or ISSUE template — WIP=1 Now column
# 3) prompts/orchestrator.md — one slug|ticket per run; stop budgets
# 4) runbook.md — “draft API vs human publish” two doors

Then in Cursor:

  1. Run the orchestrator on one ticket only
  2. Pin Research/Implement/Review as artifact files
  3. Forbid “done” before automated gates (tests/lint) pass
  4. Only humans merge/deploy to main/prod

This very series run uses the same contract: draft upsert → Admin Publish.

Cursor notes (this repo)

  • Series: when Owner says “next part,” execute all of series-draft-run.md — no trend hunting.
  • Dev: read only board.md Now for the cycle — don’t trust chat summaries.
  • Parallelize read-only research via Task/subagents; serialize writes.
  • When stuck, don’t add goals—move the card to Blocked or escalate to a human.

Honest trade-offs

We gainedWe pay
Simple agent write pathDesign cost for Internal API, auth, audit
Independent KR/EN draftsDouble write/review cost
Resume via board/DAGDoc hygiene debt if neglected
Smaller blast radius (draft-only)Publish latency (human bottleneck—on purpose)
Lower MVP platform cost (single BFF)May need workers/queues later (ADR defers)

No silver bullet. Choosing not to operate on prompts alone is already encoded in this repo’s code and runbooks.

FAQ

Q. Why no sibling project stories?
A. The series plan requires Owner-approved, non-secret scope. This finale closes on Labs’ public patterns only.

Q. Does score ≥85 auto-publish?
A. No. It’s an eligibility gate. Publish is Admin.

Q. We already run Nest—must we follow ADR-0005?
A. It’s an MVP cost/complexity choice. The patterns (agent→API→human publish, WIP=1) travel across stacks.

Q. Is the series over?
A. This ladder’s queued posts end here. New topics need a new plan and Owner priority.

Sources

Closing the series

#One line
01Prefer surface & billing over model arguments
02Ship by talking; re-read code when risk appears
03Quality from roles and contracts
04Build walls outside the prompt
05Design how it stops
06When a line fails, draw a map
07At Labs, we live it as repo rules

Reader next step: sketch WIP=1 and the two doors (draft API / human publish) on your repo.
Owner next step: review/publish drafts #01–#07 in Admin.

Thanks for reading to the end. Coding is still conversation—but conversation needs walls, maps, and humans.

Related posts

More in Tutorials

Comments

Checking sign-in…

No comments yet.