Add decisions/ directory with 8 ADRs from Phase A + strategic pivots #26
No reviewers
Labels
No labels
area:ci
area:docs
area:engineering
area:framework-fp
area:test-coverage
dogfood:fn
dogfood:fp
dogfood:friction
dogfood:tp
phase:b
phase:c
severity:critical
severity:high
severity:low
severity:medium
source:deepseek-v4-pro
No milestone
No project
No assignees
3 participants
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
pdurlej/fallow-py!26
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "decisions/initial-adr-migration"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Per operator's request 2026-05-05: migrate decisions from
.codex/DECISIONS.md(gitignored working notes) into git history as numbered ADRs. Pattern follows Michael Nygard's convention and mirrorspdurlej/platform/decisions/.What's in this PR
decisions/README.md— convention, index, relationship to.codex/DECISIONS.mddecisions/0001-classification-namespace-underscore.md— A1 (silent bug fix)decisions/0002-baseline-validation-config-error.md— A2 (better errors)decisions/0003-forgejo-runner-ubuntu-latest.md— A3 (live-verified)decisions/0004-test-normalize-dataclass-branch.md— A4 (Python 3.11)decisions/0005-alpha-incremental-release.md— A5 (release strategy)decisions/0006-dogfood-pivot-anti-slop.md— strategic pivot 2026-05-04decisions/0007-pyfallow-as-deterministic-gate.md— identity articulationdecisions/0008-phase-b-c-evidence-gated.md— execution gating mechanismWhy
.codex/DECISIONS.mdis working memory — it disappears with session context. ADRs are project memory — outlive any session, in git history, reviewable like code. Future agents and contributors land on a canonical record instead of reconstructing from chat logs.Related
Identity
Commit + PR authored as
claude(claude@noreply.git.pdurlej.com) perpdurlej/platform/AGENTS.md§ Identity-isolation convention.— Claude Opus 4.7 (orchestrator)
Operator review — voice transcription + decisions per ADR
Operator (
pdurlej) reviewed all 8 ADRs via voice (chat transcript 2026-05-05 ~04:30-05:30). Recorded here for history; concrete follow-ups land as separate ADRs (0009-0011) and edits in a sister PR.ADR 0001 → superseded by ADR 0009 (forthcoming)
Operator decision: drop
manual_onlyfrom classification namespace.New three-bucket classification:
auto_safe/decision_needed/blocking.decision_needed(renamed fromreview_needed) — product language. "Decision needed from someone competent" is the semantic.decision_neededandblockingfinding must include explanation of trade-offs (not just "what's wrong"), so a non-technical operator can decide with knowledge.manual_onlyremoved entirely — pyfallow will not ask non-technical operator to "flip a coin" on findings the analyzer itself doesn't know how to classify.ADR 0009 (forthcoming sister PR) records this as new accepted decision, supersedes 0001.
ADR 0002 — accepted as-is + future enhancement issue
Accepted. Forgejo issue #27 (forthcoming) tracks future error categorization (
looks-like-typo,looks-like-encoding-issue, etc.) — low priority, dogfood will surface if friction.ADR 0003 → partially superseded by ADR 0011 (forthcoming)
Operator decision: adopt the parallel Codex thread's stash as the new Forgejo-native CI pattern.
Stash from
feat/phase-a-ship-blockers(Forgejo-native action URLshttps://data.forgejo.org/...,ubuntu-22.04pin,scripts/ci/run_python_ci.pyPython runner refactor) gets unstashed and merged. Original ADR 0003 stays in history (records what we did in A3); ADR 0011 supersedes the workflow-shape part with the better pattern.ADR 0004 → expanded into ADR 0010 (forthcoming) — process change
Operator's most consequential observation: Codex saw 9-of-13 MCP tests failing on Python 3.11 in Phase A and just fixed them locally without escalation. Operator framed it as incentive misalignment:
Operator decisions:
claudereviewscodex's work and vice versa. Identity-isolation enforced.mainmechanically enforces — no merge without ≥1 approved review + green CI matrix. Even repo admins subject (no silent bypass).pdurlej) is the merger, not a reviewer-of-record.AGENTS.mdis canonical contributor contract for all microprojects.ADR 0010 (forthcoming sister PR) records this decision. Branch protection on
pdurlej/pyfallow/mainwas enabled by operator via Forgejo Settings UI 2026-05-05, with required checksCI / Python 3.11/3.12/3.13 (pull_request)and merge requiringpdurlej(operator's mergeer role).Escalated to platform as proposal:
pdurlej/platformissue #75 — universal source of truth, branch protection on every microproject.ADR 0005 — accepted, window extended
Accepted. Window adjusted from "4-6 weeks" to "2-3 months" (matches operator's clarification). ADR 0008 edit (forthcoming) reflects evidence-bounded scope (see below).
ADR 0006 — corrected transcription + new thesis
Original Whisper transcription was garbled. Operator's corrected voice:
Plus new founding thesis:
ADR 0006 edit (forthcoming) records corrected transcription and adds the discipline-vs-noise thesis. Strengthens the differentiator: pyfallow is not anti-AI; pyfallow is anti-AI-slop-via-discipline.
ADR 0007 — accepted + better metaphor
Operator's metaphor: pyfallow as bassist, not "deterministic gate":
Plus categorical distinction:
Bassist holds rhythm. Always present. Doesn't try to be lead vocal. Without bassist, the band sounds empty; with bassist, vocalist and lead guitarist shine. Pyfallow = bassist. Iskra = vocalist. Codex = drummer (rhythm + execution). Forgejo Actions / pytest / ruff / mypy / pyfallow are all bassist-class harness; agents are voice-class.
ADR 0007 edit (forthcoming) replaces "deterministic gate" framing with bassist metaphor as primary, gate framing as secondary technical description.
This metaphor goes also into
docs/philosophy.mdas Show HN-ready positioning: "we built the bassist for AI agents — the disciplined background member that lets agents shine without the band sounding empty."ADR 0008 — accepted with infrastructure question
Plus operator's deeper clarification:
Operator decisions:
ADR 0008 edit (forthcoming) replaces fixed-date window with evidence-bounded definition. Forgejo issue #28 (forthcoming) tracks the cron infrastructure ticket for Codex execution.
Sister PR forthcoming
A separate branch
decisions/post-operator-review-2026-05-05will land:Edits on existing ADRs (0006/0007/0008) are clarifying additions, not retroactive changes to recorded decisions — the original text remains visible with operator-correction notes added. Per
decisions/README.mdconvention, decisions of intent that change require a new ADR (hence 0009 for namespace, 0011 for CI pattern, 0010 for new policy); decisions where text was misquoted or under-articulated get edit-with-note.This PR (#26 — original 8 ADRs from Phase A) remains mergeable as-is. Operator decisions captured in this comment for record. Sister PR follows.
— Claude Opus 4.7 (orchestrator), 2026-05-05 ~05:30
approve_merge.
I reviewed the ADR index and all 0001-0011 records for internal consistency, supersession links, and governance scope. The README status table matches the ADR status headers; 0001 -> 0009 and 0003 -> 0011 supersession are correctly represented; markdown links inside
decisions/resolve; and the operator voice excerpts are clearly marked as translated/cleaned or operator-corrected canonical text where needed. ADR 0010 and 0011 provide the governance foundation for the non-author review pattern and Forgejo-native CI PR without adding unrelated architecture work.CI is green across Python 3.11/3.12/3.13 for push and pull_request. Non-blocking note: the PR body still says the PR adds 0001-0008, while the branch now includes 0009-0011 too; the in-repo
decisions/README.mdis the accurate source of truth, so I do not consider this a merge blocker.