Skip to content

Releases: electrohire/applied-epistemic-engineering

v1.5.3

Choose a tag to compare

@tbitcs tbitcs released this 16 Oct 20:38
3e98ae5

Standalone agent skill, clarified CLI/agent/Spec Kit guides, input fuzzing and corrected documentation rendering. Scoring semantics remain methodology 2.0 and lexicon 1.0.

Changed

  • Group documentation navigation into short tabs so every section remains
    accessible at desktop widths. Explain the independent scoring methodology
    and lexicon versions without relabeling historical assessments.
  • Enable Mermaid diagrams in the documentation so flowcharts render rather
    than appearing as code blocks.
  • Add a ClusterFuzzLite/Atheris input-boundary fuzz target and share its corpus
    with regression tests across Linux, macOS, and Windows.
  • Add a standalone agent skill to the engine package source and document CLI,
    direct-agent, and Spec Kit skill workflows. Remove retired scaffold migration
    and porting pages from the current documentation.
  • Distinguish the PyPI distribution, Python module, engine CLI, and Spec Kit
    extension IDs; explain bounded verification, certification limits, and why
    GitHub/RTD development docs can differ from released PyPI metadata.
  • Refresh this repository's own Spec Kit, AEE, and evaluator setup.

Validation: full Linux/macOS/Windows × Python 3.11/3.12/3.13 CI, CodeQL, dependency review, strict documentation build and ClusterFuzzLite passed before release. OpenSSF Best Practices assessment remains 97% (in progress), not a Passing badge.

aee 1.5.2 — Spec Kit install example pins spec-kit-aee 1.5.1

Choose a tag to compare

@tbitcs tbitcs released this 15 Oct 19:17
e1ad2a9

Released 2026-10-15. Documentation only: engine behavior, scoring, and methodology_version are unchanged from 1.5.1.

Changed

  • The Spec Kit install example in the README (this PyPI page), quickstart, Spec Kit integration, and migration docs now pins spec-kit-aee 1.5.1, the tested extension release with the draft-claims setup fix. It previously pinned 1.5.0. The text presents it as a pinned example of an independently versioned extension and links its releases.

    specify extension add aee --from https://github.com/electrohire/spec-kit-aee/archive/refs/tags/v1.5.1.zip

    The engine requirement the extension declares stays applied-epistemic-engineering>=1.5.0,<2, so its automatic install resolves the latest compatible engine.

Install

pip install applied-epistemic-engineering==1.5.2

Testing

  • CI on the release commit e1ad2a9 passed: quality checks and the test suite on Ubuntu, Windows, and macOS × Python 3.11, 3.12, and 3.13 (run 38792117327).
  • Locally, twine check --strict passed on both distributions, and the wheel installed in a clean Python 3.11 environment reports aee 1.5.2.

Full changes: #46 (closes #45). Prepared with Claude Code (autonomous) on behalf of @tbitcs.

aee 1.5.1 — install, platform, and Spec Kit documentation

Choose a tag to compare

@tbitcs tbitcs released this 15 Oct 18:46
4a2ab91

Released 2026-10-15. Documentation and package metadata only: engine behavior, scoring, and methodology_version are unchanged from 1.5.0.

Changed

  • README (this PyPI page) and quickstart now state the supported platforms: Linux, macOS, and Windows with Python 3.11, 3.12, and 3.13. They also explain that Spec Kit users install the spec-kit-aee extension, which installs a compatible engine (>=1.5.0,<2, the latest available) automatically:

    specify extension add aee --from https://github.com/electrohire/spec-kit-aee/archive/refs/tags/v1.5.0.zip

    spec-kit-aee is a Spec Kit extension distributed as a GitHub release archive, not a PyPI package, and it is versioned independently.

  • docs/spec-kit.md documents the one-command install and what the extension installs automatically. docs/migration.md no longer tells Spec Kit users to install the two extensions by hand.

  • docs/versioning.md: the extension's engine floor is >=1.5.0,<2 (it said >=1.4.0,<2). Catalog updates now follow Spec Kit's current procedure: a new Extension Submission issue after each tested release, never a direct catalog PR.

  • Added the Operating System :: OS Independent classifier.

Fixed

  • The README's documentation links were relative and broke on PyPI; they are now absolute.

Install

pip install applied-epistemic-engineering==1.5.1

Testing

  • CI on the release commit 4a2ab91 passed: quality checks (ruff, mypy, mkdocs strict, build, install, demo) and the test suite on Ubuntu, Windows, and macOS × Python 3.11, 3.12, and 3.13 (run 38787780091).
  • Locally, twine check --strict passed on both distributions, and the wheel installed in a clean Python 3.11 environment reports aee 1.5.1.

Full changes: #44 (closes #43). Prepared with Claude Code (autonomous) on behalf of @tbitcs.

aee 1.5.0 — claims carry a maturity stage; reports separate machine checks from human acceptance

Choose a tag to compare

@tbitcs tbitcs released this 12 Oct 20:09
447d078

Applied Epistemic Engineering (AEE) checks a set of claims against the evidence offered for them and reports, claim by claim, how much that evidence actually supports. Version 1.5.0 is the largest change since the first release: a claim's maturity is now tracked explicitly, and several ways a weak claim set could look stronger than it is have been closed.

Claims now carry a stage. Every claim sits at one of five stages — created, checked, explained, accepted, digested. Checking a claim (running the evidence) only moves it to "checked". It cannot be reported as fully supported until people have explained it in their own words and accepted it. Support that comes only from machines (test results and other automatic checks) can never, by itself, move a claim past "checked".

Two lanes, reported separately. Machine verification is fast; human understanding is slow. Assessments now report the two side by side, and the human lane is reported as a state ("how far has this claim got with people?"), never blended into the machine score. Every verdict also states, in a field called not_understood, what remains not understood about the claim.

Credit only counts when it is anchored. A source builds a track record only from observations recorded in the project's tamper-evident ledger — a record the engine can re-verify. A source that simply asserts its own good history gets provisional credit only: capped, labelled as provisional, and never blended into scores.

Ways to look stronger than you are, closed. An empty claim set can no longer "pass". Repeated copies of the same evidence no longer multiply its weight. The release gate recomputes the verdict from the record instead of trusting the file's own claim. Scores are stored unrounded, so a value just below the pass threshold can no longer round up into a pass.

Also in this release: external anchoring of assessment fingerprints (aee anchor, optional), evidence files that escape the project folder through symbolic links are refused by name, the evaluator results contract carries the new stage and lane information, and the full change record — including a plain statement of what was fixed after an adversarial review of the engine — is in CHANGELOG.md.

One known limit, stated plainly: the contradiction check catches direct negations, but it can miss a contradiction where the same point is rewritten in completely different words. This limit is recorded in the release's own spec files rather than hidden.

v1.4.0

Choose a tag to compare

@tbitcs tbitcs released this 06 Oct 23:20
31f39af

CLI wiring for the ported mechanisms — the surface the Spec Kit extension drives.

  • aee assess --policy (with --min-independent-sources / --contested-threshold) attaches the policy gates; --reliability <table.json> (--reliability-alpha) blends measured per-source reliability into scoring.
  • New aee review subcommand: diffs two serialized assessments into the materiality review queue.
  • Fix: the abstain outcome now exits 1 (soft verdict) instead of 2 (hard block/error), per the documented exit-code contract.

118 tests, all green.

v1.3.0

Choose a tag to compare

@tbitcs tbitcs released this 06 Oct 23:07
df8194b

Slice 3 of the epistemic-ledger port, completing the three ported mechanisms (docs/porting-from-epistemic-ledger.md).

  • aee.review.build_review_queue(previous, current, materiality=0.05, limit=None): diffs two assessments into the bounded list a reviewer owes attention — propagated-score moves ≥ materiality (largest first, top-k budget), policy verdict flips, added/removed claims, with before/after scores and confidence bands.
  • The 0.05 default is the ledger's validated hysteresis point (CHURN-01 / TRIGGER-STRESS-01).

110 tests, all green.

v1.2.0

Choose a tag to compare

@tbitcs tbitcs released this 06 Oct 23:01
3eb9673

Slice 2 of the epistemic-ledger port: per-source reliability learned from resolved claims.

  • aee.reliability.ReliabilityTable: (propagated score, outcome) per source_id; measured reliability = 1 − Brier, gated by min_observations (default 3) as a cold-start guard. observe_claim credits resolved claims to their distinct supporting sources. Serializable.
  • ScoringEngine(reliability=table, reliability_alpha=0.5) — forwarded by AEEEngine — blends a supporting source's static SourceQuality weight toward its measured reliability; substitutions are noted on each score. Contradictions keep static weights.
  • No table → scoring bit-identical to 1.1.0. 102 tests, all green.

v1.1.0

Choose a tag to compare

@tbitcs tbitcs released this 06 Oct 22:51
c04ed84

Assessment policy gates ported from the epistemic-ledger program (see docs/porting-from-epistemic-ledger.md for the full transfer map).

  • aee.policy: opt-in AssessmentPolicy on AEEEngine; per-claim verdicts ACCEPT / CHALLENGE / ABSTAIN with reasons.
  • Corroboration gate: fewer than 2 independent supporting sources → CHALLENGE.
  • Forced abstention: no supporting evidence, or model self-attestation only → ABSTAIN.
  • Contested gate: contradiction penalty ≥ 0.25 → CHALLENGE at best.
  • ABSTAIN present → outcome 'abstain' instead of 'pass'; CHALLENGE present → 'iterate'.
  • No policy → behavior unchanged. 92 tests, all green.

v1.0.4 — Applied Epistemic Engineering

Choose a tag to compare

@tbitcs tbitcs released this 02 Oct 19:45
9b029ed

[1.0.4] - 2026-10-02

Fixed

  • Mermaid rendering no longer merges distinct claims: node IDs are encoded injectively (A-B and A_B previously both became C_A_B), and labels escape double quotes as &quot; entities and flatten newlines instead of only rewriting quotes in the claim text while interpolating the ID raw.
  • load_claims refuses a JSON object without a claims key (previously it silently loaded an empty claim set and produced a vacuous assessment), and markdown depends_on refs are uppercased to match the uppercased claim IDs (a lowercase ref previously never resolved).
  • Ledger appends are O(1) after the first verification instead of O(n) each (O(n²) over a session): appends trust a verified-tip cache keyed on the file's size and mtime, and any external change forces a full verify() before the next append. Chain semantics and the append lock are unchanged.

Documentation

  • The mutation contracts are now stated where they happen: StressTester.run replaces each claim's failures list wholesale (carried-in failures are not preserved), and ScoringEngine.score overwrites claim.confidence with the propagated score. Both behaviors are pinned by tests.

v1.0.3 — Applied Epistemic Engineering

Choose a tag to compare

@tbitcs tbitcs released this 02 Oct 19:01
59946bc

[1.0.3] - 2026-10-02

Fixed

  • Gap preservation is keyed on the stable test_id, not the positional GAP-XXX ID: inserting, deleting, or reordering a matrix row no longer moves a preserved closure onto a different test. The register format gains a Test column; legacy registers without it still parse and preserve by ID.
  • Documented gap statuses in_progress and blocked survive a load/regenerate cycle; the register parser previously reset every open row to open.
  • aee gaps --close on a nonexistent gap ID is now an error (exit 2). close_gap raises KeyError; previously it silently succeeded.
  • CLI error contract: malformed input, invalid enum values, out-of-range thresholds, and unsupported phases now exit 2 with a clean message instead of a traceback with exit 1 — a code the README defines as a soft outcome, so crashes were indistinguishable from legitimate soft verdicts in CI.
  • Corrupt evidence JSON files produce a stderr warning instead of being silently treated as "no evidence".
  • Failure IDs are unique per failure instance: the same challenge firing against several peers previously produced identical IDs, colliding recovery proposals and evaluator findings.
  • ClaimGraph.cycles() is iterative; dependency chains beyond ~1,000 claims no longer raise RecursionError inside assess().
  • Cyclic dependency graphs now record "propagation skipped" on the affected scores instead of silently leaving them uncapped.
  • HashChainLedger.append() takes an advisory file lock around verify+append so concurrent appends cannot fork the chain; entries() reports corruption as a ValueError naming the line, agreeing with verify().

Added

  • ScoringEngine.score(..., as_of=...) and AEEEngine.assess(..., as_of=...): pin the instant freshness is judged against, making assessments replayable. Previously the freshness penalty read the wall clock, so identical input scored differently on different days. Unparseable observed_at values are now noted on the score instead of silently skipped.
  • --version reads the package __version__ (single source) instead of a third hardcoded copy.

Changed

  • Bump version 1.0.2 -> 1.0.3.
  • Tests: 59 -> 72 passed (gap identity/status/close/evidence regressions, CLI exit contract, freshness pinning, deep-graph, failure-ID uniqueness, ledger lock/corruption).