You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Commit d09bfb8
Browse filesBrowse the repository at this point in the historyBrowse files
feat(platform-checklist): planned items — selector, status command, RUNNER/README/skills
The selector resolves one selector against two pools: the runnable one it has
always returned, and the planned one it now reports beside it. A planned id
must never reach a runner (whatever verdict came back would be about nothing),
but dropping it silently would answer 'nothing here' about an area whose gap
the ledger is deliberately carrying.
`pnpm gen:checklist-status` is the 平台功能清单 + 实现状态 view: per-area
active/planned counts and every planned id, plus `--out <dir>` rendering the
wiki page set — one index and one page per area, planned first. Published on a
schedule to the wiki, never committed: a generated page in the tree is a third
artifact to keep fresh whose stale copy reads exactly as authoritative as a
current one.
Claude-Session: https://claude.ai/code/session_01AmH9bKvGoLjiY86Q4Z3og2
Co-authored-by: Claude <noreply@anthropic.com>
"surface":"browser", // browser | api | cli | build | mixed (the 15.1 plan's 🖥/🔌 lanes)
@@ -297,6 +297,65 @@ Three things worth knowing before you meet it:
297
297
showcase-side fixture gaps #3358 uncovered (#3408, #3409, #3415) each cost a sweep to
298
298
rediscover; recording the gap on the item is what stops that.
299
299
300
+
## Implementation status — `planned` is how the ledger holds a capability gap
301
+
302
+
The ledger used to record only capabilities that already work, so a missing piece of a
303
+
listed capability had nowhere to live: the backlog sweep had nothing to point a `Path:`
304
+
at, and the platform's implementation status lived in nobody's head. The North Star's
305
+
definition line (「做出来的是什么」…「缺任何一样就不是这个应用」) makes such a piece a
306
+
**requirement**, so it belongs on the ledger — as a fourth status, not as a second
307
+
document. A separate feature list would drift against this one with no gate able to say
308
+
which is wrong (the ADR-0136 lesson), and the reading entry carries numbers only because
309
+
a command produces them.
310
+
311
+
**`status: "planned"`** — the definition requires this capability and the platform does
312
+
not yet implement or verify it. What a planned item carries, and what it deliberately
313
+
does not:
314
+
315
+
| field | on a planned item |
316
+
|:---|:---|
317
+
|`id` · `title` · `priority` · `surface` · `revision` · `history`| as for any item — an id is picked once and is immutable, so it can be pointed at from the day the gap is found |
318
+
|`personas`|**required** — who the capability is for is knowable the day the gap is found, and is what makes the gap readable to the next sweep |
319
+
|`since`|`null` (no target release chosen) **or the TARGET release** — never a release that already shipped without it |
320
+
|`steps`|**none.** There is nothing to drive. Steps arrive in the PR that implements the capability, in the same edit that promotes the item |
321
+
|`acceptance`| not required — no oracle can be consulted yet. Clauses drafted early are still validated |
322
+
323
+
Three consequences, all mechanical:
324
+
325
+
-**A planned item never runs.**`scripts/checklist-select.mjs` resolves it in no
326
+
selector's runnable set, and there is no flag that makes it one. The selector reports
327
+
it separately and the run record carries the verdict `planned` — ⛔ never `pass`,
328
+
`fail` or `blocked` ([RUNNER.md](./RUNNER.md) "Verdicts"). A blocked item is a real
329
+
test the environment cannot run today; a planned item has nothing to run at all.
330
+
-**A planned item is not coverage.** It is a legal `coverage.json` map target — that is
331
+
where a capability-gap card points — and it contributes zero: a kind whose *only*
332
+
items are planned is reported **UNMAPPED**, exactly as if the entry were empty.
333
+
Otherwise `planned` would be the cheapest way to green an untested kind, and the
334
+
ratchet would measure intentions instead of tests.
335
+
-**Promotion `planned → active` is earned, not declared.** It takes a run record in
336
+
which the item **passed**: steps and acceptance arrive with the implementation, the
337
+
item is run, and only then does the status flip (bumping `revision` and appending to
338
+
`history` like any other semantic edit). ⛔ Flipping the status because the code
339
+
landed is how a ledger starts reporting coverage it does not have.
340
+
341
+
**Reading the status** — one command, and the human entry point it publishes:
342
+
343
+
```bash
344
+
pnpm gen:checklist-status # per-area active/planned counts + every planned id
345
+
pnpm gen:checklist-status --out <dir># also render the wiki pages into <dir>
346
+
```
347
+
348
+
The wiki index **[Platform-Checklist](https://github.com/objectstack-ai/objectstack/wiki/Platform-Checklist)**
349
+
is the 「平台功能清单 + 实现状态」 reading entry: one row per area with its active and
350
+
planned counts, linking to one `Checklist-<area>` page per area that lists every item
351
+
(`id · title · priority · status · personas`) with the planned ones in their own section
0 commit comments