## rocky-data/rocky — vscode-v1.40.0…vscode-v1.41.0

_189+ commits._

### Features
- **feat(engine): no resolved secret leaves rocky serve — the registry and the outermost filter (1/3) (#1920)** (db763c4)
- **feat(engine/rocky-cli): list the webhook demands a tick has not consumed (#1899)** (43c61c1)
- **feat(engine/rocky-cli): rocky policy show, and GET /api/v1/policy (#1874)** (fc387fe)
- **feat(engine/rocky-cli): rocky history --run <id>, and the second batch of producer seams (#1861)** (b95661f)
- **feat(engine): rocky doctor reports quarantined webhook demands (#1794)** (bdac190)
- **feat(engine/ui): the product journal as a table, because a real one is 82 rows (#1745)** (5a5262c)
- **feat(engine/ui): the product timeline (#1740)** (07b5cdf)
- **feat(engine/ui): the review screen (#1737)** (38e5db3)
- **feat(engine/rocky-cli): the review diff and the samples routes on rocky serve (#1733)** (89f9c81)
- **feat(engine/ui): the custody drill-down and the audit browse (#1692)** (9beebaf)
- **feat(engine/ui): the governor screens, the brief and the trust scorecard (#1691)** (e9a7e3b)
- **feat(engine): GET /api/v1/project, and the server-rendered dashboard retired (#1690)** (fdb7552)

### Fixes
- **fix(engine): every user expression spliced into generated SQL is parsed and allowlisted, and a refusal trips the gate (#1922)** (5773aca)
- **fix(engine/rocky-cli): branch promote refuses a target name it cannot quote (#1940)** (38336d6)
- **fix(engine/rocky-core): validate the two config strings that reach the metadata splice (#1934)** (b231138)
- **fix(engine/rocky-databricks): an unreadable freshness timestamp is not an empty table (#1931)** (9217e1c)
- **fix(engine/rocky-databricks): an unreadable batched row count is not a measured zero (#1927)** (3815646)
- **fix(engine): a check that could not run still gates, and cell_as_u64 stops fabricating counts (#1923)** (3c17ba4)
- **fix(engine/ui): the page on a phone, the graph beside an open pane, and a minimap that drew nothing (#1885)** (f1cc07a)
- **fix(vscode): re-export the four generated output types missing from the barrel (#1916)** (4bb5003)
- **fix(engine/rocky-core): the spool refuses a timestamp its own reader cannot parse back (#1912)** (9fabd81)
- **fix(engine): the deferred count and the pinned digest come from one read (#1906)** (2df3672)
- **fix(engine/rocky-core): a non-UTF-8 model filename is neither dropped by the walk nor mangled by the loader (#1902)** (7682d13)
- **fix(engine/rocky-sql): a read inside a subquery or a WITH body derives its DAG edge (#1898)** (3a0928b)
- **fix(engine/rocky-cli): the inline drain returns an abort decision, so fail_fast and the error-rate abort act on it too (#1895)** (921ce49)
- **fix(engine/rocky-core): a config parse error no longer echoes a resolved secret (#1888)** (79234c7)
- **fix(dagster): a compliance scan that crashed reports not-evaluated, not passed (#1896)** (b60cc0c)
- **fix(engine/rocky-sql): a CTE name is not a table read, so it derives no dependency edge (#1893)** (4952510)
- **fix(engine/rocky-core): an unreadable schedule cursor skips the tick instead of running a paused pipeline (#1891)** (8b5c452)
- **fix(engine/rocky-cli): a maintenance plan names a table, not whatever string was typed (#1889)** (3f26ee9)
- **fix(playground): the POC suite exercises the binary it is pointed at, and leaves the checkout clean (#1887)** (1bc7f68)
- **fix(engine/rocky-cli): a run record that did not land cannot authorize a state upload (#1883)** (7dfb561)
- **fix(engine): the resume checkpoint records which tables a run planned, not how many (#1880)** (ecffa3b)
- **fix(engine/rocky-core): an unreadable pause state defers a spooled webhook demand (#1876)** (a105f1c)
- **fix(engine/rocky-cli): a bare reuse key is poisoned when a sibling writes the same table name (#1872)** (7a446cd)
- **fix(engine/rocky-cli): replication row_count and column_match honour their configured severity (#1871)** (79ecbd8)
- **fix(engine/rocky-compiler): a SELECT * takes a model's columns only when an edge reaches it (#1870)** (4a5afb7)
- **fix(engine/ui): a tab with no token asks the engine for nothing (#1863)** (5e3ed02)
- **fix(engine/rocky-cli): the resident scheduler reads [schedule] poll_interval_seconds (#1868)** (cbff073)
- **fix(engine/rocky-ai): ai-explain writes the sidecar the loader reads (#1866)** (543a232)
- **fix(engine/rocky-cli): a check's configured severity reaches the Dagster Pipes wire (#1864)** (662059e)
- **fix(engine/ui): a DAG node click opens the model, not a 404 (#1858)** (fc95de7)
- **fix(engine/rocky-server): rocky serve reports a compile that produced no result, not a clean project (#1849)** (8e26660)
- **fix(engine): guard the five dangling-symlink tests with cfg(unix) (#1848)** (ab82e53)
- **fix(engine): the resume scope records where the run read from (#1842)** (e17c20b)
- **fix(engine): a schema-wide quality target that lists no tables is not a clean run (#1843)** (7356b2a)
- **fix(engine/rocky-core): the commit protocol publishes through captured directory descriptors (#1841)** (809d8f4)
- **fix(engine): quality gate rides check_gate_failed, NaN threshold is refused, the sample deadline fires mid-compile (#1832)** (f04ce38)
- **fix(engine/rocky-server): an unreadable rocky.toml is reported, not read as absent (#1837)** (a033cdb)
- **fix(engine): a gate that cannot read its config refuses instead of passing (#1835)** (cc6ede0)
- **fix(engine): a shadow object is disposable and belongs to the run that made it (#1834)** (c777508)
- **fix(engine/rocky-cli): the scheduler metrics say when the webhook spool cannot be read (#1830)** (46c53ff)
- **fix(engine/ui): a plan page carries nothing of the previous plan, and the queue names its models (#1828)** (ed76f7c)
- **fix(engine): a dangling ancestor is a broken path, not an absent one — walk up before calling anything absent (#1822)** (618c7cc)
- **fix(engine/rocky-fulfill): the runner takes custody of a drafting worker's output (#1821)** (63490bd)
- **fix(engine/rocky-core): an unreadable commit marker refuses recovery, instead of rolling a committed generation back (#1819)** (7ff73b9)
- **fix(engine): expression checks are parsed and allowlisted, not interpolated raw (#1820)** (997bcc2)
- **fix(engine/rocky-cli): record the models behind a plan-level review escalation, so the queue can rank it (#1808)** (5740a48)
- **fix(engine): local pipeline arms honour [state] on_schema_mismatch (#1818)** (e5098a3)
- **fix(engine): export schemas for the four rocky list verbs (#1810)** (7c6f66d)
- **fix(engine): refuse a Snowflake resume whose target database is unpinned (#1806)** (87094fe)
- **fix(engine): an uncomparable landed type refuses the load instead of promoting it (#1805)** (8230c9c)
- **fix(engine): a quality run's JSON reports the status it actually reached (#1795)** (c6098b1)
- **fix(engine/rocky-cli): every product verb tells an unreadable store from an absent one, not just status (#1792)** (a8e0a5b)
- **fix(engine/ui): show an interrupted commit, instead of dropping the pending staging journal (#1791)** (5b0b7df)
- **fix(engine): anomaly_threshold_pct = 0 disables detection, as it has always documented (#1793)** (22756d0)
- **fix(engine/ui): tell a refused review queue from an empty one, and stop calling every wordy plan a backfill (#1783)** (3782d43)
- **fix(engine): a quality target whose schema cannot be listed stops reporting a clean run (#1786)** (c2b7da4)
- **fix(engine/rocky-cli): an unreadable state store refuses, instead of reporting a healthy empty product (#1789)** (0cc8857)
- **fix(engine): a spec file that exists but cannot be read is not a missing one (#1787)** (d547ad7)
- **fix(dagster): a declared check the engine did not produce stops reporting as passed (#1782)** (4352c16)
- **fix(engine/ui): a truncated id now says it was truncated, and a compound key keeps the end that identifies it (#1781)** (ca25924)
- **fix(engine): a check that could not run is never advisory, so a failed query stops clearing the gate (#1780)** (5861432)
- **fix(engine): make Model::file_path a PathBuf, so the incremental typecheck stops missing a changed model (#1778)** (41710df)
- **fix(engine/rocky-cli): exit 1 when rocky tick cannot read the webhook spool (#1768)** (8c12b2f)
- **fix(engine): stop confirming a verify_after gate with a check that measured nothing (#1767)** (f40ec1f)
- **fix(engine/ui): stop offering to sample a backfill, whose queue entry names no single model (#1765)** (5e0a4d3)
- **OWNER MERGE — fix(engine/ui): widen the journal's when column, so a timestamp stops wrapping on some rows and not others (#1763)** (33a73e0)
- **OWNER MERGE — fix(engine/rocky-cli): build both sides of the execution fingerprint with one derivation (#1761)** (8e08515)
- **OWNER MERGE — fix(engine): stop reading a dangling model or seed sidecar as absent (#1758)** (1380a0b)
- **OWNER MERGE — fix(engine/ui): keep the sample panel after the approval that empties the review (#1747)** (053ab47)
- **OWNER MERGE — fix(engine/rocky-core): tell absence from unreadable at every spool read site, not just the scan (#1757)** (f61f2b6)
- **OWNER MERGE — fix(engine/rocky-cli): degrade the brief on a broken config, and stop hiding a webhook-only project's incidents (#1755)** (ffd88f3)
- **OWNER MERGE — fix(engine/rocky-cli): frame the auth error and fire materialize_error from the inline drain too (#1754)** (02c4cb6)
- **OWNER MERGE — fix(dagster): a check-gated Rocky run must not finish as a green step (#1753)** (a894bf1)
- **OWNER MERGE — fix(engine): carry the spool refusal onto the tick report, so the JSON and the metrics say what the log says (#1752)** (08c4bf3)
- **OWNER MERGE — fix(engine): persist the verify_after verdict, so a resume cannot report Success over an unverified migration (#1749)** (0195821)
- **fix(engine/ui): give the journal table declared column widths, so one long event stops making every row tall (#1746)** (a7639bf)
- **OWNER MERGE — fix(engine/rocky-cli): stop the configured severity from silencing a check the engine could not run (#1742)** (5fe7578)
- **fix(engine/rocky-duckdb): give DATE, TIME and DECIMAL cells their own arms, instead of the driver's Debug string (#1744)** (4b412fd)
- **OWNER MERGE — fix(engine): stop deciding config presence with a link-following probe, which let a sweep delete kept history (#1739)** (27170b6)
- **OWNER MERGE — fix(engine): let an adapter say it cannot batch, instead of failing every check on Snowflake and BigQuery (#1736)** (b9d7c83)
- **OWNER MERGE — fix(engine): persist the check gate so a resume cannot launder a failed run into a success (#1734)** (eaf35a4)
- **OWNER MERGE — fix(engine/rocky-cli): collect every materialized table through one path, so the default concurrency stops skipping checks (#1726)** (2ab052d)
- **fix(engine): the red-team pass over the U-series — the scheduler starved behind the read queue (#1723)** (83e8e78)
- **fix(engine/rocky-core): drop a duplicate webhook demand before the pause check, and stop tick --now from erasing the dedup window (#1722)** (9e2db05)
- **OWNER MERGE — fix(engine/rocky-cli): compare the key-carrying siblings instead of passing the whole overlap group (#1717)** (6ecd9b9)
- **fix(engine/rocky-core): sweep tombstones from the spool directory the scheduler actually uses (#1714)** (df50699)
- **fix(engine/rocky-core): a dangling symlink at the webhook spool refuses instead of reading as empty (#1710)** (2078a17)
- **OWNER MERGE — fix(engine/rocky-cli): stop reporting a keyless overlap sibling as a failed check (#1706)** (048fcd9)
- **OWNER MERGE — fix(engine): refuse an unloadable rocky.toml in review --queue, brief and cost (#1704)** (4dc1cdb)
- **fix(dagster): an undeclared check result warns instead of failing the step, and a failed cross-source overlap check is visible (#1709)** (1db9aac)
- **fix(engine/rocky-core): a dangling rocky.toml symlink refuses instead of reading as no config (#1708)** (610574a)
- **fix(engine/rocky-cli): load surrogate keys only for the models a narrowed preview renders (#1703)** (a56ba8b)
- **fix(engine/rocky-cli): queue the server's own state-store reads, and measure the ceiling (#1695)** (5a4122a)

### Backend
- **OWNER MERGE — test(engine/rocky-cli): prove rocky init refuses a dangling rocky.toml and does not write through it (#1764)** (019f5ff)
- **OWNER MERGE — test(engine/rocky-cli): pin the order a degraded brief bails in (#1762)** (e4f573d)
- **OWNER MERGE — feat(cli-recording): the U3-A3 fulfillment screencast harness (#1751)** (4ca2424)
- **OWNER MERGE — chore(engine/rocky-cli): export the snapshot and docs schemas, the two commands the roster missed (#1759)** (206183e)
- **OWNER MERGE — test(engine/rocky-cli): anchor the source-text guards on the test module, not the first #[cfg(test)] (#1750)** (f0dc26c)

### Tests
- **test(engine/rocky-cli): the policy show text renderer writes to a sink, so a test can assert the whole block (#1910)** (93738ea)
- **test(engine/rocky-core): a deterministic filesystem seam for the path-probe class (#1904)** (ad07e4d)
- **test(engine/rocky-cli): the cron drift test drives ticks directly and asserts their outcomes (#1894)** (572464d)
- **test(vscode): gate the generated TypeScript barrel, and backfill the 68 types it was missing (#1875)** (53097a7)
- **test(engine): the scaffold probe names a duplicate-crate deps/ instead of blaming the template (#1865)** (4033db8)
- **test(engine/rocky-cli): the review queue tests open their DuckDB file by an absolute path (#1869)** (122c6fc)
- **test(engine): a CLI output with no exported schema now fails CI (#1852)** (c9810b8)
- **test(engine): a governance adapter that records what it was asked to do (#1850)** (cecb05a)
- **test(engine/rocky-mcp): reach make_ai_client's config refusal with an injectable key (#1839)** (24bc725)
- **test(dagster): pin the reason beside the severity on a passing unmeasured check (#1807)** (2a772d3)
- **test(engine/ui): hostile-value coverage for the review lane and the timeline (#1748)** (765ba80)

### Docs
- **docs(engine/rocky-cli): max_downstreams is a post-match ceiling, not a predicate (#1932)** (350551a)
- **docs(engine): remove the minikube example, whose copy step cannot work (#1918)** (d2f1b1a)
- **docs(engine): a stop grace must cover the drain AND the kill grace after it (#1914)** (dca6c18)
- **docs(engine): state all four webhook-exemption clauses in one place (#1905)** (aa4c46f)
- **docs(dagster): two claims about check state that the code does not support (#1873)** (d0019e0)
- **docs(engine): the serve reference no longer claims loopback authentication is on (#1855)** (85ad714)
- **docs: the shadow ownership and lifecycle contract #1834 shipped (#1838)** (d6e984f)
- **docs(engine): a path probe that answers "no" must not become a claim (#1797)** (92f8aff)
- **docs(advanced): the deployment contract, one page (#1698)** (1fce067)
- **docs(deploy): a Compose example for the engine image, community-supported (#1697)** (14d758a)

### Chore
- **chore: release engine 1.74.0 + sdk 0.15.0 + dagster 1.66.0 + vscode 1.41.0 (#1949)** (703d06a)
- **chore: ignore the Playwright CLI's local config directory (#1925)** (72366c5)
- **refactor(engine): the policy freeze sources are typed, so the incomplete-list warning cannot be silently detached (#1913)** (c564bff)
- **refactor(engine/rocky-cli): one derivation for the .rocky directory, and a test on the branch that made it worth sharing (#1911)** (b1eadf8)
- **chore(deps): bump js-yaml from 4.3.1 to 4.3.2 in /docs (#1826)** (c644745)
- **chore(deps): bump svgo from 4.0.2 to 4.1.0 in /docs (#1825)** (3816a53)
- **chore(deps): bump js-yaml from 4.3.1 to 4.3.2 in /editors/vscode (#1824)** (4e51426)
- **refactor(engine/rocky-cli): trace, cost and compliance build their payload in one seam the CLI renders from (#1860)** (4b07220)
- **ci(engine): measure coverage with cargo-llvm-cov instead of tarpaulin (#1847)** (61acac4)
- **ci: don't let a third-party runner repo fail every engine job (#1845)** (e49211b)
- **chore(engine/rocky-mcp): pin rmcp exactly, so a caret range cannot downgrade the MCP protocol (#1796)** (8ade5cb)
- **ci: catch the containment allow-list up to the action pins on main (#1809)** (ee74369)
- **chore(deps): bump the actions-minor-patch group with 2 updates (#1774)** (f77631a)
- **chore(deps): bump croner from 3.0.1 to 4.0.0 in /engine (#1777)** (2dc825d)
- **chore(deps): bump jsonschema from 0.52.0 to 0.53.0 in /engine (#1776)** (62d9230)
- **chore(deps-dev): bump vitest from 4.1.11 to 5.0.0 in /editors/vscode (#1773)** (32a8e14)
- **chore(deps-dev): bump mocha from 11.8.0 to 12.0.0 in /editors/vscode (#1772)** (6a4dd41)
- **chore(deps): bump the vscode-minor-patch group (#1771)** (777d85e)
- **chore(deps): bump the docs-minor-patch group in /docs with 2 updates (#1770)** (c0b6351)

_Recap by [Repo Wrapped](https://repowrapped.com/gh/rocky-data/rocky?utm_source=github-action)._