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 5c7caff
Browse filesBrowse the repository at this point in the historyBrowse files
"surface":"browser", // browser | api | cli | build | mixed (the 15.1 plan's 🖥/🔌 lanes)
@@ -297,6 +297,67 @@ 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 drifts against this one the moment either is edited,
308
+
and nothing can then say which of the two is wrong: there is no ratchet between two
309
+
hand-maintained documents, only a pair of disagreeing readings. Hence one ledger, one id
310
+
space, one more status — and a reading entry that carries numbers only because a command
311
+
produces them.
312
+
313
+
**`status: "planned"`** — the definition requires this capability and the platform does
314
+
not yet implement or verify it. What a planned item carries, and what it deliberately
315
+
does not:
316
+
317
+
| field | on a planned item |
318
+
|:---|:---|
319
+
|`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 |
320
+
|`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 |
321
+
|`since`|`null` (no target release chosen) **or a TARGET release**. ⛔ Only the SHAPE is checked: this ledger holds no release timeline, so a target naming a release that already shipped is an authoring error no gate here can see |
322
+
|`steps`|**none.** There is nothing to drive. Steps arrive in the PR that implements the capability, in the same edit that promotes the item |
323
+
|`acceptance`| not required — no oracle can be consulted yet. Clauses drafted early are still validated |
324
+
325
+
Three consequences, all mechanical:
326
+
327
+
-**A planned item never runs.**`scripts/checklist-select.mjs` resolves it in no
328
+
selector's runnable set, and there is no flag that makes it one. The selector reports
329
+
it separately and the run record carries the verdict `planned` — ⛔ never `pass`,
330
+
`fail` or `blocked` ([RUNNER.md](./RUNNER.md) "Verdicts"). A blocked item is a real
331
+
test the environment cannot run today; a planned item has nothing to run at all.
332
+
-**A planned item is not coverage.** It is a legal `coverage.json` map target — that is
333
+
where a capability-gap card points — and it contributes zero: a kind whose *only*
334
+
items are planned is reported **UNMAPPED**, exactly as if the entry were empty.
335
+
Otherwise `planned` would be the cheapest way to green an untested kind, and the
336
+
ratchet would measure intentions instead of tests.
337
+
-**Promotion `planned → active` is earned, not declared.** It takes a run record in
338
+
which the item **passed**: steps and acceptance arrive with the implementation, the
339
+
item is run, and only then does the status flip (bumping `revision` and appending to
340
+
`history` like any other semantic edit). ⛔ Flipping the status because the code
341
+
landed is how a ledger starts reporting coverage it does not have.
342
+
343
+
**Reading the status** — one command, and the human entry point it publishes:
344
+
345
+
```bash
346
+
pnpm gen:checklist-status # per-area active/planned counts + every planned id
347
+
pnpm gen:checklist-status --out <dir># also render the wiki pages into <dir>
348
+
```
349
+
350
+
The wiki index **[Platform-Checklist](https://github.com/objectstack-ai/objectstack/wiki/Platform-Checklist)**
351
+
is the 「平台功能清单 + 实现状态」 reading entry: one row per area with its active and
352
+
planned counts, linking to one `Checklist-<area>` page per area that lists every item
353
+
(`id · title · priority · status · personas`) with the planned ones in their own section
0 commit comments