What's Changed
- Add Claude Code skills for the Duhem repo by @tikazyq in #1
- Replace stub README with a minimal landing doc by @tikazyq in #2
- Add CLAUDE.md system prompt with Onsager dogfood orientation by @tikazyq in #4
- docs(skills): stop hard-wrapping prose in spec issue bodies by @tikazyq in #6
- feat(infra): scaffold Cargo workspace, toolchain, and CI baseline by @tikazyq in #7
- feat(schema): Verification Definition v0.1 types + chumsky expression AST by @tikazyq in #13
- feat(actions): ui/* v1 minimal slice — navigate, click, assert-element by @tikazyq in #14
- feat(judge): three-state verdict aggregation v1 by @tikazyq in #16
- feat(evidence): append-only run trace v1 by @tikazyq in #18
- feat(runtime): expression evaluator v1 by @tikazyq in #17
- feat(runtime): minimal step executor by @tikazyq in #19
- feat(schema,cli): typed input catalog by @tikazyq in #24
- feat(actions): api/* v1 minimal slice — api/call by @tikazyq in #25
- feat(runtime): setup-step ordering (#20) by @tikazyq in #26
- chore(skills): install plan-dag from onsager-ai/onsager-skills by @tikazyq in #27
- chore(skills): sync plan-dag from onsager-skills by @tikazyq in #28
- chore(skills): sync plan-dag from onsager-skills by @tikazyq in #29
- issue-spec: sync abstract skill from onsager-skills by @tikazyq in #30
- chore(skills): sync plan-dag PNG target from onsager-skills by @tikazyq in #31
- chore(skills): sync plan-dag visual encoding from onsager-skills by @tikazyq in #32
- chore(skills): sync plan-dag SVG/HTML targets from onsager-skills by @tikazyq in #39
- feat(cli): duhem run flags — filter, headed, evidence-dir, reporter by @tikazyq in #40
- feat(actions): ui/* rest-of-slice — type, select, assert-url, assert-state by @tikazyq in #41
- feat(cli): duhem run flags — inputs-file, dry-run, seed (#33) by @tikazyq in #42
- feat(cli): reporter plugins — RunSummary contract + subprocess loader (#34) by @tikazyq in #43
- chore(skills): sync plan-dag from onsager-skills (PNG-only renderer) by @tikazyq in #45
- feat(actions): api/observe — passive HTTP observation via Playwright (#38) by @tikazyq in #44
- spec(dogfood): first Onsager Verification Definition — create-project flow by @tikazyq in #46
- feat(integration): duhem/run composite action + dogfood workflow by @tikazyq in #47
- chore(skills): sync plan-dag from onsager-skills by @tikazyq in #55
- chore: consolidate dev skills into onsager-ai/dev-skills by @tikazyq in #56
- chore: install onsager-ai/dev-skills on SessionStart in cloud by @tikazyq in #57
- feat(schema,docs): formalize schema versioning discipline by @tikazyq in #59
- feat(cli): duhem init — scaffold a Verification Definition skeleton (#48) by @tikazyq in #58
- feat(cli,schema): root manifest loader — multi-leaf duhem run by @tikazyq in #60
- feat(runtime,schema): environment provisioning v1 —
up:/down:hooks by @tikazyq in #61 - docs: Phase 0 status sync across README, CLAUDE.md, dev-process, justfile, spec §14, Appendix D by @tikazyq in #65
- chore(skills): retire draft/planned/in-progress spec status labels by @tikazyq in #64
- refactor(actions,runtime): drive ui/* via official Playwright sidecar by @tikazyq in #73
- feat(actions): restore api/observe on the Playwright sidecar (#72) by @tikazyq in #74
- fix(actions): emit valid internal:has-text for Locator text (#75) by @tikazyq in #76
- ci: run ui/* + api/observe smoke in a Chromium lane (#77) by @tikazyq in #78
- feat(dogfood): retire create-project VD, target the spec-plan flow by @tikazyq in #80
- fix(dogfood): seed workflow with a UUID node id; confirm the seam live by @tikazyq in #81
- feat(actions): operator-pluggable sidecar browser; dogfood runs green live by @tikazyq in #83
- feat(dashboard): web dashboard MVP + live streaming — JSON API, SPA, CLI/export, SSE by @tikazyq in #88
- docs(skills): pre-push sync — name the real recipes, drop Phase-0 framing by @tikazyq in #89
- docs(spec): §10–§11 audit clarifying bundle — true six prose claims to code by @tikazyq in #96
- refactor(skills): migrate to global pre-push / pr-lifecycle by @tikazyq in #98
- feat(dogfood): Arbor create-and-ship-app VD — proven green live by @tikazyq in #103
- feat(judge): nested JSON navigation in path references by @tikazyq in #106
- feat(actions): cli/invoke — run a command, capture exit/stdout/stderr by @tikazyq in #107
- feat(actions): db/query + db/seed — assert and seed real SQL state by @tikazyq in #108
- fix(actions): sidecar auto-discovers an installed Chromium by @tikazyq in #109
- feat(dogfood): Crawlab create-project VD + env-script spawn fix by @tikazyq in #112
- feat(dogfood): Crawlab UI sign-in + dashboard VD (Vue surface) by @tikazyq in #114
- feat(actions): api/poll — poll an endpoint until a response condition holds by @tikazyq in #116
- feat(runtime): $runtime.format — compose values (dynamic URLs) without scripting by @tikazyq in #118
- feat(runtime): more pure $runtime helpers — concat/len/lower/upper/trim/replace/default by @tikazyq in #120
- feat(actions): db/query — MongoDB read path (#121) by @tikazyq in #122
- feat(dogfood): Crawlab spider→task scheduling lifecycle VD (#123) by @tikazyq in #124
- feat(cli): validate accepts a VD directory (#125) by @tikazyq in #126
- feat(reporter): surface which assertion failed (#125) by @tikazyq in #128
- feat(runtime): skip the browser for page-free verifications (#125) by @tikazyq in #127
- feat(dx): complete + harden the DX pass (#129) by @tikazyq in #130
- feat(schema): manifest-level shared environment — provision a suite once (#131) by @tikazyq in #132
- feat(schema): publish a JSON Schema for VD + manifest YAML (schemars) by @tikazyq in #136
- feat(schema): validate scans with: payloads — bare missing refs hard-fail by @tikazyq in #137
- feat(schema): manifest environments: block + CLI --environment (#68) by @tikazyq in #138
- feat(schema): leaf inputs inherit from the manifest via inherits: (#135) by @tikazyq in #139
- feat(cli): manifest discovery — ancestor walk, .duhem.yml alias, -f override (#69) by @tikazyq in #140
- feat(schema): root manifest defaults: block — timeout/inconclusive/retry (#66) by @tikazyq in #142
- feat(schema): root manifest includes: block — shared + local composition (#67) by @tikazyq in #141
- docs(license): relicense to Apache-2.0; open-source posture by @tikazyq in #144
- docs(readme): public README + CONTRIBUTING for the OSS release by @tikazyq in #146
- ci(release): npm + GitHub Releases distribution pipeline for the duhem CLI by @tikazyq in #145
- docs(release): cut v0.1.0 CHANGELOG section by @tikazyq in #147
- test(dogfood): duhem-cli regression VD via cli/invoke by @tikazyq in #149
- test(dogfood): duhem-dashboard regression VD via ui/* + api/* (part of #148) by @tikazyq in #152
- feat(cli)!: prune run flags — drop --seed/--headed, fold --inputs-file into --inputs @file (#151) by @tikazyq in #154
- feat(cli): --dry-run prints resolved input values (#155) by @tikazyq in #156
- feat(actions): api/stream — follow an SSE stream for mechanical assertion (#153) by @tikazyq in #157
- feat(cli): validate understands manifests, not just leaves (#150) by @tikazyq in #158
- docs(spec): true §10/§11 to shipped code — audit #90-95 by @tikazyq in #159
- docs(spec): §14 — ten crates incl duhem-dashboard by @tikazyq in #161
- docs(spec): finish OSS relicense — §5 Positioning + decisions table by @tikazyq in #162
- refactor: rename product Arbor → Chreode repo-wide (part of #163) by @tikazyq in #164
- refactor(chreode): rebrand VD internals to chreode by @tikazyq in #165
- test(crawlab): regression suite P0 — licensed cluster env + auth/token slice (Part of #160) by @tikazyq in #166
- feat(crawlab): select cluster image via DUHEM_CRAWLAB_IMAGE by @tikazyq in #168
- feat(actions): db/query coerces hex strings to ObjectId for Mongo _id filters by @tikazyq in #174
- feat(judge): $runtime.contains/any array-membership helpers by @tikazyq in #175
- feat(actions): api/call optional query: param mapping (#172) by @tikazyq in #176
- fix(schema): regenerate stale duhem.schema.json by @tikazyq in #177
- test(crawlab): regression API batch 1 — spider + task leaves (part of #160) by @tikazyq in #169
- test(crawlab): regression API batch 2 — admin/management leaves (part of #160) by @tikazyq in #170
- fix(crawlab): roles leaf — assert real model fields; update non-admin role (#180) by @tikazyq in #182
- feat(actions): db/observe — poll a DB query until rows settle (#181) by @tikazyq in #183
- fix(judge): exists() false on missing field; crawlab PATCH leaves use data wrapper by @tikazyq in #178
- test(crawlab): spiders AC-3.1 reads back after settle via db/observe (#181) by @tikazyq in #185
- refactor(crawlab): spiders AC-3.1 asserts partial-PATCH invariant crisply by @tikazyq in #187
- feat(evidence): Store trait + SqliteStore — the DB single source of truth (#189) by @tikazyq in #195
- feat(evidence): scoping + provenance schema — verifier VERIFIES target (#190) by @tikazyq in #196
- feat(schema,integration): first-class target identity — project: field + resolution ladder (#191) by @tikazyq in #197
- feat(schema,evidence): spans.layer trace tags — honest delivery-web evidence (#192) by @tikazyq in #198
- feat(dashboard): cross-run views — VD-over-time, failure-first run, delivery-web span (#193) by @tikazyq in #199
- feat(evidence,integration): run-bundle wire format + ingest client — the hub seam, OSS half (#194) by @tikazyq in #200
- ci: ship VD run bundles to the hub from dogfood + self-verify by @tikazyq in #201
- feat(actions): failure-evidence capture — screenshot + DOM on ui/* checks (#202) by @tikazyq in #203
- feat(actions): network HAR tail capture on ui/* failure (#204) by @tikazyq in #205
- feat(dashboard): human-readable check evidence (#206) by @tikazyq in #207
- feat(dashboard): in-page artifact inspection — HAR expand, DOM viewer, step grouping (#210) by @tikazyq in #217
- feat(dashboard): run-to-run diff API — last-pass baseline (#211) by @tikazyq in #219
- feat(dashboard): regression diff view + screenshot visual diff (#212, #213) by @tikazyq in #220
- feat(actions,dashboard): element-highlight on the failure screenshot (#214) by @tikazyq in #221
- feat(dashboard): agent failure envelope (#216) by @tikazyq in #222
- feat(actions,dashboard): video recording capture (#215) by @tikazyq in #223
- chore(release): cut v0.1.1 by @tikazyq in #224
New Contributors
Full Changelog: https://github.com/onsager-ai/duhem/commits/v0.1.1