Skip to content

Releases: rapiddweller/archkeel

ArchKeel 2.0.0 — ArchQ Explorer and exact permissions

Choose a tag to compare

@ake2l ake2l released this 11 Oct 22:24
aa159e5

Architecture checks for coding agents.

  • ArchQ Explorer replaces the previous report navigation. The report opens
    with the new Explorer embedded. Fullscreen expands the same view; Restore
    preserves selection and zoom. Offline module and member pages share its controls.
  • Find and explore recorded evidence. Search components, modules and rules;
    browse sortable Objects, inspect Health check, or highlight authorship, layer
    and evidence perspectives. Pointer zoom, keyboard shortcuts and SVG, Mermaid
    and link export support review. As-Is, Target and Diff retain the same recorded
    verdicts, UNKNOWNs and source links. No new runtime dependency is required.
    See the report guide and
    Explorer work.
  • Exact native boundary permissions. Opt-in contract schemas 3.0–3.3
    add source-and-body-bound alias permissions, heterogeneous typed-map unions
    with exact key-alias proof, directly written literal map arms, and explicit
    bare-map permissions at exact DTO fields or registry parameters. Separate
    depth selectors accept only the supported native object leaves. Metadata
    fields, sibling findings and UNKNOWNs remain independently checked.
    See boundary rules.
  • Compatibility stays explicit. Supported 2.1–2.3 contract schemas and
    serialization without the new bindings remain unchanged. Existing contracts
    are not rewritten; older readers reject unsupported opt-in schemas.
  • Unproven alias bodies stay UNKNOWN. They do not justify body-dependent findings or
    grants. Proven literal findings remain; ordinary permissions cannot bypass
    uncertain alias proof by changing union order.
  • Explicit Callable signatures. Proven stdlib argument lists and results use
    the existing boundary checks. SourceFacts 3.0.0 carries neutral TypeList
    facts; versions 1/2 retain exact round trips and reject that new shape.
  • Direct stdlib TypedDict fields. Proven declarations check every key,
    including underscore keys. Broad fields fail; unproven providers remain UNKNOWN.
    Public model fields also retain proven type-name reach during validation.
  • Full reports retain every recorded UNKNOWN. report --only architecture --full --json exports complete original records, including IDs, details and
    evidence references, even with a component filter. Full architecture output uses schema
    2.0.0, with command-result schema 7.0.0. Compact architecture output
    remains 1.0.0; published legacy 6.0.0 result schemas are unchanged.
    Empty and unavailable evidence remain distinct. See CLI reference.
  • Static proof fixes. Supported quoted builtin annotations retain their
    original positions; proven stdlib overload re-exports expose all declared
    signatures; property setters retain their own local binding scope. Safe
    annotation carriers and nullable DTO paths preserve supported alias and field
    proof. Unsupported or ambiguous forms retain UNKNOWN.
  • Review the exact permission. ArchQ Explorer distinguishes declared and applied
    permissions and links evidence to members. Reset and fit controls are labelled
    consistently; rejected offline routes retain the complete URL until explicit
    recovery.

Accepted native values remain opaque. These checks certify neither serialization,
materialization, type closure nor runtime correctness. Product listings use
ArchKeel and “Architecture checks for coding agents”.

ArchKeel 1.1.2 — Bind native allowances to exact signatures

Choose a tag to compare

@ake2l ake2l released this 10 Oct 21:41
aaba43b
  • Nested map allowances stay bound to the root annotation. An Annotated
    wrapper cannot reuse the inner-map or native-value permission for an unwrapped
    Mapping[str, list[dict[str, object]]] signature. Outer-map permission remains
    separate; aliases, DTO fields, unions and unproven bindings do not qualify.
    See AD-217.
  • JSON Schema agrees with the parser. A selector with mapping_depth
    requires an empty field_path. Omitting field_path still means the direct
    signature; a nonempty DTO path is rejected.
  • Exact native Iterable elements. Direct and proven facade signatures can
    permit one object element in Iterable[object], optionally unioned with
    None. Match the callable, parameter or return position, complete annotation,
    empty field_path and container_depth: 1. The typing or collections.abc
    origin and builtin object must be proven. Aliases, DTO fields, wrappers,
    other collections, additional union arms and repeated opaque leaves do not
    qualify. See AD-218.

Accepted native values remain opaque. These allowances prove neither
serialization nor materialization nor type closure. Contract and result schema
versions are unchanged.
Open gaps remain for contained maps in exact named aliases,
heterogeneous typed-map unions,
static overload re-exports,
quoted builtin annotations
and report-view traceability.

Known report-navigation issue: #447
records an ownership-invalid component/module route that becomes unscoped after
URL normalization and reload. Reproduced on this exact release source; evaluator
results are unchanged. The fix is separate from 1.1.2.

ArchKeel 1.1.1 — Exact native mapping allowances

Choose a tag to compare

@ake2l ake2l released this 10 Oct 07:10
e6ae8b4

ArchKeel 1.1.1 adds exact allowances for native mapping alternatives and for the inner map and value in a proven Mapping[str, list[dict[str, object]]] boundary. Outer map, inner map and native value remain separate decisions; ambiguous or unproven shapes remain denied.

The report timing guard now allows 120 seconds for measured runner variation. Successful package publication starts full Main verification before refreshing the report gallery, provided the tag still matches Main.

See release notes and AD-217.

ArchKeel 1.1.0 — SDK-free Dart UML and project-scale reports

Choose a tag to compare

@ake2l ake2l released this 09 Oct 23:33
ccc9be1

Inspect Dart declarations and UML without a Dart SDK, and explore larger
architecture reports through components, modules and members.

Highlights

  • SDK-free Dart UML. Observe classes, mixins, enums, members, signatures and bounded
    source relationships through the Python installation. A pinned Tree-sitter grammar
    replaces the SDK dependency; missing resolution and dynamic behavior remain UNKNOWN.
  • Complete-project demos. Explore pinned Flutter Compass (111 Dart files), Python
    RealWorld (72 modules) and Nest RealWorld (41 prepared TypeScript inputs). Their Targets
    define responsibilities, nested components, module relationships and principal UML
    member scopes. Source-only variants demonstrate violations and analysis limits.
  • Readable architecture maps. Relationship-driven ELK layouts arrange components and
    modules hierarchically. Nested ownership groups and colors help navigation; closing
    Details releases the diagram space. Target navigation and asynchronous detail layout
    retain the selected scope across views.
  • More precise evidence. TypeScript resolves supported package-export cases and retains
    uncertainty for incomplete or ambiguous source facts. Native DTO value allowances can
    select an exact field_path and container_depth without permitting other positions.
  • Safer amendment output. Failed or colliding amendment destinations retain widening
    findings. Baseline and graph outputs cannot silently overwrite amendment evidence.
  • Less repository churn. Generated self-observation snapshots no longer require
    committed updates. Normal CI uses focused checks; exhaustive language, platform and
    report verification runs nightly and before release publication. Report artifacts expire
    after one day, with older retained report artifacts pruned by the cleanup workflow.

Upgrade from 1.0.0

uv tool upgrade archkeel

Python, TypeScript and Dart analysis use the installed Python package. Dart no longer
needs an SDK, DART_EXECUTABLE or archkeel-dart-setup. Scans do not download packages
or modify the scanned project. Building or running a Flutter app still requires Flutter.

The Dart migration intentionally drops the legacy archkeel-dart-directives producer.
Re-observe both revisions with 1.1.0 before comparing Dart snapshots. This is an explicit
exception to the 1.x compatibility policy.
Schemas now accept Dart mixin entities and mixes_in relationships, while retaining
their existing version identifiers. Update strict enum consumers and pin the CLI,
collectors and bundled schemas together; do not mix the old and new Dart evidence.

Limits

Static analysis does not prove runtime dispatch, live object identity or complete call
coverage. Compass still has source-resolution gaps; Python RealWorld retains incomplete
class and inheritance evidence; Nest retains unresolved dynamic imports and framework
semantics. The demos show these limits, not compiler parity or verified Flutter execution.
See demo evidence and known limits.

ArchKeel 1.0.0 — Review architecture with evidence

Choose a tag to compare

@ake2l ake2l released this 07 Oct 16:18
05c56a1

Review observed code, your declared architecture and their differences in one report.
Follow a violation to its rule and source evidence, or inspect what is still UNKNOWN.
A completed scan can still leave rules undecided; filtering keeps the overall verdict visible.

What you can do in 1.0

  • Explore from overview to source. Navigate components, modules and UML in As-Is,
    Target and Diff. The dependency balance shows declared, used, unused and undeclared edges.
    Fullscreen gives the Architecture Map room; pan, zoom and Fit support exploration.
    Large UML views start with a list; Python member views retain enum values, static fields
    and annotation references. Target references bind across nested contracts (#355, #373).
  • Give agents smaller, focused answers. report --only architecture omits duplicated
    source inventory. Scope filters and saved --input queries retrieve relevant findings
    while preserving global verdicts, coverage and UNKNOWNs. --full retrieves complete details.
  • Get actionable validation results. Findings include recorded paths and lines.
    Coded diagnostics explain policy widenings, missing responsibilities and absent,
    malformed or incompatible Python requirements. Aggregate findings do not invent a location.
  • Analyze TypeScript without Node. The Python package reads imports, lexical classes,
    members, signatures and typed relationships. The separate Node collector is removed.
    This is static evidence, not compiler type checking; unsupported resolution stays UNKNOWN (#382).
  • Start with observed crossings. init groups open decisions and reports exact totals
    in compact output. init --full returns every pair. The draft still needs your decisions.
  • Share an offline report or open a demo. Detail pages share one evidence snapshot and
    assets. GitHub Pages publishes the current Main report and 24 Python, Dart and TypeScript
    demos, including PASS, FAIL and UNKNOWN examples.

Fixes since 0.9.0

Issue numbers refer to the issue tracker.

Issues What changes for you
#335 Forbidden observed imports remain visible in Diff, including nested contracts and finding evidence.
#336 Target shows declared intent. Observed status, findings and analysis limits belong to As-Is and Diff.
#382 TypeScript keeps inherited TSConfig output paths and rejects malformed options. UTF-8 output and analyzer provenance are portable across Windows checkouts.
#338 Providers reached through proven ancestor re-exports count as used. Ambiguous routes stay UNKNOWN.
#342 Nullable allowances match the complete annotation. Incomplete union permissions and ambiguous declarations no longer allow the whole field.
#353 Scoped opacity allowances cover exact native leaves inside map/list returns. Wrong-depth and unrelated positions stay rejected; opacity does not prove type closure.
#370, #374 FAIL exposes scoped findings. Matrix cells use evaluator evidence; skipped or unevaluated imports cannot produce PASS.
#358, #372, #392 Compact agent output retains excluded responsibilities, local findings, global verdicts and baseline comparisons. Omitted rows are marked.
#314, #395 Filtered report JSON and validation diagnostics retain recorded source paths and lines.
#390, #391, #398 Python requirement states, empty architect-owned responsibilities and policy widenings have distinct diagnostics. Rejected widening stays exit 1; invalid input stays exit 2.
#313, #318, #388, #389 Setup remedies and baseline guidance name the next action, including whole-pair prohibitions that cannot be baselined.
#349, #393, #394, #397 Counts distinguish contract violations from the current level. UNKNOWN links to evidence and next actions; component size remains a review question.
#319, #375, #376, #403 Navigation, mobile paths, labels and themes are corrected. Architecture Map fills fullscreen and supports background panning, zoom and Fit.
#363, #371 Offline detail pages stop duplicating full evidence. Repeated analysis work is reduced; runtime and size guards remain enforced.
#315, #316, #343, #350 Policy runs before expensive checks. Self-scan, import-schema and collector timeout tests are corrected; wire-format consumers are updated (PR #404).
#317, #377, #396 Documentation, dark screenshots and the first runnable forbidden-import example match the workflow.

Upgrade from 0.9.0

  • Remove collector_argv = ["archkeel-typescript"] from TypeScript configuration.
    Observe both revisions again: the native frontend has a different producer/runtime identity,
    and old/new observations are not comparable (incomparable_runtime).
  • Pin collectors, CLI and schemas together. Fresh SourceFacts/protocol and ArchitectureIR use
    2.0.0, Core observations 0.74.0, Delta 2.0.0 and command-result 6.0.0.
    New readers retain supported legacy packets; old strict consumers must upgrade before
    reading the new runtime state. Package and wire version numbers are independent.
  • Code consuming init decisions must inspect open_decisions_complete; an omitted pair is
    still undecided. Use init --full for exhaustive output. validate still returns the full list.
  • Review newly rejected incomplete nullable permissions and missing responsibilities.
    Do not broaden contracts or baseline budgets merely to restore a passing command.

Published schema changes from 0.9.0:

Format 0.9.0 1.0.0
Architecture contract 2.2.0 2.3.0; 2.1/2.2 remain readable, layers require 2.3
Architecture graph / report 1.0.0 1.2.0
ArchitectureIR 1.3.0 2.0.0
SourceFacts / collector protocol 1.0.0 2.0.0
Delta 1.4.0 2.0.0
Command result 3.0.0 6.0.0
Architecture projection / focused command / member inventory Not published 1.0.0

The documented CLI, configuration, external Python API and wire interfaces are stable for 1.x.
Read the compatibility policy before upgrading integrations.

Explicit limits

Stable means the documented interface, not complete language analysis. Missing or ambiguous
proof stays UNKNOWN. Layers assess declared permissions, not runtime behavior or structural
Protocol conformance. Dart inner UML facts (#347), complete independently authored own Target
intent (#340), and full per-language demo/acceptance coverage (#339/#348) remain open.
TypeScript package-based extends, exports/typesVersions and project references remain unsupported;
see the TypeScript evidence and limits.
Compact validation of an existing draft is separate follow-up work (#402).
Hints remain provisional (#384); structural port checks need a concrete use case (#356).
Human review effectiveness and public plugin-directory acceptance are not established (#236).

ArchKeel 0.9.0 — Explore architecture, keep the evidence

Choose a tag to compare

@ake2l ake2l released this 04 Oct 22:15
b6636e8
  • One offline explorer shows observed code, declared Target and Diff, with source
    locations, class members, relationship filters and local navigation. Filters retain
    the full verdict and evidence.
  • Observed and Target graphs use one validated report format. Target stays declaration-derived;
    missing or ambiguous evidence remains visible.
  • Python, Dart and TypeScript collectors use the source-facts process port; Core validates
    evidence and owns architecture verdicts.
  • TypeScript checks import-graph boundaries, cycles, ownership and external packages.
    Its catalog and revision demo keep unavailable
    symbol, call, typing and private-use evidence explicit.
  • Unmeasured call totals are null; measured Python zero remains zero. Reports retain n/a.
  • Proven inherited Python getter/setter signatures are checked in their defining scopes.
    Missing proof, custom descriptors and mutations remain UNKNOWN (#290).
  • Unproven owned-property signatures retain individual source evidence and UNKNOWN (#306).
  • Validation retains observed verdicts when diagnostics reject a contract. Reports show
    the same declared-rule verdict; incomplete ownership names the module and remedy.
  • The main PR gate compares contracts and baseline policy with its pinned base before its tests.
    Amendment v2 binds the policy actually written; stale records fail closed.
  • Construct rules use validated identities; report scope text describes selected roots.

Architecture contracts add UML intent in 2.2.0; graph, comparison and report formats use 1.0.0.
Command-result uses 3.0.0, accepted-lock uses 2.0.0 and fresh Delta uses 1.4.0. Pin CLI
and schema together: older consumers cannot read fresh null totals. New readers retain legacy
formats; re-observe evidence when its analyzer profile is incomparable
(compatibility).

TypeScript requires a separate adapter 1.0.0 build and a supported Node runtime;
the Python distribution does not bundle it. This is import-graph analysis, with no
full type/call analysis or cross-repository runtime observation claim.

Archkeel 0.8.6 — Local inherited methods

Choose a tag to compare

@ake2l ake2l released this 03 Oct 12:41
a0188d3

Check proven local inherited methods and overrides. Unproven creation, mutation and multiple inheritance remain UNKNOWN.

  • Keep report navigation and tables usable on small screens.
  • Show proposed interfaces in Target details.
  • Measure rule decisions from scan evidence.
  • Verify GitHub checks against the original pull-request head.
  • Add compact plugin installation and improve listing links and contrast.

Unchanged CE replay preserves all 80 violations and 134 counted UNKNOWNs. This release does not establish CE boundary acceptance.

Install: uv tool install --upgrade archkeel==0.8.6

Archkeel 0.8.5 — Architecture checks for coding agents

Choose a tag to compare

@ake2l ake2l released this 02 Oct 14:54
d8d6d8e

Architecture checks and reports are easier to use with coding agents.

  • Shorter README and onboarding; native Codex and Claude Code plugins share one skill.
  • Findings and UNKNOWNs lead the report. Target names stay readable; rule details remain reachable.
  • Exact boundary permissions preserve neighboring restrictions, including opaque map values. Proven datetime fields and inherited public fields are checked correctly.
  • JSON command results have a published schema. GitHub publication reports retain UNKNOWN when host evidence is incomplete.

Human review pilot and complete GitHub publication-order proof remain open.

Archkeel 0.8.4 — Exact module ownership

Choose a tag to compare

@ake2l ake2l released this 02 Oct 02:39
66aea56

What changed

  • exact_modules assigns one module without claiming its children. A registry can now own its package entry point without owning every task. Recursive packages is unchanged. See AD-128.
  • Every exact module can be opened in Target. Missing responsibilities agree across the diagram, Details and summary. Declared file targets keep their paths and sentences.
  • A Python package entry point with imports or a docstring still needs an owner. Only files with no Python statements are exempt (#232).
  • Dotted filenames no longer make a full Python scan look incomplete. Partial scans remain UNKNOWN (#233).

Evidence and limits

LOCAL VERIFIED: independent QA and review; 2,332 tests passed (128 skipped), 138 native browser tests passed without skips, build and wheel/source-package smokes passed. No baseline or dependency was widened. Self-validation retains 40 UNKNOWN positions; zero violations is not complete proof.

On the frozen CE experiment, all 50 task-module identities remain. Only the initializer changes owner. Two rule assessments move UNKNOWN → PASS; 106 violations and 28 other UNKNOWN assessments remain. This is ownership proof, not CE runtime or refactoring completion.

The simpler README, current screenshots and explorer wording shipped in 0.8.3 and remain in this release.

Download the synthetic examples below and open positive.report.html, sibling.report.html or ambiguous.report.html. They show correct ownership, a forbidden sibling import, and competing owners—not DATAMIMIC data.

CI-ONLY VERIFICATION: PR checks, merged-main checks and PyPI publication passed. Tag target: 66aea560.

PACKAGE VERIFIED: fresh isolated archkeel==0.8.4 install and CLI smoke passed. Wheel and source-package hashes match PyPI; installed renderer files match the reviewed source. Independent native Linux acceptance passed 59 exact-ownership/Target tests without skips and all three catalog cases. Fresh positive, forbidden-sibling and ambiguous reports retain their expected results. The source package includes the shorter README (2,773 words).

Archkeel 0.8.3 — simpler README and report text

Choose a tag to compare

@ake2l ake2l released this 01 Oct 18:35
d11d9e7

Archkeel 0.8.3

  • Shorter README: about 46% fewer words; protocol details remain linked.
  • Plain report labels: Component dependencies, Import locations, Complete scan inventory.
  • Current report screenshots, including Target and deep navigation.
  • Same checks and evidence. Local replay does not authenticate host records; a non-empty change declaration does not reject every undeclared change.

Download the synthetic report tour below and open tour.report.html. It contains deliberate violations and UNKNOWN evidence, not DATAMIMIC data.

LOCAL VERIFIED: full Linux gate (2,263 passed, 125 skipped), native Chromium acceptance (133 passed), demo replays and isolated wheel/sdist installs. Independent Luna QA and Astra review.

CI-ONLY VERIFICATION: PR gate, browser and Mermaid checks passed. Self-validation still records zero violations and 40 counted UNKNOWN positions; this is not architectural PASS.

Merged in PR #231. Tag points to d11d9e7831cb599b33afcdb42a253a0ecbf6f89c.

Official PyPI publication and main CI passed. Published version: archkeel 0.8.3.

Fresh official-PyPI install and installed-package smoke test passed. The report-code hash matches the reviewed source, and the published PyPI README contains the shorter text and technical limits.