state-hub/api/models
tegwick 8b207a991a
All checks were successful
CI Smoke / host-smoke (push) Successful in 0s
CI Smoke / container-smoke (push) Successful in 1s
Build and Publish Multi-Context Image / build-and-push (push) Successful in 26s
feat(tasks): give task rows a canonical record identifier
Every work-record type carried a stable identifier except tasks, whose rows held
only id, workplan_id, title, status and priority — nothing connecting a row to
CUST-WP-0067-T01 in the file it came from. Matching was therefore by title, so a
renamed heading looked like one task vanishing and another appearing, and the
forge-derived reset had to refuse to touch tasks at all.

Adds tasks.record_id (nullable: no migration can invent an identity for an
existing row) and a backfill that reads the pairing from the repository files,
where a task declares both its canonical id and its projection UUID. 5516 pairs
across 121 repositories with zero conflicts; 4456 of 6073 cache task rows
identified.

Diff and reset now key on record_id where present, falling back to a
title-prefixed key so an unidentified row stays visibly unidentified.

Unknown stays unknown: a row the files do not claim keeps no identity and the
reset keeps refusing to act on it, and an existing identity is never
overwritten — a mismatch is recorded as a conflict rather than resolved.

Refs STATE-WP-0083-T06

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>

Assistant: claude-code
Assistant-Model: opus
Assistant-Process: 2583210@bnt-lap001
Assistant-Session: f2bff2d5-e9b2-4338-92ca-10282a927006
2026-08-26 02:05:51 +02:00
..
__init__.py feat(review): add multi-owner contracts and receipts 2026-08-22 20:57:51 +02:00
agent_message.py feat(CUST-WP-0015): implement agent inbox for inter-agent coordination 2026-03-16 02:55:45 +01:00
base.py CUST-WP-0061-T01: intake work-record entity (stage 3) 2026-07-21 00:27:45 +02:00
capability_catalog.py feat(capability-registry): CUST-WP-0031 domain capability registry 2026-03-31 17:23:45 +02:00
capability_request.py feat(identifiers): add reversible projection migration 2026-08-22 00:27:48 +02:00
contribution.py feat(identifiers): add reversible projection migration 2026-08-22 00:27:48 +02:00
decision.py feat(identifiers): add reversible projection migration 2026-08-22 00:27:48 +02:00
doi_cache.py perf(doi): fingerprint-based DB cache for DoI results 2026-03-20 01:47:19 +01:00
domain.py feat(goals): add domain/repo goal tracking and update_workstream MCP tool 2026-03-09 00:15:29 +01:00
domain_goal.py feat(goals): add domain/repo goal tracking and update_workstream MCP tool 2026-03-09 00:15:29 +01:00
extension_point.py feat(identifiers): add reversible projection migration 2026-08-22 00:27:48 +02:00
fabric_graph.py Implement financial Fabric vNext read model 2026-05-24 02:52:59 +02:00
intake.py feat(identifiers): add reversible projection migration 2026-08-22 00:27:48 +02:00
interface_change.py feat(state-hub): Interface Change Registry (CUST-WP-0033 T01-T06) 2026-04-26 15:29:08 +02:00
legacy_meter.py feat: add workplan aliases and legacy meter 2026-06-04 08:25:31 +02:00
managed_repo.py feat(classification-spine): implement STATE-WP-0065 repo-anchored model 2026-06-22 13:52:13 +02:00
progress_event.py feat(identifiers): add reversible projection migration 2026-08-22 00:27:48 +02:00
repo_goal.py feat(classification-spine): implement STATE-WP-0065 repo-anchored model 2026-06-22 13:52:13 +02:00
review_contract.py feat(review): add multi-owner contracts and receipts 2026-08-22 20:57:51 +02:00
sbom_entry.py feat(sbom): CUST-WP-0013 — expand SBOM infra to terraform, ansible, and tool manifests 2026-03-12 04:40:26 +01:00
sbom_snapshot.py feat(gems): three-pass schema migration aligning state-hub with GEMS 2026-03-02 23:39:17 +01:00
service_catalog.py STATE-WP-0062 T1: two-dimension service_catalog model + migration 2026-06-19 20:46:07 +02:00
suggestion.py feat(identifiers): add reversible projection migration 2026-08-22 00:27:48 +02:00
task.py feat(tasks): give task rows a canonical record identifier 2026-08-26 02:05:51 +02:00
technical_debt.py feat(identifiers): add reversible projection migration 2026-08-22 00:27:48 +02:00
token_event.py feat(identifiers): add reversible projection migration 2026-08-22 00:27:48 +02:00
topic.py feat(classification-spine): implement STATE-WP-0065 repo-anchored model 2026-06-22 13:52:13 +02:00
tpsc.py feat(tpsc): Third-Party Services Catalog (CUST-WP-0023) 2026-03-20 00:15:26 +01:00
work_record_identifier_alias.py feat(identifiers): add reversible projection migration 2026-08-22 00:27:48 +02:00
workplan.py feat(projection): add workplan retirement columns, and record the migration gap 2026-08-25 23:49:13 +02:00
workplan_dependency.py feat(identifiers): add reversible projection migration 2026-08-22 00:27:48 +02:00
workplan_launch_request.py feat(identifiers): add reversible projection migration 2026-08-22 00:27:48 +02:00
workstream.py feat(classification-spine): implement STATE-WP-0065 repo-anchored model 2026-06-22 13:52:13 +02:00
workstream_dependency.py feat(classification-spine): implement STATE-WP-0065 repo-anchored model 2026-06-22 13:52:13 +02:00
write_idempotency_key.py feat(statehub): add offline write buffer relay 2026-06-25 13:44:27 +02:00