All notable changes to this project are documented in this file.
This file is generated — its source of truth is the pipeline's closed-issue and
merged-PR metadata (the type:* taxonomy), derived by packages/changelog-derive
per ADR 0069. Regenerate it;
do not hand-edit it. The format follows Keep a Changelog.
- write-code repair mode ignores GitHub-native inline PR review comments (only reads the verdict marker) (#383)
- review-plan cutover: replace the §3 degradation guard with the distributed epic-ledger gate (#367)
- Implement the chosen epic-ledger distribution + declare it in the plugin manifests (#366)
- Repo-as-config mechanism + de-pin triage as the repo-agnostic tracer (#348)
- pre-commit hook: run @phoenix/leak-guard scan on staged files (#315)
- CI: run @phoenix/leak-guard scan on PRs (the authoritative leak gate) (#312)
- Dashboard worker: GitHub REST 403 on /issues at runtime (token perms?) (#292)
- Plan layer has no epic-level lock — review-plan child flips race plan-epic re-plans (drops/implements superseded stories) (#264)
- Dashboard: surface review-code/review-doc gate verdicts for open PRs (#257)
- Dashboard UI: epic detail — children, dependency topology, pickable/blocked, phase progress (#256)
- Dashboard UI: queue board grouped by status with type/priority badges (#255)
- Dashboard: cache GitHub fetch with TTL + stale-on-error freshness flag (#254)
- Dashboard worker: pipeline-state API parsing kamp-us/phoenix issues (#252)
- review-code: cite structured results from the run-evidence bundle (#247)
- ship-it: assert the run-evidence bundle (commit==head SHA + all checks pass) (#246)
- CI: run crabbox + adapter on every PR and publish the run-evidence bundle (#245)
- Build crabbox→ADR-0054 manifest adapter (map run output to a SHA-bound bundle) (#244)
- Plugin README + usage doc for the issue-pipeline suite (#234)
- Author plugin.json + marketplace.json and validate the repo-agnostic install-and-use path (#233)
- write-code: consume a review FAIL marker to fix-and-resubmit (#221)
- Implement ADR 0051 — author-bind ship-it's review PASS marker (#210)
- Implement ADR 0052 — review-code pins agent config to base ref (#209)
- Build heal-ci — self-heal CI classifier that fills ship-it's red-CI dead-end (#207)
- review-plan: make the gate operable + fix two floor false positives from first real-epic run (#200)
- [scratch e2e] review-plan child C (zero-AC, FAIL path) — safe to delete (#195)
- [scratch e2e] review-plan child B — safe to delete (#193)
- [scratch e2e] review-plan child A — safe to delete (#192)
- Pipeline has no reviewer for doc/ADR PRs (need a review-doc stage) (#189)
- @phoenix/leak-guard package: pure findLeaks core + scan CLI (no-local-paths) (#173)
- Re-plan convergence loop with stall-based circuit breaker (#166)
- review-plan skill: deterministic floor + non-blocking LLM soft-advisor (#165)
- review-plan gate action: validate ledger, flip planned to triaged, post verdict (#164)
- Story-aware ledger: validator MISSING_STORY/UNCOVERED_STORY + Github capability (#163)
- Land the @phoenix/epic-ledger package (commit + open PR) (#160)
- Report capture: Report service + content_report table (the bildir backend foundation) (#151)
- CI runs lint/typecheck/unit on docs- and skills-only changes (no path gate) (#104)
- Footer "rss" link is dead — /rss.xml has no worker handler (no feed generated) (#99)
- Triage sweeps have no concurrency guard: last-write-wins rewrites, duplicate splits (#91)
- add expires_at column migration to short_links (#54)
- implement expiry-aware ENVIRONMENT-gated admin create-mapping path (#53)
- implement ENVIRONMENT-gated admin create-mapping path (#52)
- define short_links D1 table + Drizzle schema + migration (#49)
- epic-ledger README still names @phoenix/epic-ledger after the @kampus rename (#376)
- De-pin remaining skills: gh api literals + trigger frontmatter (#351)
- Resolve external phoenix-doc references for installed-skill context (#350)
- Resolve the @phoenix/epic-ledger dependency for plugin distribution (#349)
- Stale stacks/github.ts path in .github/workflows/deploy.yml comment (#302)
- deploy.yml dashboard leg fails: alchemy ConfigError SchemaError on DASHBOARD_GITHUB_TOKEN (red on main) (#296)
- Relocate CI-credential stack out of apps/web → standalone @phoenix/infra (#290)
- manifest schemaVersion type drift: code emits number, ADR prose says string (#288)
- Extend CI deploy to fan out over apps/dashboard (#253)
- Scaffold apps/dashboard (@phoenix/dashboard) mirroring apps/web skeleton (#251)
- Pipeline dashboard app under apps/, mirroring apps/web worker+deploy patterns (#249)
- Document the crabbox run-evidence pattern (.patterns/crabbox-run-evidence.md) (#248)
- Add a CI guard that validates .claude/skills/*/SKILL.md frontmatter (#239)
- Build crabbox→ADR-0054 manifest adapter + wire bundle into review-code/ship-it (#238)
- write-code/review-code lint step still no-ops from inside a worktree (biome check .) (#236)
- Spike crabbox as the run-evidence producer (gates ADR 0054) (#235)
- Establish the plugin-root skills/ layout without breaking local discovery (#231)
- Package the .claude/skills issue-pipeline suite as a distributable Claude Code plugin (#228)
- write-code SKILL.md: broken relative link to ADR 0047 (../../ should be ../../../) (#224)
- README has no section documenting the skill pipeline (#222)
- Orphaned @swc/core in onlyBuiltDependencies after react-swc removal (#217)
- Switch Vite from @vitejs/plugin-react-swc to @vitejs/plugin-react (#215)
- Neutralize personal
umut/prefix in skill command blocks repo-wide (#201) - ship-it reshape: control-plane scope + review-doc routing (#197)
- [scratch e2e] review-plan gate epic — safe to delete (#194)
- Stale comment in epic-ledger validate.ts misstates planned-child label flow (#171)
- Adopt status:planned — plan-epic mints children unpickable until review-plan flips them (#162)
- No deterministic verification gates plan-epic's output before write-code (#159)
- Local vault path leaked in .decisions/0007 (line 20) on main (#158)
- Stale PanoPost DO references in pano e2e comments — no such DO exists (only LiveDO) (#79)
- Remove "fate - me" (FateMeCard) from the profile page (#71)
- [SEED wc] investigation: example diagnosis (#64)
- [SEED wc] child BLOCKED (requires DEP) (#62)
- [SEED wc] child DEP (blocker, phase 1) (#61)
- [SEED wc] p2 standalone chore D (#58)
- [SEED wc] p0 standalone chore C (newer p0, assigned -> skip) (#57)
- [SEED wc] p0 standalone chore B (oldest p0, should be picked) (#56)
- [SEED wc] p1 standalone chore A (#55)
- [SCRATCH] plan-epic dry-run: link shortener (#48)
- pasaport: align listContributions "after" signature with the keyset shape (#39)
- investigate: T3 deployed-workerd startup hang (alchemy sidecar readiness race) (#33)
- Published @kampus/epic-ledger@0.1.0 is unrunnable — ships src/*.ts bin, no build (ERR_UNSUPPORTED_NODE_MODULES_TYPE_STRIPPING) (#405)
- Remove publishConfig.provenance:true from @kampus/epic-ledger — breaks non-CI publish, redundant under OIDC (#398)
- review-code/review-doc document the stale .claude+.github-only blocking set (drifts from ADR 0065) (#375)
- Epic-lock acquire guard always backs off — gh --jq prints empty (not 'null') for a missing label (#347)
- ship-it refuses on ANY red check — can't tell non-gating from gating CI (#324)
- ADR 0058: rebase-then-ship orphans the review-code verdict (split review/ship is broken on rebase) (#310)
- review gates verify ground-truth against a stale local main (no fetch) → false verdicts (#308)
- deploy.yml: dashboard/web deploy job skips for cansirin same-repo PRs (author_association gate) (#293)
- fetchedAt type mismatch: worker encodes number, board types string (#291)
- Dashboard deploy fails: GITHUB_TOKEN required but never provisioned in CI (#289)
- deploy.yml preview-comment create-create race: first deploy can post two sticky comments (#273)
- heal-ci can file a defect for a red PR that write-code repair-mode is already fixing (duplicate work) (#265)
- Hardcoded worktree/ref/tmp-file names collide across concurrent skill runs (deslop, write-code, review-code, report, review-doc) (#263)
- plan-epic rewrites the epic body via blind PATCH — concurrent runs lose-update the ## Dependencies topology (#261)
- write-code issue claim is a TOCTOU on assignees, not a lock — two machines can implement the same issue (#260)
- Gate verdicts are appended latest-wins, not SHA-bound — a stale PASS can mask a FAIL and ship-it merges broken code (#258)
- ship-it verdict regex doesn't match review-code's bolded PASS marker (handoff stalls) (#219)
- review-doc/review-code verdict temp file uses a fixed path — back-to-back runs collide (#206)
- review-doc APPROVE→comment fallback (||) silently misfires when wrapped in a shell pipe (#205)
- write-code Step 4 git checkout main breaks under worktree isolation (#188)
- pnpm lint is a silent no-op in agent worktrees (biome excludes **/.claude) (#119)
- Sözlük letter filter cannot be untoggled — no way back to the mixed view (#101)
- Footer "tüzük" link is dead — /tuzuk has no route (falls to 404) (#98)
- Long unbroken text overflows layout — no overflow-wrap on user content (post/comment/definition/title) (#96)
- Pano post-edit form renders unstyled (white boxes) — kp-pano-edit-post* CSS missing (#95)
- ⌘+Enter does not submit composers — advertised shortcut has no keydown handler (#94)
- Pano "tartışma" filter: client-side tag filter over hot feed → empty/under-filled + wrong count (#90)
- User profile "katkılar" rows look identical — kind badge color tokens are undefined (#87)
- User profile "katkılar" rows render markdown as raw text (not rendered) (#86)
- User profile (/u/:handle) avatar invisible — initials tile uses --surface-2, not accent (#85)
- Profile "tüm cihazlardan çık" (sign out all devices) button is inert — no onClick (#84)
- e2e: waitForURL(//pano/[id]/) matches /pano/yeni, masking pano submit-navigation failures (#78)
- Profile "tüm cihazlardan çık" (sign out all devices) button is inert — no onClick (#76)
- Profile "görünüm > tema" toggle changes nothing (only local state) (#72)
- Profile "görünen ad" save (kaydet) button is inert — no onClick (#70)
- Integration suite exits non-zero (✗) despite all 116 tests passing (#20)
- Control-plane boundary (ADR 0053/0065) is honor-system — main ruleset requires 0 approvals + 0 checks (#382)
- ADR: choose the @phoenix/epic-ledger distribution mechanism (npm publish vs bundle vs dependency-free) (#365)
- skills/*.md PRs deadlock: review-code PASS but ship-it demands review-doc namespace (#359)
- In-worktree (sparse) typecheck bootstrap can't run: biome plugins, patches/ hashing, fate generate (#336)
- Adopt a git-hook manager (lefthook) when a 2nd hook appears (#333)
- ADR: multi-app / multi-worker deploy model for phoenix (#250)
- Decide crabbox bundle storage/transport + manifest schema versioning (ADR) (#243)
- ADR: repo-as-config mechanism + dispositions for the distributable plugin (#232)
- ship-it AUTHORIZED_REVIEWERS allowlist is spoofable — not real authz (#229)
- Investigate crabbox-style run-evidence bundle to make auto-merge gate trustworthy (#226)
- Concurrent non-blocking doc PRs collide on .decisions/index.md — ship-it has no auto-rebase (#204)
- ADR: control-plane boundary (supersede 0049) — only .claude + .github block (#196)
- Decide how review-code isolates itself from branch-controlled instructions/config (#186)
- Decide how ship-it makes the review-code PASS signal unforgeable (author-bind the marker) (#185)
- No mechanism to derive a changelog after shipping code (#181)
- ADR: the review-plan gate (deterministic plan-epic verification) (#161)
- künye: decide the v1 karma write path (DO-backed vs D1-direct) + KarmaBump contract redesign (#139)
- write-code: no path for an investigation that resolved into a trivial known fix (#118)
- [SEED wc] decision: example settled choice (#63)
- DECISION: admin create path — fate view or /api route? (#51)
- epic-lock acquire guard backs off on a FREE lock (gh index() prints empty, not 'null') (#369)
- leak-guard DOC_SELF_EXEMPT still names .claude/skills/ paths after PR #353 move — CI red (#354)
- leak-guard pre-commit errors instead of warn+allow when scan can't run (#332)
- prepare script git config fails in non-git installs (run-evidence crabbox), exit 128 (#330)
- Dashboard /api/pipeline returns CF 1101 (uncaught exception) in prod — board down (#323)
- leak-guard: bin.ts needs a
scan <files...>subcommand (CI gate #312 contract) (#314) - Dashboard prod deploy fails: PipelineCacheDO DO namespace undefined (getByName) in alchemy deploy (#299)
- deploy job skipped on all cansirin PRs (author_association gate over-rejects) (#294)
- scratch: probe conditional-write v2 (auto-deleting) (#281)
- scratch: probe GitHub conditional-write semantics (auto-deleting) (#280)
- Dashboard deploy fails on every PR — alchemy deploy missing GITHUB_TOKEN (SchemaError), blocks green CI (#279)
- Pipeline skills use 'gh api --argjson' which gh api doesn't support (author gate never runs) (#241)
- write-code SKILL.md: pre-existing broken .decisions link uses ../../ (resolves to .claude/.decisions) (#227)
- Harden pipeline trust boundary: forgeable review-code PASS signal + branch-controlled reviewer config (#183)
- plan-epic + write-code Conventions footers omit ship-it from the pipeline chain (#180)
- Edited pano comment jumps position — ordering is createdAt (correct); suspect live-update merge (#92)
- [SEED] review-code validation scratch (task 7, throwaway) (#65)
- [SEED wc] epic: dependency-edge demo (#60)
- implement GET /s/:slug 302-redirect route (#50)
- [triage self-test] effect-testing.md references removed support layout (#47)
- [triage self-test] pano post-list keyset drops last item of each page (#46)
- [triage self-test] pano keyset off-by-one + stale effect-testing doc (#45)
- [triage self-test] sozluk search is weird sometimes?? (#44)
- [triage self-test] duplicate workerd-startup-hang agent report (#43)
- [report skill self-test] verify type-blind filing + needs-triage label + footer (#42)
- lint: clean up biome errors so CI can enforce
pnpm lint(#7) - skill: dissolve — generate best practices for a package or file (#6)
- ci: run test suite on GitHub Actions (#4)