Skip to content

Releases

v0.10.0

Choose a tag to compare

@github-actions github-actions released this 20 Oct 13:37
be45731

Fixed

  • Spec discovery starts at the git repository containing the current directory, so specproof dev finds a spec that lives above the directory you started in. --repo still audits exactly the directory you pass.

Added

  • A .json, .yaml, or .yml file is discovered as the spec when it has a root openapi or swagger version and the repo has no openapi* or swagger* file. The specification identifies a document by that field and allows any filename. The shallowest conventional name still wins.

Upgrading

  • Running from a subdirectory now audits the whole git repo. To keep auditing only one package, pass --repo for that package.

v0.9.4

Choose a tag to compare

@github-actions github-actions released this 04 Sep 21:06
95f3db2

Changed

  • The test-code panel's SOURCE · file path now sits between the route description and the first test name, at the same size as the test name and in bold, instead of below the code blocks.

v0.9.3

Choose a tag to compare

@github-actions github-actions released this 04 Sep 20:49
6c34331

Fixed

  • it()/test() block extraction now closes on }) with or without a trailing semicolon, instead of requiring });. Audited repos that don't use semicolons were showing the rest of the describe block as the proof snippet instead of just the matching test.

v0.9.2

Choose a tag to compare

@github-actions github-actions released this 04 Sep 20:32
784297a

Changed

  • Split example/tests/tasks.test.ts into one *.integration.test.ts file per operation, matching the existing per-operation split for auth, and renamed auth.test.ts to auth-login.integration.test.ts.
  • README's quick start now leads with bun add -d specproof / bunx specproof dev and lists specproof --help's flags instead of prose.
  • The marketing hero's report mockup is now generated from app/proof.generated.json by bun run generate:mockup instead of being hand-written, and gained the app's own tag and route accordions: every operation opens onto its status list, minus the stamp-to-side-panel step.

Fixed

  • An operation's tally now counts every status row it prints, including synthesized and undocumented ones, so the fraction matches the marks beside it (the bundled example's total goes from 10/17 to 11/24).
  • The report's assertion count now shows for any verdict with assertions, not just spec-documented ones.
  • The "Built by Durable Quality" link now points at the studio's current handle (x.com/DurableQA).
  • The marketing footer's version tag was hardcoded and had gone stale at v0.7.1; bun run generate:mockup now rewrites it from package.json's version on every run, so it can't drift again.

v0.9.1

Choose a tag to compare

@github-actions github-actions released this 04 Sep 17:42
155f82d

Changed

  • Split this repo's own test suite into tests/unit/ and tests/integration/, with bun run test:unit and bun run test:integration as separate scripts (bun run test still runs both). CI's Test job now runs them as two steps so a log or re-run can target one without pulling in the other.
  • Trimmed scripts/README.md to cut redundant explanation while keeping every command and flag.

v0.9.0

Choose a tag to compare

@github-actions github-actions released this 04 Sep 17:04
2a574e6

Added

  • A NO DESCRIPTION stamp marks an operation with no summary and a documented response with an empty description, so a missing description reads as the spec gap it is instead of as blank space.
  • A MISSING FROM SPEC stamp marks every response status the spec does not document, greying the status code. Statuses SpecProof expects of an operation and never finds are now listed rather than silently absent: 500 for every operation, 404 where a path parameter addresses a resource, and 400 where the operation declares a request body. The stamp is about the spec, so it is independent of the test verdict beside it: a status nothing asserts reads NO TEST, and one the tests do assert reads UNDOCUMENTED.

Changed

  • UNDOCUMENTED is now reserved for a status the tests assert that the spec never mentions. A status with no assertions reads as NO TEST whether the spec documents it or not.

Fixed

  • A status code asserted in tests but absent from the OpenAPI spec no longer replaces the route's description with "asserted in tests, but absent from the OpenAPI spec". A description is only ever the spec's own, shown as written; SpecProof never substitutes text for it.

v0.8.0

Choose a tag to compare

@github-actions github-actions released this 22 Aug 12:26
356c4b3

Added

  • Specs can now be developed alongside SpecProof from nothing: an empty, comment-only, or path-less OpenAPI file compiles to an empty proof and renders instead of failing, so specproof dev opens on a repo whose API is still being written.
  • specproof dev watches the audited repo's spec and test files and rebuilds the proof as they change, so adding an operation shows up in the report without a restart. Disable with --no-watch.
  • specproof generate --allow-empty writes a proof with no operations even when the one it replaces had some.
  • The report distinguishes "no API definition found" from "a spec exists but documents no operations yet", and the second points at the next edit to make.

Changed

  • The empty-proof guard is now regression-aware rather than absolute: writing a proof with no operations is refused only when it would overwrite one that had some. That case keeps its hard failure, and names both counts in the message.
  • Finding no spec at all now writes an empty proof rather than keeping whatever was already on disk. Auditing a repo whose API isn't written yet could previously leave the previously audited repo's coverage on screen, relabeled with the new repo's name. A proof that already has operations is still kept, since a spec that suddenly can't be found is more often a moved file than a deleted API, and the warning now names --allow-empty as the override. specproof dev and build pass that flag when refreshing their own artifact; --check remains a hard failure.
  • specproof dev no longer refuses to start when the spec doesn't parse. It warns, serves the last good proof, and heals on the next save, since half-written YAML is the normal state of a file being edited. specproof build still fails hard.

Upgrading

  • Proofs gain a hasSpec field, so a proof committed by 0.7.x is one field behind. Run specproof generate once and commit the result. specproof generate --check detects this case and says the proof came from an older SpecProof rather than reporting it as spec drift, so CI points at the upgrade instead of sending you looking for a change that didn't happen. Plain specproof generate just rewrites the file.

v0.7.2

Choose a tag to compare

@github-actions github-actions released this 01 Aug 20:29
1e06f2a

Changed

  • Replaced the README's static coverage report screenshot with a walkthrough GIF covering the route breakdown and test snippet detail views.

v0.7.1

Choose a tag to compare

@github-actions github-actions released this 01 Aug 19:22
71cf63f

Changed

  • Trimmed the README to a quick start and CLI summary, since the marketing site now covers install variants, conventions, and the CI drift-guard example in more depth.
  • Added a screenshot of the coverage report to the README.

v0.7.0

Choose a tag to compare

@github-actions github-actions released this 30 Jul 19:57
5dd7850

Added

  • YAML OpenAPI specs are read directly: auto-discovery now matches openapi* / swagger* in .json, .yaml, and .yml, and --spec accepts any of them (any other extension is sniffed). A spec and its conversion to the other format produce a byte-identical proof, so switching formats never registers as drift.
  • specproof generate warns when two specs sit at the same depth in the tree, naming the one it audited. The case that matters is a openapi.yaml checked in beside a converted openapi.json, where the loser is usually stale.
  • generate now names the spec it read in its success and --check output.

Changed

  • A malformed, empty, or non-object spec now fails with a one-line message instead of an uncaught stack trace, in both generate and generate --check, and never overwrites an existing proof.
  • Tag section headers in the report no longer carry a leading sequence number.

Fixed

  • generate refuses an --out path that spec auto-discovery would read as an API definition (openapi* / swagger*), which previously let the proof overwrite the spec it was compiled from, or be audited as a spec on the next run.