diff --git a/.ddx/beads.jsonl b/.ddx/beads.jsonl index 272ffac8..3239f88a 100644 --- a/.ddx/beads.jsonl +++ b/.ddx/beads.jsonl @@ -57,7 +57,9 @@ {"acceptance":"Parquet conformance tier green; negative NULL-out test passes; gx_baseline emits string checks only for all-STRING raw; existing delimited corpus byte-identical.","closing_commit_sha":"4f9297dd1ecde6f5123142a6c903806537ef2da7","created_at":"2026-06-11T02:34:36.776558723Z","dependencies":[{"issue_id":"tablespec-61da147e","depends_on_id":"tablespec-4bea5c6c","type":"blocks","created_at":"2026-06-11T02:34:36Z"}],"description":"FEAT-031 PARQ-01..03 + SUITE-01..03: parquet sources land native-typed raw; identity/safe-narrowing mode in build_ingest_select/cast_column_sql (typed DATE never string-parsed — negative test for zero silent NULL-out); raw suites branch on raw typing (schema-type expectations for typed raw); backbone + DuckDB engine format dispatch; parquet conformance tier; LDP read_files format wired from UMF; dbt staging typed-raw mode.","events_attachment":"tablespec-61da147e/events.jsonl","id":"tablespec-61da147e","issue_type":"task","labels":["helix","area:ingestion","feat-031","phase:5"],"parent":"tablespec-ef91646f","priority":2,"schema_version":1,"status":"closed","title":"Parquet typed-raw vertical","updated_at":"2026-06-12T18:26:39.617696927Z"} {"acceptance":"Either docs/helix/parking-lot.md exists with the deferred-item inventory and ddx frontmatter, or the PRD reference is removed/replaced with the canonical DDx bead query; any markdown link/reference check remains clean.","closing_commit_sha":"59451e5071e7e2016e30d3205b4f5b8ed683fcdb","created_at":"2026-06-07T20:59:40.900515531Z","description":"docs/helix/01-frame/prd.md says deferred items are tracked in docs/helix/parking-lot.md, but that file does not exist. The broken-reference scanner does not catch this because the path is in inline code, not a markdown link.","id":"tablespec-62dbc8c6","issue_type":"task","labels":["spec","helix","prd"],"owner":"erik","priority":2,"schema_version":1,"status":"closed","title":"Resolve missing PRD parking-lot artifact","updated_at":"2026-06-09T20:55:03.849150318Z"} {"acceptance":"A concrete workflows/graph.yml schema/template or documented no-graph decision exists; if graph.yml is added, tests validate its node and edge contract rather than only file existence.","created_at":"2026-06-10T20:19:16.452970597Z","description":"The repo now has .helix.yml authorizing the helix flow at docs/helix/, and the HELIX skill references workflows/graph.yml for artifact routing, but the installed skill bundle exposes no concrete graph schema or template. Do not add a graph file until the expected node/edge contract is defined and testable; then add a validated workflows/graph.yml or document why tablespec intentionally relies on ddx frontmatter only.","id":"tablespec-633defe5","issue_type":"task","labels":["helix","spec","follow-up"],"owner":"erik","priority":2,"schema_version":1,"status":"closed","title":"Define HELIX graph contract for tablespec","updated_at":"2026-06-11T02:40:17.304102557Z"} +{"created_at":"2026-07-23T02:02:19.226610289Z","description":"Add @covers US-038-AC1..5 on website/e2e/microsite.spec.ts and pages artifact tests.","events_attachment":"tablespec-66a7c990/events.jsonl","id":"tablespec-66a7c990","issue_type":"task","labels":["helix","traceability","FEAT-030"],"owner":"erik","parent":"tablespec-c116e6e9","priority":2,"schema_version":1,"session_id":"align-2026-07-23","status":"closed","title":"Add @covers for US-038 microsite ACs","updated_at":"2026-07-23T02:02:20.246764744Z"} {"acceptance":"Harness command exits 0; concerns no longer records none for Databricks App; test-plan references harness.","created_at":"2026-07-22T21:41:07.418052243Z","dependencies":[{"issue_id":"tablespec-6bd3e4f7","depends_on_id":"tablespec-2a68a0ad","type":"blocks","created_at":"2026-07-22T21:41:07Z"},{"issue_id":"tablespec-6bd3e4f7","depends_on_id":"tablespec-48f4fce6","type":"blocks","created_at":"2026-07-22T21:41:07Z"},{"issue_id":"tablespec-6bd3e4f7","depends_on_id":"tablespec-0e6cd069","type":"blocks","created_at":"2026-07-22T21:41:07Z"}],"description":"Implement at least one automated whole-stack path for config resolve plus provision plus start. Update concerns e2e-framework when filled.","events_attachment":"tablespec-6bd3e4f7/events.jsonl","id":"tablespec-6bd3e4f7","issue_type":"task","labels":["helix","phase:test","area:app","FEAT-034"],"owner":"erik","parent":"tablespec-263a0248","priority":1,"schema_version":1,"session_id":"alignment-queue-drain-2026-07-22","status":"closed","title":"App: whole-stack e2e gate for FR-23 (e2e-framework slot)","updated_at":"2026-07-22T22:07:15.750144144Z"} +{"created_at":"2026-07-23T02:02:19.109019432Z","description":"Add @covers US-037-AC1..5 on tests/unit/test_safe_timestamp.py (and Connect co-existence tests as needed).","events_attachment":"tablespec-6d8b33d2/events.jsonl","id":"tablespec-6d8b33d2","issue_type":"task","labels":["helix","traceability"],"owner":"erik","parent":"tablespec-c116e6e9","priority":2,"schema_version":1,"session_id":"align-2026-07-23","status":"closed","title":"Add @covers for US-037 engine-correct runtime ACs","updated_at":"2026-07-23T02:02:19.496449128Z"} {"acceptance":"Adapter in src/tablespec/validation with unit tests; test_northwind_e2e.py uses it instead of its local _build_report.","created_at":"2026-06-11T13:55:45.728505095Z","description":"US-039 AC6 follow-up (2026-06-11): the e2e test bridges staged ExpectationResults into QualityCheckResults locally to produce a ValidationReport. Promote that bridge into validation/ as a small shipped adapter so consumers get reports from staged execution without a full compile.","id":"tablespec-72c03317","issue_type":"task","labels":["area:validation","feat-031","kind:feature"],"owner":"erik","priority":3,"schema_version":1,"status":"closed","title":"Ship StagedExecutionResult -\u003e ValidationReport adapter","updated_at":"2026-06-12T16:45:37.438595181Z"} {"acceptance":"Each item either promoted to its own refined bead/FEAT requirement or explicitly declined with a recorded reason.","created_at":"2026-06-12T16:50:00.133977772Z","description":"Captured during the 2026-06-12 bronze-input-universe scoping: Excel-as-data-source (vs authoring), a first-class REST API source kind (acquisition stays plumbing for now), Kafka/CDC streaming contracts, and Avro/ORC as riders on the parquet typed-raw bead (tablespec-61da147e — consider folding there). Revisit after the current demo arc ships.","id":"tablespec-79868e6b","issue_type":"task","labels":["parking-lot","area:ingestion"],"owner":"erik","priority":4,"resolution":"DECIDED 2026-06-12: Avro/ORC are declined as a separate bead and folded into the typed-raw file-format rider discussion for tablespec-61da147e because they share the same native-typed raw/cast/suite plumbing as Parquet. Excel-as-data-source is declined for now because FEAT-009 owns Excel as an authoring/review surface, not a bronze acquisition kind. REST API source kind is declined for now because pagination/auth/retry/rate-limit/response-shape semantics need a separate acquisition ADR/epic, not a FEAT-031 refinement. Kafka/CDC streaming contracts are declined for now because FEAT-031 explicitly excludes real-time CDC ingestion and streaming requires a separate architecture decision.","schema_version":1,"status":"closed","title":"Parking lot: remaining bronze input types (Excel-as-data, REST API kind, Kafka/CDC, Avro/ORC rider)","updated_at":"2026-06-12T17:50:52.481099991Z"} {"acceptance":"1. UMFLoader.load() no longer auto-loads arbitrary single-file YAML UMF documents through the normal path; split directories and JSON continue to load.\n2. If inline YAML compatibility remains, it is reachable only through an explicit migration API/CLI path whose name includes migration or legacy.\n3. CLI help/examples no longer present table.umf.yaml as the canonical authoring input for validate/generate/emit/export/explore.\n4. A test command such as uv run pytest tests/unit/test_umf_loader.py tests/unit/test_cli.py -k \"format or inline or convert\" passes and includes a regression that single-file YAML is rejected or migration-only.\n5. Specs/docs consistently state: split YAML directory for editing, JSON for artifact/interchange, inline YAML is not a supported canonical format.","closing_commit_sha":"8477c81738230fc73dfcbe2c82f07346fbc74535","created_at":"2026-06-08T00:18:06.152420213Z","description":"Remove inline whole-UMF YAML from the normal public authoring/loading path. Product/spec language treats split YAML directories as the editable format and JSON as the artifact/interchange format, but src/tablespec/umf_loader.py still exposes UMFFormat.INLINE and detect_format() auto-detects any .yaml/.yml/.umf file as a whole-UMF document. CLI examples and fixtures using *.umf.yaml make agents default to an inline YAML format that should not be canonical. Preserve any needed compatibility as an explicit migration path only, not autodetected normal loading.\n\nCurrent evidence:\n- src/tablespec/umf_loader.py defines UMFFormat.INLINE and _load_inline_yaml().\n- detect_format() returns INLINE for .yaml/.yml/.umf files.\n- CLI examples mention table.umf.yaml for validate/generate/emit/export/explore.\n- specs name split and JSON as the supported formats for normal workflows.\n\nIn-scope files:\n- src/tablespec/umf_loader.py\n- src/tablespec/cli.py user-facing examples/errors and any explicit migration command if kept\n- docs/helix format requirements and user stories that still imply inline YAML\n- tests for loader/CLI format detection\n\nOut-of-scope for this bead:\n- Rewriting every conformance fixture unless required by tests\n- Changing compiled artifact snapshot format without a separate decision\n- Bootstrap facade work","events_attachment":"tablespec-7bce0707/events.jsonl","id":"tablespec-7bce0707","issue_type":"task","labels":["area:umf-loader","area:formats","kind:api"],"priority":0,"schema_version":1,"session_id":"eb-8f77922a","spec-id":"FEAT-010","status":"closed","title":"Quarantine inline YAML UMF as migration-only","updated_at":"2026-06-08T01:27:55.860961576Z"} @@ -87,6 +89,7 @@ {"acceptance":"1. TestHelixDocsUseCanonicalDatabricksDialectGuidance: add a docs traceability regression that scans `docs/helix/03-test/conformance-acceptance.md` and related Databricks helix references for canonical `dialect=\"databricks\"` guidance.\\n2. TestHelixDocsAvoidSparkOnlyMessaging: assert helix docs do not tell Databricks users to use only `dialect=\"spark\"` without the alias explanation.\\n3. go test ./...\\n4. lefthook run pre-commit.","closing_commit_sha":"ad838e8b7c6d9711b54291895b08bca60507b822","created_at":"2026-06-08T14:55:59.650831628Z","description":"PROBLEM: The helix conformance docs already describe Databricks dialect behavior, but that decision is not reflected consistently in the user-facing examples and traceability checks. ROOT CAUSE: `docs/helix/03-test/conformance-acceptance.md:85` and `docs/helix/03-test/conformance-acceptance.md:109` discuss Databricks dialect behavior without tying it back to the canonical public alias guidance used elsewhere. PROPOSED FIX: Update the helix conformance docs and their traceability expectations so they consistently say `dialect=\"databricks\"` is accepted for Databricks compile UX, while clarifying that generated casts may normalize to Spark-family SQL when the emitted SQL is identical. NON-SCOPE: One-shot bootstrap facade implementation. Production pipeline JSON/wheel packaging contract. Inline UMF format cleanup. No broad documentation rewrite outside Databricks dialect guidance. GOVERNING ARTIFACTS: `docs/guide/bootstrap.md:10`; `README.md:139`; `docs/helix/03-test/conformance-acceptance.md:109`; `scripts/run_integration_tests_databricks.ipynb`. DEPENDENCIES: `tablespec-ed74497c`.","events_attachment":"tablespec-b50b6f67/events.jsonl","id":"tablespec-b50b6f67","issue_type":"task","labels":["area:databricks","area:dialects","area:docs","kind:bug","ac-quality:needs-refinement"],"parent":"tablespec-0fb0d1c2","priority":0,"schema_version":1,"session_id":"eb-4ea7415a","status":"closed","title":"Align helix conformance docs with Databricks dialect guidance","updated_at":"2026-06-08T20:18:39.087381651Z"} {"acceptance":"1. Specs/docs explicitly state that production runs installed pipeline JSON artifacts and installed wheels, not source-time Python orchestration.\n2. The development pipeline has a documented command that builds wheel artifacts for installation and produces or verifies the pipeline JSON files expected by production.\n3. A test or build command such as uv build plus a JSON artifact validation test passes and is named in the implementation notes.\n4. Bootstrap/compile docs describe their output as inputs to the installable production pipeline contract rather than the production runtime itself.\n5. Any Databricks try-it-out instructions distinguish development bootstrap from production install/run.","closing_commit_sha":"45ab8f38ee1f76936285006c873590f3835ab5ad","created_at":"2026-06-08T00:18:50.429673685Z","description":"Align development and production pipeline semantics around installable pipeline artifacts. The production pipeline is intended to run from installed pipelines stored as JSON files, not from ad hoc source-time reconstruction or notebook-local Python composition. The development pipeline should therefore build wheel artifacts for installation and produce or validate the JSON pipeline definitions that production installs/runs. This is related to the bootstrap/compile facade work but distinct: bootstrap may author or compile artifacts, while production should consume installed JSON pipeline artifacts plus installed tablespec/package wheels.\n\nCurrent context:\n- Existing compile/runtime docs emphasize committed artifacts and runtime not re-deriving from UMF.\n- The desired production contract is stronger: installed pipelines live as JSON files, and the dev path builds wheels for installation.\n- Avoid a Databricks UX where users copy inline Python orchestration into production. The user-facing flow should make build/install/run boundaries explicit.\n\nIn-scope files:\n- docs/helix PRD/design/build docs that define production vs development pipeline boundaries\n- scripts or build tooling that package wheels and/or pipeline JSON artifacts\n- tests that verify the build artifacts expected by production exist and are installable/parseable\n- bootstrap/compile docs only where needed to describe handoff to production artifacts\n\nOut-of-scope for this bead:\n- Implementing the one-shot Databricks bootstrap facade itself\n- Removing inline YAML UMF support\n- Replacing the runtime backbone wholesale","events_attachment":"tablespec-b9dec718/events.jsonl","id":"tablespec-b9dec718","issue_type":"task","labels":["area:pipeline","area:packaging","area:runtime","kind:architecture","ac-quality:needs-refinement"],"priority":0,"schema_version":1,"session_id":"eb-d0adbfa2","spec-id":"FEAT-026","status":"closed","title":"Align dev pipeline with installed JSON pipeline artifacts and wheels","updated_at":"2026-06-08T00:57:52.145087747Z"} {"acceptance":"1. TestGenerateLdpProjectAcceptsDatabricksAlias: add an LDP unit/conformance test proving generate_ldp_project(..., dialect=\"databricks\") succeeds and emits the same Spark-family cast body as dialect=\"spark\".\n2. TestGenerateLdpProjectSparkParityRemainsStable: add a regression test proving the spark and databricks outputs stay identical for cast SQL and do not diverge in unrelated sections of the LDP payload.\n3. TestPytestGate: `uv run pytest tests/ldp/test_ldp_emitter.py tests/ldp/test_ldp_cast_parity.py`\n4. TestGoGate: `go test ./...`\n5. TestLefthookGate: `lefthook run pre-commit`","closing_commit_sha":"e9c86f879c219441c08e66a67d74180e98441cec","created_at":"2026-06-08T14:50:25.028673433Z","description":"PROBLEM: Direct LDP generation still treats Spark as the only public dialect, so a databricks compile path can fail when it reaches the LDP emitter even if the surrounding compile flow accepts the value.\nROOT CAUSE: src/tablespec/ldp/project.py:242 documents LDP dialect as Spark with duckdb accepted for parity, but omits databricks even though the compile contract now needs it.\nPROPOSED FIX: Teach generate_ldp_project to accept dialect=\"databricks\" as a Spark-family alias, keep emitted cast SQL byte-for-byte equivalent to dialect=\"spark\", and add a regression test that locks the parity contract.\nNON-SCOPE: One-shot bootstrap facade implementation. Production pipeline JSON/wheel packaging contract. Inline UMF format cleanup. No real Databricks workspace execution beyond existing opt-in tiers. GOVERNING ARTIFACTS: docs/helix/01-frame/features/FEAT-026-compile-orchestrator-bootstrap.md:84; docs/helix/03-test/conformance-acceptance.md:49; docs/helix/03-test/conformance-acceptance.md:85; docs/helix/03-test/conformance-acceptance.md:109. DEPENDENCIES: parent bead tablespec-ed74497c; no additional dependencies.","events_attachment":"tablespec-bc47a14e/events.jsonl","id":"tablespec-bc47a14e","issue_type":"task","labels":["area:databricks","area:dialects","area:ldp","kind:bug","ac-quality:needs-refinement"],"parent":"tablespec-171e409c","priority":0,"schema_version":1,"session_id":"eb-72c5570d","status":"closed","title":"Allow databricks as an LDP emitter alias","updated_at":"2026-06-08T18:18:59.648696026Z"} +{"created_at":"2026-07-23T02:02:18.987189079Z","description":"From AR-2026-07-23-post-drain-alignment: citation hygiene only; no workspace/operator beads.","events_attachment":"tablespec-c116e6e9/events.jsonl","id":"tablespec-c116e6e9","issue_type":"epic","labels":["helix","kind:review","phase:align"],"priority":2,"schema_version":1,"session_id":"align-2026-07-23","status":"closed","title":"HELIX alignment 2026-07-23 — agent-executable follow-ups","updated_at":"2026-07-23T02:02:20.97244071Z"} {"acceptance":"A recorded convention (principles.md or concerns.md note) names the canonical status set; US-022 and US-025 status lines match it.","created_at":"2026-06-11T00:23:44.199375946Z","description":"Spec audit 2026-06-10: all 29 FEATs and 35/37 stories use Status: Implemented; 2 stories use 'Done (...)'. Template enums are draft|in_review|approved|superseded (feature-specification meta.yml) and Draft|Review|Approved (user-stories template). Decide the canonical post-build status value (e.g. add 'implemented' to the project's accepted enum, or map to 'approved') and normalize US-022/US-025 free-text statuses.","id":"tablespec-c1e598f1","issue_type":"task","labels":["helix","spec","decision"],"priority":2,"resolution":"DECIDED 2026-06-10 (operator): map to template enums. FEAT/US statuses normalized Implemented→Approved (66 files); registry rows record delivery stage Built; test_governing_docs_alignment.py updated to assert Approved.","schema_version":1,"status":"closed","title":"DECISION: post-build status vocabulary for FEAT/US frontmatter","updated_at":"2026-06-11T00:56:02.34713056Z"} {"acceptance":"Every story has the 7 required sections, stable US-\u003cn\u003e-AC\u003cm\u003e Given/When/Then ACs, and concrete test scenarios naming specific values.","created_at":"2026-06-11T00:23:44.344398971Z","description":"Spec audit 2026-06-10: US-001..020 miss 5 of 7 required sections (Context, Walkthrough, Edge Cases, Test Scenarios, Dependencies); US-001..010 have no stable US-\u003cn\u003e-ACm IDs; US-011..020 ACs are not Given/When/Then. US-027..036 have only 2 thin ACs each covering 3-6 FR sub-requirements with placeholder test scenarios. Exemplars: US-021..026, US-037.","id":"tablespec-c3471969","issue_type":"task","labels":["helix","spec","backfill"],"owner":"erik","priority":2,"schema_version":1,"status":"closed","title":"Backfill US-001..020 template sections and AC IDs; thicken US-027..036 ACs","updated_at":"2026-06-12T17:43:25.835982577Z"} {"acceptance":"pytest green incl. new unit tests per consumer; a spec with EMBEDDING(1024) round-trips, compiles to ARRAY\u003cFLOAT\u003e DDL + ArrayType pyspark + JSON schema; GX suite contains the dimensionality expectation; dimension mismatch fails validation; existing corpus byte-identical.","created_at":"2026-06-12T16:49:59.863931435Z","description":"ADR-016 (Accepted): dimensioned EMBEDDING logical type -\u003e ARRAY\u003cFLOAT\u003e (Spark SQL/Delta), ArrayType(FloatType()) (PySpark), array-of-number (JSON Schema). Touch: models/umf.py:509-511 type pattern + dimension field, type_mappings.py, schemas/generators.py, gx_baseline.py (dimensionality expectation; %16 Vector-Search advisory non-blocking; exclude from string-shape checks), sample_data (seeded unit vectors), compatibility.py/type_lattice.py (EMBEDDING compatible only with same-dimension EMBEDDING), profiling passthrough, umf.schema.json. Per FEAT-032 EMB-01..09.","id":"tablespec-c5f57c11","issue_type":"task","labels":["feat-032","area:models","area:types","kind:feature"],"owner":"erik","priority":1,"schema_version":1,"status":"closed","title":"Implement EMBEDDING(dim) type across the type system (FEAT-032 EMB-)","updated_at":"2026-06-12T17:46:28.040478934Z"} diff --git a/docs/helix/06-iterate/alignment-reviews/AR-2026-07-23-post-drain-alignment.md b/docs/helix/06-iterate/alignment-reviews/AR-2026-07-23-post-drain-alignment.md new file mode 100644 index 00000000..febab0a6 --- /dev/null +++ b/docs/helix/06-iterate/alignment-reviews/AR-2026-07-23-post-drain-alignment.md @@ -0,0 +1,153 @@ +--- +ddx: + id: AR-2026-07-23-post-drain + links: + - AR-2026-07-22-desired-state-realignment +--- + +# Alignment Review: Post-Drain Spec ↔ Code (Agent-Executable Focus) + +**Review Date**: 2026-07-23 +**Scope**: full repo HELIX stack vs `main` after PRs #12/#13; PR #14 in-flight +**Status**: complete +**Primary Governing Artifact**: `docs/helix/00-discover/product-vision.md` + +## Principle + +- Specs describe **desired future state**; incomplete code is residual, not a + reason to shrink FR/FEAT language. +- Specs **behind** shipped code are `STALE_PLAN` and get plan-to-code updates. +- Follow-up work filed only when **agent-executable** in this repo without a + live Databricks workspace or human-only ops. + +## Scope and Governing Artifacts + +### Scope + +- Structural floor: FR→FEAT coverage, AC `@covers` citations, ADR inventory +- Delivery honesty: FEAT-031/032/034, US-038–050, app/demo residuals +- Tracker state after alignment drain (#12/#13) and open PR #14 +- Distinction: workspace-only residual vs agent-fixable gaps + +### Governing Artifacts + +- `docs/helix/00-discover/product-vision.md` +- `docs/helix/01-frame/prd.md`, `principles.md`, `concerns.md`, `feature-registry.md` +- `docs/helix/01-frame/features/FEAT-001`…`FEAT-034` +- `docs/helix/01-frame/user-stories/US-001`…`US-050` +- `docs/helix/02-design/architecture.md`, ADR-001…019 +- `docs/helix/03-test/test-plan.md`, `conformance-acceptance.md` +- `docs/helix/04-build/implementation-plan.md` +- `docs/helix/05-deploy/deployment-checklist.md` +- `src/tablespec/`, `apps/data-profiling/`, `website/`, `notebooks/` +- Prior AR: `AR-2026-07-22-desired-state-realignment.md` + +## Intent Summary + +- **Vision**: UMF compiler + Connect-safe multi-engine runtime; optional + Databricks App and guidebook as first-party companions. +- **Post-drain reality**: Beads queue is **empty** (0 open / 0 ready after #13). + Remaining product residual is mostly **operational** (workspace deploy/demo + job) or **citation hygiene** on already-shipped surfaces. +- **PR #14** (green CI, unmerged at review time) carries plan-to-code honesty + for FEAT-034 Built, US-044 Built, and `@covers` for US-040/042–050 and + US-047–049. + +## Structural Floor (`helix_align_check`) + +Run against **current `main`** (pre-#14 merge): + +| Dimension | Floor | Notes | +|-----------|-------|-------| +| FR → FEAT | **clean** | 23/23 FRs covered by a FEAT | +| Decomposition | **clean** | 23 subsystems / 34 FEATs / 49 stories | +| ADRs | **clean** | 19 ADRs; 18 accepted, 1 proposed | +| AC `@covers` | **advisory** | **152/206** ACs cited; **54** `NO_CITATION`; 0 dangling | + +### Uncited ACs on `main` (54) + +| Band | ACs | Agent-executable fix? | +|------|-----|------------------------| +| US-037 | AC1–AC5 | **Yes** — add `@covers` on Connect/capability tests | +| US-038 | AC1–AC5 | **Yes** — add `@covers` on Playwright + pages tests | +| US-040, 042–044, 047–050 | bulk | **Yes — already on PR #14** | +| US-045 | AC1–AC6 | **Yes for citations** (notebook `@covers` on #14); live job remains operational residual | + +After #14 merges, expected uncited residual: **US-037 + US-038 only** (plus any +new ACs). + +## Gap Register + +| Area | Classification | Planning Evidence | Implementation Evidence | Resolution Direction | +|------|----------------|-------------------|-------------------------|----------------------| +| PR #14 unmerged | INCOMPLETE | FEAT-034 Built, US-044 Built, covers on branch | CI green on #14 | **plan-to-code land**: merge #14 | +| FEAT-034 registry **Specified** on `main` | STALE_PLAN | feature-registry.md FEAT-034 row | config/provision/diagnostics/stack shipped | Fixed on #14 → Built | +| US-044 status **Draft** on `main` | STALE_PLAN | US-044 status line | `notebooks/kaggle-demo/` complete pair | Fixed on #14 → Built | +| US-040/042/043/047–050 uncited on `main` | UNCITED_COVERAGE | stories + tests exist | tests lack `@covers` on main | Fixed on #14 | +| US-037 uncited | UNCITED_COVERAGE | US-037 ACs | `test_safe_timestamp`, Connect sail tests | Add `@covers` (agent) | +| US-038 uncited | UNCITED_COVERAGE | US-038 ACs; closed as shipped earlier | `website/e2e/microsite.spec.ts`, pages tests | Add `@covers` (agent) | +| Live app deploy-and-drive | INCOMPLETE (ops) | FR-23 / FEAT-034 phase residual | Unit path only | **No bead** — requires workspace/operator | +| US-045 workspace job | INCOMPLETE (ops) | US-045 limitations | notebooks + type core shipped | **No bead** — operational residual | +| concerns conflict text on `main` | STALE_PLAN | concerns.md “no whole-stack exercise” | `test_fr23_stack.py` exists; #14 rewrites conflict | Land #14 | +| `make lint` excludes `apps/` | QUALITY | CLAUDE.md / AGENTS.md | `ruff check apps/` not clean | Optional agent chore (not product gap) | +| AR-2026-07-22 residual language | STALE_PLAN | prior AR lists DUMP/JSON open | DUMP/JSON/story floor closed #12–#13 | This AR supersedes residual table | + +### Quality Findings + +| Area | Dimension | Concern | Severity | Resolution | +|------|-----------|---------|----------|------------| +| App e2e slot | verification | Live deploy still not CI | low | Accept as operational residual; unit composition is the agent gate | +| Citation vs exercise | verification | Bulk `@covers` may over-claim exercise | medium | Prefer story-local primary tests; sample-audit in future align | +| Demo notebooks | verification | Workspace PASS not in CI | low | Documented residual; no agent bead | + +## Traceability Matrix (high level) + +| Requirement family | Feature | Stories | Code status | Classification | +|--------------------|---------|---------|-------------|----------------| +| FR-1.x UMF core | FEAT-001–023 | US-001–036 | Built | ALIGNED | +| FR-18/19 compile/emit | FEAT-026–028 | US-023–026 | Built | ALIGNED | +| FR-21 multi-source | FEAT-031 | US-039–044, 050 | Cores shipped; US-044 notebooks Built (#14); US-045 residual | ALIGNED after #14 / residual ops | +| FR-1.11 EMBEDDING | FEAT-032 | US-045 | Type+CORP shipped; demo residual ops | ALIGNED (ops residual) | +| FR-22 guidebook | FEAT-033 | US-046 | Built + `@covers` | ALIGNED | +| FR-23 app deploy | FEAT-034 | US-047–049 | Code shipped; honesty on #14 | ALIGNED after #14 | +| FR-30 microsite | FEAT-030 | US-038 | Built; `@covers` missing on main | UNCITED_COVERAGE | + +## Execution Issues (agent-executable only) + +| ID | Goal | Verification | +|----|------|--------------| +| *(file after this AR)* | Merge or land PR #14 (operator or agent with merge rights) | CI already green | +| *(file after this AR)* | `@covers` US-037-AC1..5 on capability/session tests | `helix_align_check` drops US-037 NO_CITATION | +| *(file after this AR)* | `@covers` US-038-AC1..5 on Playwright/pages tests | same for US-038 | + +**Explicitly not filed** (human/workspace-only): + +- Live Databricks Apps deploy-and-drive recording +- Foundation Model API embedding widget on US-045 job +- Any “run notebook on my cluster” evidence capture + +## Execution Order + +1. Land **PR #14** (closes most STALE_PLAN + bulk UNCITED_COVERAGE). +2. Add **US-037 / US-038 `@covers`** (remaining citation floor on main). +3. Optionally: next product feature frame (no open build residual in tracker). + +**Critical path**: #14 land → US-037/038 covers. +**Blockers**: none for agent citation work; workspace residual is non-blocking for queue drain. + +## Open Decisions + +| Decision | Why Open | Recommendation | +|----------|----------|----------------| +| Treat live app deploy as forever-ops residual? | No CI secrets/workspace in default gates | **Yes** — keep documented residual, no open bead | +| Expand `make lint` to `apps/`? | Quality hygiene, not FR gap | Optional chore bead if desired | + +## Tracker Snapshot at Review + +``` +Total: 117 (or +4 if #14 beads not yet on main) +Open: 0 | Ready: 0 | Blocked: 0 | Proposed: 0 +``` + +Beads queue remains empty of product build work; alignment follow-ups are +citation/hygiene only. diff --git a/tests/docs/test_pages_artifact.py b/tests/docs/test_pages_artifact.py index 67349237..70b7ea8b 100644 --- a/tests/docs/test_pages_artifact.py +++ b/tests/docs/test_pages_artifact.py @@ -1,3 +1,5 @@ +# @covers US-038-AC2 +# @covers US-038-AC4 from __future__ import annotations import json diff --git a/tests/unit/test_profiler_connect_sail.py b/tests/unit/test_profiler_connect_sail.py index b7f7f123..624d92b3 100644 --- a/tests/unit/test_profiler_connect_sail.py +++ b/tests/unit/test_profiler_connect_sail.py @@ -15,6 +15,8 @@ not implement ``approx_distinct`` for Float64). """ +# @covers US-037-AC2 + from __future__ import annotations import warnings diff --git a/tests/unit/test_safe_timestamp.py b/tests/unit/test_safe_timestamp.py index 4078312d..46281383 100644 --- a/tests/unit/test_safe_timestamp.py +++ b/tests/unit/test_safe_timestamp.py @@ -1,5 +1,11 @@ """Tests for safe_to_timestamp / safe_to_date and the _format_to_prefilter_regex helper.""" +# @covers US-037-AC1 +# @covers US-037-AC2 +# @covers US-037-AC3 +# @covers US-037-AC4 +# @covers US-037-AC5 + from __future__ import annotations import re diff --git a/website/e2e/microsite.spec.ts b/website/e2e/microsite.spec.ts index 04832caa..ce6de3e1 100644 --- a/website/e2e/microsite.spec.ts +++ b/website/e2e/microsite.spec.ts @@ -1,3 +1,8 @@ +// @covers US-038-AC1 +// @covers US-038-AC2 +// @covers US-038-AC3 +// @covers US-038-AC4 +// @covers US-038-AC5 import { test, expect } from '@playwright/test' const article = (page: any) => page.locator('article')