Files
fusion/scripts
gsxdsm 2ccd78abbc fix: main is red on the lifecycle ratchet — re-record the census baseline (#2811)
**`main` is RED on the lifecycle ratchet right now.** `node
scripts/lifecycle-column-census.mjs --strict` exits **1** on pristine
`origin/main`, which is the `Lint` job's *Lifecycle-column ratchet* step
— so **every open PR fails Lint** until this lands, regardless of its
own contents.

Verified on a detached checkout of `origin/main`, not on a branch of
mine.

## Cause

Eight `DELIBERATE-LITERAL` markers were added across seven files without
re-recording the baseline:

```
packages/core/src/task-move-disposer.ts            (in-progress, todo)
packages/core/src/task-store/archive-lifecycle-2.ts (archived)
packages/dashboard/src/github-tracking-comments.ts  (done)
packages/dashboard/src/gitlab-tracking-comments.ts  (in-progress)
packages/dashboard/src/server.ts                    (archived)
packages/dashboard/src/task-planner-chat-context.ts (done)
packages/dashboard/src/test/mockCoreEngine.ts       (in-review)
```

Adding a marker RECLASSIFIES a site (column-guard → deliberate), so the
tracked deliberate totals move and `--strict` fails until the baseline
records the new shape. It is the same mechanism that turned #2775 red
earlier today — a marker landing without its baseline — which is worth
noting because it has now happened twice from different PRs.

## The fix

Baseline re-recorded, nothing else. Zero source changes; the diff is one
derived file.

- `--strict` exits **0**
- `pnpm test:gate` — **161 / 13 / 487 / 71**
- `pnpm lint` clean

## Worth a follow-up by whoever owns the ratchet

The failure is structural rather than careless: a PR that adds a marker
is *doing the right thing*, and the baseline requirement is only
discovered when CI goes red — after merge, for everyone else. Two
options, neither of which I am taking unilaterally on a red-main fix:

1. have `--strict` treat a marker-only reclassification as an accepted
rise (it is not new debt — the count of unconverted guards goes
**down**);
2. or fail the PR that adds the marker, by comparing against the base
ref rather than the recorded baseline — the machinery for that already
exists in this script.

I would take (1): a marker is the documented way to close a site, and
requiring a second mechanical step to record it is a trap that catches
good behaviour.

🤖 Generated with [Claude Code](https://claude.com/claude-code)


<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->

## Summary by CodeRabbit

* **Bug Fixes**
* Improved lifecycle census error messages to distinguish genuine
increases in column-guard debt from reclassified deliberate literals.
* Added clearer remediation guidance for reclassified results, including
when to update the baseline.
* Updated lifecycle census baseline mappings to reflect current
classifications.

* **Tests**
* Added coverage for unchanged baselines, genuine guard-count increases,
and marker-only reclassification scenarios.

<!-- end of auto-generated comment: release notes by coderabbit.ai -->

---------

Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-07-30 12:40:05 -07:00
..