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.
|