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

_137 commits._

### Features
- **feat(engine): enforce selected model contracts during run (#2182)** (ecf3dad)
- **feat(engine/rocky-adapter-sdk): conformance runner covers watermark_where and row_hash (#2130)** (b154002)
- **feat(engine/rocky-server): complete pipeline step keywords in .rocky files (#2128)** (997f307)
- **feat(engine/ui): the shell takes the application-shell layout, on Headless UI (#2081)** (ddd5aa0)
- **feat(engine/ui): the browser UI wears the Rocky mark (#2071)** (e164287)
- **feat(engine/ui): a sidebar with the eleven areas replaces the three-lane header (#2050)** (a3df5d2)
- **feat(engine/rocky-cli): serve --ui --open opens the page once the listener is bound, and just ui-dev runs the UI loop in one command (#1995)** (c8c6b3e)
- **feat(engine): GET /api/v1/settings reports the server's posture (#1907)** (69eeb43)
- **feat(deploy): a Helm chart for self-hosting Rocky on Kubernetes (#1976)** (f35994a)

### Fixes
- **fix(engine/ui): a DAG model the server did not compile no longer opens a detail that 404s (#2047)** (cac4b2e)
- **fix(engine): land 28 reviewed PRs together (2026-09-30 drain) (#2223)** (c98843b)
- **fix(engine/rocky-cli): one branch-name rule; compare never reports a count it did not read (#2180)** (0ca6b07)
- **fix(engine/rocky-cli): classify fail-fast model runtime failures (#2179)** (c082b47)
- **fix(engine/rocky-sql): gate date_part and EXTRACT on WEEK_START-dependent parts (#2178)** (5ac6126)
- **fix(engine/rocky-bigquery): convert a TIMESTAMP cell's epoch string to RFC 3339 (#2177)** (4685a17)
- **fix(engine/rocky-cli): emit row-count anomaly checks over Dagster Pipes (#2156)** (87b2b3f)
- **fix(engine/rocky-cli): pair preview diff/cost with the branch run, fix sample-size and unknown row counts (#2158)** (d362d29)
- **fix(engine/rocky-mcp): gate draft_check's filter and key_expr like expression (#2168)** (2e65cd4)
- **fix(engine/rocky-cli): bound a_stuck_config_read_is_bounded_refused_and_recovers (#2170)** (3300cfc)
- **fix(engine/rocky-core): refuse two check names that sanitize onto one Dagster check (#2157)** (7c24cb6)
- **fix(engine/rocky-cli): rocky validate catches five wrong config shapes (#2152)** (200f580)
- **fix(engine/rocky-duckdb): keep sub-second precision in the watermark read (#2149)** (dcc493e)
- **fix(engine/rocky-cli): resolve a seed's pipeline on a multi-pipeline DAG run (#2122)** (573a42c)
- **fix(engine/rocky-core): reconcile target object kind before a strategy switch (#2142)** (b278874)
- **fix(engine/rocky-sql): name a refused filter and key correctly instead of borrowing another field's advice (#2139)** (e458359)
- **fix(engine/rocky-cli): read pipeline from a promote plan on apply, add --pipeline to branch compare (#2131)** (8601e26)
- **fix(engine/rocky-cli): correct three --help strings that describe behaviour the code does not have (#2129)** (8022dfa)
- **fix(engine/rocky-cli): classify the AdapterError wrapper warehouse adapters actually return (#2126)** (546a488)
- **fix(engine/rocky-cli): read a model's real strategy and [cost] prices in rocky optimize (#2121)** (89d3fd4)
- **fix(engine/rocky-sql): allow-list date functions by argument shape and re-admit to_char (#2140)** (bb85235)
- **fix(engine/rocky-core): remove the inert checks.freshness overrides key (#2135)** (254fb62)
- **fix(engine/rocky-cli): the inherited check gate names every failed check the prior run recorded (#2132)** (03eb588)
- **fix(engine/ui): tone cards keep their accent in dark mode (#2127)** (78d95e9)
- **fix(engine/rocky-cli): treat an existing, empty models/ as no governance actions (#2118)** (d69935a)
- **fix(engine/ui): the DAG node card gives each engine kind its own glyph (#2110)** (680c0a3)
- **fix(engine/ui): decode the review screen's plan id segment (#2106)** (515acbc)
- **fix(engine/rocky-cli): validate checks a load pipeline's target adapter (#2116)** (f7e1911)
- **fix(vscode): grammar highlights let and the window-frame keywords (#2109)** (db7b3fc)
- **fix(engine): reject known missing columns and contain compile failures (#2101)** (42a332f)
- **fix(ci): move action pins to a data file, and retry the policy fetch (#2078)** (ba137e3)
- **fix(engine/ui): the engine line asks the engine once, not fifteen times a second (#2076)** (432a94f)
- **fix: report per table whether the row-count anomaly detector evaluated it (#2074)** (7132e88)
- **fix(engine): refuse ephemeral models (E038) and remove the CTE-inlining claim (#2069)** (d04ac4c)
- **fix(engine): evaluate each quarantine predicate once, and fail the run when a quarantine does not apply (#2066)** (c42b6be)
- **fix(engine): refuse incremental on transformation models (E037) (#2058)** (3d90b7f)
- **fix(engine/ui): the sample note says exactly when a classified column comes back raw (#2048)** (4ac5465)
- **fix(engine): the trust scorecard counts policy evaluations, not every ledger row (#1957)** (c8151d2)
- **fix(engine/rocky-server): the --ui host guard accepts the bracketed IPv6 address it advertises (#2039)** (0879072)
- **fix(engine/ui): a product's decisions link to the ledger, not to an empty custody chain (#2041)** (cba7677)
- **fix(engine/ui): the spec-moved card says what apply actually compares (#2040)** (3d08a75)
- **fix(engine): describe unrecorded column types (#2008)** (e3dbe54)
- **fix(engine/rocky-cli): preview refuses a classified column it cannot mask, instead of returning it raw (#2034)** (fccf7de)
- **fix(engine/rocky-cli): every table prints the whole run id (#2026)** (e6b3087)
- **fix(engine/rocky-cli): the drop-and-recreate drift reason reads from the existing type to the new one (#2023)** (5e3066a)
- **fix(engine/rocky-cli): the review queue ranks by change class, and says so (#2014)** (1b5f88b)
- **fix(engine/rocky-core): a .rocky model's [[test]] and [[surrogate_key]] sidecar blocks are loaded (#2017)** (cd6d9bf)
- **fix(engine/rocky-mcp): rocky mcp introduces itself as rocky with the engine version, not as the rmcp library (#2007)** (fc86eeb)
- **fix(dagster): the scaffold writes a rocky.toml the engine accepts and puts --config before the verb (#1998)** (fbd3c96)
- **fix(engine/rocky-cli): rocky serve answers 409 state_needs_migration for a store a read cannot serve (#1999)** (ae85f18)
- **fix(engine/rocky-cli): a browser-UI deep link whose last segment carries a dot loads the page (#2006)** (86820b9)
- **fix(sdk): the engine floor is 1.35.0, the first engine with a replication plan_id (#1988)** (cde84ff)
- **fix(engine/rocky-core): a read-only open of the state store never writes — the table set decides, not the version stamp (#1981)** (9c98107)
- **fix(engine): a non-empty table with no timestamp value fails its freshness check as not evaluated (#1975)** (d618aca)
- **fix(playground): the POC harness proves which rocky it ran, and a failed drive says why (#1972)** (a02b3bc)
- **fix(engine/rocky-sql): a refused metadata column value is explained as a column value, not a check (#1968)** (8991f40)
- **fix(engine/rocky-core): an absent [checks] table now means the same as an empty one (#1950)** (8c61136)
- **fix(scripts): regen-fixtures refuses a binary that does not match the tree (#1953)** (f925c14)

### Docs
- **docs: correct three stale claims (compile-failure containment, time-interval bootstrap, fulfill outbox) (#2165)** (6b5008c)
- **docs: apply reads the plan's pipeline; branch compare takes --pipeline (#2154)** (5090fa8)
- **docs: rocky optimize reports the configured strategy and honours [cost] (#2151)** (2bce1e4)
- **docs(sdk): add Example blocks to the six product_* methods (#2108)** (8c607f4)
- **docs: the check-expression allowlist checks names, not bindings (#2107)** (8e0a225)
- **docs: correct grace-period column-drop claims (#2115)** (292d9a0)
- **docs: .rocky/plans/ is a trusted input; the digest is not a tamper check (#2114)** (0522366)
- **docs: add the rocky lineage-diff reference section (#2111)** (938ece3)
- **docs: distinguish released installs and collect first-run feedback (#2102)** (1dd6265)
- **docs: clarify local validation and cost boundaries (#2100)** (9d90fe3)
- **docs: clarify compiler and AI validation boundaries** (c48277f)
- **docs: the browser UI sidebar folds at 1024 pixels, behind an Areas button (#2087)** (dfc060b)
- **docs(engine): three comments name a construct Rocky does not have (#2085)** (5ab9542)
- **docs(engine/rocky-core): state the bound on the secret registry (#2084)** (2855670)
- **docs: --defer resolves upstream models, not ref()s (#2086)** (e0f34bd)
- **docs: a compile error does not stop a fail-fast run (#2082)** (8c6b96a)
- **docs(dagster): the no-anomaly verdict comes from anomaly_evaluation_results (#2083)** (b4c151a)
- **docs(dagster): the anomaly example emits each asset once (#2080)** (4f24aaa)
- **docs: the anomaly detector says which tables it evaluated (#2079)** (e19300c)
- **docs: type = "ephemeral" is refused (E038), and the pages stop promising CTE inlining (#2072)** (b75ff2e)
- **docs(quarantine): split evaluates once, accepts a clock, is refused on Trino, and a failed quarantine fails the run (#2067)** (5e73385)
- **docs: rocky compile and rocky optimize no longer emit incrementality hints (#2062)** (304776c)
- **docs: a transformation model cannot use incremental (E037) (#2057)** (6308b60)
- **docs(trust): .rocky/plans/ is a trusted input, and its digest is integrity, not authentication (#2055)** (e9b92c6)
- **docs(trust): schema drift runs no grace period, and a removed column is not detected (#2053)** (4b67da9)
- **docs(engine/rocky-cli): DriftGovernor::build comments match its fail-closed no-policy path (#2060)** (e57752e)
- **docs(browser-ui): the guide follows the eleven areas, not the three lanes (#2051)** (6b24f81)
- **docs(browser-ui): the mask block decides first, and allow_unmasked is only its fallback (#2049)** (e886156)
- **docs(browser-ui): the sample refuses a classified column it cannot mask, and never returns it raw (#2046)** (429569e)
- **docs: AGENTS.md lists the rocky product subcommands that exist (#2010)** (7195ac9)
- **docs: READMEs match the code (subprojects, examples and playground POCs) (#2028)** (ffc0abf)
- **docs: name the two gaps a reader hits, and no_new_nullable is enforced now (#2021)** (6bd42a9)
- **docs: ROCKY_EXPLAINED.md describes what the engine actually does (#2016)** (24d24bc)
- **docs: a guide to the browser UI, with screenshots, a tour GIF, and a script that rebuilds them (#2000)** (fd2cd51)
- **docs: pages that recent engine changes made wrong (check expressions, exit 2, CAS, config leniency) (#2013)** (33c60d9)
- **docs: fix examples that fail when copied (config, CLI flags, version pins, llms.txt) (#1992)** (faafdcb)
- **docs(engine): the CAS bypass list names rocky apply of a restore plan (#2033)** (fb2f7db)
- **docs(engine/rocky-core): the concurrency_control doc names the writers still outside compare-and-swap (#1989)** (a3337c3)
- **docs(engine): AGENTS.md config examples show values the engine accepts (#1987)** (d8c6bba)
- **docs(engine/rocky-core): prune_unchanged field doc states the watermark condition (#1969)** (ff98f65)
- **docs: config examples showing alternatives now parse as printed (#1958)** (0e36b92)
- **docs: four pages the 1.74 check work left behind (#1956)** (c6134b9)
- **docs(engine): the bench skill named one bench of three and documented a baseline history that never existed (#1948)** (029a83a)

### Chore
- **chore: release engine-v1.75.0 + sdk-v0.16.0 + dagster-v1.67.0 + vscode-v1.42.0 (#2225)** (3c02e0c)
- **chore(deps): bump the docs-minor-patch group in /docs with 2 updates (#2183)** (c24c9d9)
- **chore(ci): accept the three action commits #2089 now pins (#2103)** (01a1501)
- **chore(deps-dev): bump the vscode-minor-patch group across 1 directory with 2 updates (#2117)** (868f154)
- **ci(engine): run dag_execute bench in CI, pin parallelism with a test (#2134)** (7772a84)
- **chore(engine): bump the cargo-minor-patch group and adopt rmcp 3.4's ServerConfig (#2120)** (da0ef56)
- **refactor(engine/rocky-cli): policy text renderers write to a sink so tests can read them (#2119)** (1458564)
- **ci(engine): fail a PR that changes engine/ and carries no changelog entry or marker (#2112)** (2c5283c)
- **chore(deps): bump sqlparser from 0.62.0 to 0.63.0 in /engine (#2099)** (c8fe168)
- **chore(ci): stop dependabot bumping arrow and parquet majors on their own (#2104)** (ecacca8)
- **ci(vscode): retry vsce publish with backoff (#2105)** (cfa46bb)
- **chore(deps-dev): bump @vscode/vsce in /editors/vscode (#2095)** (6bdd9aa)
- **chore(deps-dev): bump the vscode-minor-patch group (#2094)** (ede4ec9)
- **chore(deps): bump the docs-minor-patch group in /docs with 2 updates (#2093)** (a3c2b01)
- **chore(ci): accept the commits #2089 actually bumps to (#2091)** (7a87434)
- **chore(ci): accept the new setup-uv and taiki-e install-action commits (#2088)** (393f3d0)
- **chore(deps): bump devalue from 5.9.0 to 5.9.2 in /docs (#2077)** (d2dd936)
- **chore(cli-recording): record the browser UI in dark theme (#2070)** (253948f)
- **refactor(engine): remove the compile incrementality hint that recommends a refused strategy (#2061)** (7187a56)
- **chore(deps): bump the cargo-minor-patch group across 1 directory with 7 updates (#1982)** (217a7aa)
- **chore(deps): bump jsonschema from 0.53.0 to 0.56.0 in /engine (#1966)** (7b0f50c)
- **chore(deps-dev): bump the vscode-minor-patch group (#1963)** (494e081)
- **chore(deps): bump astro in /docs in the docs-minor-patch group (#1962)** (e66de18)
- **chore(engine): rustls 0.23.43 to 0.23.45 for RUSTSEC-2026-0285 (#1977)** (2e8016a)
- **chore(engine/rocky-mcp): rmcp 3.1.4 to 3.3.0, with the negotiation rule it brings (#1974)** (47f8ddd)
- **ci(engine-weekly): coverage tolerates the raw profiles a SIGKILLed child leaves behind (#1970)** (10e5541)
- **ci(vscode): run the vitest suite, so the generated-barrel guard actually gates (#1954)** (482b50a)

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