Skip to content

v5.1.0

Latest

Choose a tag to compare

@SAY-5 SAY-5 released this 27 Sep 00:27
c42e66d

The instruction document is typed with pydantic in expertloop/document.py. A citation now has to be a line range in the note the set was compiled from or a reference to a source of a known kind, so an empty citation object or a line past the end of the note is a 422 rather than provenance, and an edit that cites a source the registry does not hold is refused unless it passes register_unknown_sources. Documents that leave out an optional list no longer reach a KeyError, because render_prompt and the executor read every section with a default, and a decision rule without a condition is rejected at the boundary. The compiler reads "do not proceed until X" as a guard on the step rather than a forbidden action and no longer treats a negated stop word as an instruction to halt, and membership requires the operator to be spelled out, so "logged in user is admin" is a comparison.

Authentication has no default keys: api_keys ships empty instead of four documented demo keys, authenticate checks only the keys configured for the running application, and an unconfigured or explicitly empty list answers 401 from every authenticated endpoint. The demo Compose stack passes its example keys explicitly and binds the API and the fake targets to loopback.

Delivery carries a delivery_id that is stable across retries, skips a target that already holds that version, posts the Jira comment as an Atlassian Document Format body, and audits a failed rollback. Every service function that writes state takes a row lock on the instruction set. tests/test_golden.py writes what the compiler and executor produce into samples/expected/, and the browser demo's self-check reproduces those files.

The static browser demo in web/ gained the source drift, reviewer workload, versions and merges, test gate and whole-run sections, so the port now covers the compile, drift, review, versioning, gate and delivery paths, and web/README.md lists what it leaves out. Its approval state machine is HTML rather than a scaled SVG, so the labels hold their size at phone width, and the muted text tokens were adjusted to pass WCAG AA contrast.