99 lines
5.1 KiB
Markdown
99 lines
5.1 KiB
Markdown
> Core 中立版(Increment 2 改写)。术语对照见 core/adapters/TERMINOLOGY.md;本组织实例表述见 dogfood 对应文件。
|
||
|
||
## Ticket Lifecycle — registry-first filing, claim-to-promote ([org-internal #3002] G1)
|
||
|
||
Bugs worth fixing start life as a **registry row**, not an independent ticket.
|
||
This extends the two-tier-artifacts philosophy to the ticket queue: a
|
||
"discovery" (no consumer yet, lifecycle undetermined) is Tier-1-shaped — a
|
||
cheap row in a ledger — and is **promoted** to a Tier-2 independent ticket
|
||
only when someone schedules or picks it up. (Filing one ticket per discovery
|
||
is how the 2026-08 backlog formed.)
|
||
|
||
### The registry (登记册)
|
||
|
||
- **Where**: a `## TD 登记` comment on the **source ticket** (the ticket whose
|
||
verify/review produced the candidates; a ticket-backend issue comment).
|
||
No source ticket (standalone iteration) → the owning Epic's tracker
|
||
ticket; no Epic either → the standing TD 冷存档 tracker ticket (G2's
|
||
fallback archive target).
|
||
- **Row format** (one line per item, checkbox-closeable):
|
||
|
||
```markdown
|
||
- [ ] TD-{NNN} · {type: UNVERIFIABLE|ACCEPTED_RISK|DEFERRED|INFO} ·
|
||
{severity: HIGH|MEDIUM|LOW} · {origin chunk-id/iter-N} — {one-line summary}
|
||
· trigger: {objectively verifiable reactivation condition}
|
||
```
|
||
|
||
- **TD-NNN** is allocated at REGISTRATION via the ledger mutex
|
||
[org-internal #3322]: the 配额账本脚本 (`td-alloc` 形态, `bash <alloc-script>
|
||
<count> <source-slug> [--ticket N]`) takes a contiguous range from the TD
|
||
allocation ledger (a standing tracker issue) — append-only `**td-alloc**`
|
||
comments, earliest-comment-id wins on collision. **ANY allocation — manual
|
||
included — must land a td-alloc comment on the ledger BEFORE the registry
|
||
row is written** (script, tool API, or web UI). Hand-computed `max + 1`
|
||
without a ledger comment is FORBIDDEN (parallel-session races,
|
||
[org-internal #3322]). The id is **reserved for life**: promotion reuses
|
||
it, never renumbers. Run the alloc script's `--check` (reconciliation)
|
||
when the last check predates this batch, and in retrospectives.
|
||
- **De-duplication** queries the TD index (same-source rows) plus open
|
||
promoted issues (cross-source); index matching replaces title-keyword
|
||
matching (keyword dedup once produced 18 fragments from one source).
|
||
- **Query-failure ruling ([org-internal #3383]: fail-open, visible)**: if the
|
||
dedup query itself errors (backend API failure — NOT "queried and found no
|
||
match"), retry once; on second failure file anyway, marking the comment
|
||
`dedup-unverified` for retro/reconciliation sweep. Fail-closed rejected:
|
||
known dedup failures are match failures it cannot prevent, and a backend
|
||
hiccup would block a verify PASS gate.
|
||
|
||
### Promotion (认领升票)
|
||
|
||
A row is promoted to an independent ticket when **scheduled or picked up**
|
||
(assigned, pulled into a wave/sprint, or chosen):
|
||
|
||
1. Create the ticket (ticket backend 立案) with the row's reserved `TD-NNN`
|
||
(full body per the verify skill's promotion template).
|
||
2. Tick the registry row (`- [x]`) and append `→ #NNNN` to it.
|
||
3. The new ticket's `## Parent` points back at the registry's source ticket.
|
||
|
||
Unpromoted rows are not second-class: the registry comment IS a visible
|
||
ticket-backend comment, rows close individually, and the TD index dedups
|
||
across sessions — the old per-item model's three guarantees at ~1 ticket per
|
||
source.
|
||
|
||
### PR 准入(pr-admission,TD-678)
|
||
|
||
会话交付物 = 分支 + 报告;开 PR 属编排职权,按容量串行一次一张、双绿并入
|
||
再开下一张([org-internal #3864] 管合并出口、本节管 PR 入口)。交付推送前置
|
||
本地验证(`<test-cmd:changed>` + `<typecheck-cmd>` 绿;实例命令绑定见
|
||
core/adapters/TERMINOLOGY.md)。编排不可达可自开,PR 正文标
|
||
`uncoordinated`。细则与门控项:pipeline-gate 清单 PR 准入节。
|
||
|
||
### BF / FT family umbrellas
|
||
|
||
Baseline failures and flaky tests file **per root-cause family**, not per
|
||
occurrence: evidence (run, commit, failing output, failure rate) attaches as
|
||
comments on the family's **umbrella ticket** (ticket-backend issue), keyed by
|
||
failure signature (error signature + affected surface, not just
|
||
`file::test-name` — one root-cause family may span several tests; precedents
|
||
[org-internal #2585], [org-internal #2925]). Filing a new ticket when the
|
||
signature already matches an existing family (open or closed) is forbidden —
|
||
attach evidence instead. A family umbrella is closed when its signature no
|
||
longer reproduces.
|
||
|
||
### TTL semantics (feeds G2's issue-reaper)
|
||
|
||
- An **unpromoted registry row** stale for 30 days (no promotion, no
|
||
evidence comment) is reaper-eligible: 7-day notice, then archived into the
|
||
tracker's archive section.
|
||
- A **promoted ticket** follows the normal issue lifecycle (its own priority,
|
||
assignee, milestone).
|
||
|
||
### Compatibility (Iron Law preserved)
|
||
|
||
- `_(Deferred: TD-XXX <reason>)_` annotations keep their exact format; the
|
||
`TD-XXX` now resolves to a registry row (or promoted ticket) instead of an
|
||
issue number.
|
||
- Archive-at-close, `## 工件索引` guards, and issue-checklist-sync are
|
||
untouched: the registry comment is an ordinary ticket-backend comment, not
|
||
a Tier-2 artifact page.
|