Skip to content

Release Panini 1.1.8 - #53

Merged
batunii merged 119 commits into
mainfrom
docs/ci-and-readme
Jun 13, 2026
Merged

Release Panini 1.1.8#53
batunii merged 119 commits into
mainfrom
docs/ci-and-readme

Conversation

@batunii

@batunii batunii commented Jun 13, 2026

Copy link
Copy Markdown
Collaborator

No description provided.

batunii and others added 30 commits May 31, 2026 22:09
This basically removed the null error.
- Remove 22 artifact files (test junk, research outputs, old .clan runs)
- Untrack .agents/, add .agents/ and .claude/ to .gitignore
- Move CLAN-SPEC.md, SEQUENCE-DIAGRAMS.md → spec/
- Move regulatory.md, strategy.md → research/
- Move clan-test-suite.clan → test-sandbox/
- Rename design_handoff_clan_logo/ → design/
- Add MPL 2.0 license header to all 26 code files
Two-part fix:
- Rust: skip <script> blocks in auto_inject_adf_ids so IDs are never
  baked into JS template literals (root cause of all cells in a column
  sharing the same data-adf-id and updating together)
- Bridge: add injectMissingIds() running every 300ms to assign IDs to
  JS-rendered elements at runtime, keeping dynamic tables editable;
  re-run activateEditing() each tick to wire up newly-tagged elements

Also adds tag boundary check to find_closing_tag so </th does not
match </thead> and corrupt table structure on header cell edits.
Fix column replication bug in CLAN Viewer
Two-part fix:
- Rust: skip <script> blocks in auto_inject_adf_ids so IDs are never
  baked into JS template literals (root cause of all cells in a column
  sharing the same data-adf-id and updating together)
- Bridge: add injectMissingIds() running every 300ms to assign IDs to
  JS-rendered elements at runtime, keeping dynamic tables editable;
  re-run activateEditing() each tick to wire up newly-tagged elements

Also adds tag boundary check to find_closing_tag so </th does not
match </thead> and corrupt table structure on header cell edits.
- Fix highlight not clearing on second edit-mode deactivation: originals
  were captured after blue styles applied; now saved before any change
- Add DOM snapshot endpoint (/snapshot): bridge captures fully-rendered
  HTML (including JS-generated rows) 600ms after page load and writes it
  as human/index.html, giving all dynamic elements stable IDs on reopen
- Add strip_scripts() to clean bridge/data scripts from snapshot
- Revert iframe reload after patch save — reloading was overwriting the
  user's edit with the unpatched template for JS-rendered documents
- Remove redundant double-save from handlePatch (protocol handler saves)
Updated TODO list with completed tasks and added new items for app packaging, repository hygiene, and token optimizations.
- app/package.json: rename name app -> clan-viewer (#32)
- app/package.json: sync version 0.0.0 -> 1.0.0 (#33)
- app/package.json: add engines node >=20 (#8)
- app/.nvmrc: pin Node 20 (#7)
- remove dead dependency ammonia from sdk + workspace (#18)
- Cargo.toml: add description/keywords/categories to [workspace.package] (#26)
- clan-sdk, clan-cli: inherit keywords/categories from workspace (#26)
- promote lol_html to [workspace.dependencies] (#28)
- add .github/ISSUE_TEMPLATE/bug_report.md (#36)
- add .github/ISSUE_TEMPLATE/feature_request.md (#37)
- add .github/PULL_REQUEST_TEMPLATE.md (#38)
- clan-cli: agent-help reports env!(CARGO_PKG_VERSION) not hardcoded v0.13 (#17)
- pack::strip_scripts: lowercase once, search offsets — no per-iteration alloc (#13)
- pack::strip_on_handlers: copy quoted attr values verbatim so '>' inside a
  quoted value can't bypass on* handler stripping; +6 regression tests (#16)
- add crates/clan-sdk/README.md for crates.io (#27)
- add CHANGELOG.md with v1.0.0 entry (#35)
…#11, #12)

- has_entry now checks the ZIP central directory only, never decompressing
  the entry (regression test corrupts entry data and asserts existence
  still answers true while reads fail CRC).
- New ClanFile::read_all_entries() reads every entry in one ZipArchive
  pass; pack(), repack_with_entry() and apply_patch_and_repack() now use
  it instead of N+1 per-entry archive instantiations.
… patch-html misses (#14, #15, #21)

- patch_decision now swaps only agent/decision-chain.yaml via
  repack_with_entry — no full schema validation just to append, and no
  spurious fields_changed listing every data key.
- pack_html context handoff is passed into pack() as an extra entry via
  PackOptions.extra_entries, so the archive is built once instead of
  being cloned and rebuilt three times.
- apply_html_patch now counts selector matches and errors when nothing
  matched (or the selector fails to compile) instead of silently
  returning the document unchanged.

All three land with regression tests.
, #10, #19, #20)

- clan://patch handling extracted into handle_patch_request, which saves
  exactly once and returns the informational clan-patch-saved payload;
  regression test counts saves per request. The React listener stays a
  no-op on that event.
- open_clan no longer re-reads the file after ClanFile::open; the
  redundant LoadedClan.raw_bytes field is gone (the ClanFile already
  owns the bytes), removing an extra full-archive clone on every save.
- resolve_bindings is byte-indexed (str::find) — no Vec<char> ~4x
  allocation over the document.
- auto_inject_adf_ids is a single-pass scanner over all ten editable tag
  types instead of ten full document scans; ids remain stable, script
  blocks stay untouched, and ASCII lowercasing keeps offsets safe.
- do_snapshot uses read_all_entries (one ZipArchive pass).
)

All write commands now share the --output flag. The positional output
path still works with a deprecation warning; passing both forms is
rejected. Adds end-to-end CLI tests (create/pack-html/patch-html),
including coverage for the new loud patch-html selector failure (#21).
- Output schema is injected as TOON when — and only when — the encoding
  is provably lossless: json_to_toon_verified() encodes, decodes with a
  strict verification parser, and compares against the original JSON;
  any ambiguity (numeric-looking strings, multiline text, heterogeneous
  object arrays, separator-bearing keys) falls back to raw JSON. The
  validation contract (AgentContext.output_schema_json) stays raw JSON
  byte-for-byte. Covered by round-trip, fallback, determinism, and
  jsonschema validation-equivalence tests.
- New InjectOptions.skip_guide + 'clan read agent --skip-guide' replaces
  the ~800-token guide body with a one-line note carrying the guide's
  sha256 digest, so sequenced agents skip re-reading while still
  detecting version changes.
- Decision-chain TOON injection prunes fields_changed noise: empty
  lists always, non-empty lists for entries older than the 5 newest.
  The stored decision-chain.yaml is untouched (asserted byte-for-byte).
EESH-843 and others added 28 commits June 12, 2026 17:17
- TestResult.clan: full-suite run (14 tests) with corrected H-H1 (rep4
  5/8 fidelity + false-provenance finding) and H-H2 blocked (crossover
  unproven; resume-on-dirty-state polluted the measure).
- run-claim-specific.workflow.js: B-FORKMERGE/B-UNGUIDED/B-META/L-H3.
- heavy workflow: measure step uses node measure-heavy.mjs (no pwsh on mac).
- Add Highlights block + Campaign 3 (full TESTBOOK heavy run).
- Feature fork/merge, metamorphosis, teachability, cold-resume wins.
- Flag synthesis-hop ratio NOT ROBUST (0.487x -H -> 1.047x -I).
- Add provenance-integrity finding (rep4 5/8 + false-provenance) and
  non-idempotent-append caveat; crossover unproven even at heavy scale.
- Test counts 165 -> 186 (banner, scorecard, Status).
All test-sandbox receipts, artifacts, and run outputs from Campaign 3
(5 reps × 2 arms, ~258 real subagents).
The mac/linux release jobs failed compiling tauri-utils 2.9.2 with E0119
(conflicting From<HourBase> impls) because, with no committed lockfile, CI
re-resolved and pulled the freshly published `time` 0.3.48, which trips a
rustc coherence bug in tauri-utils. Reproduced locally: time 0.3.48 fails,
0.3.47 builds (same rustc 1.96.0).

Commit Cargo.lock so every platform builds the exact, verified dependency
set (time 0.3.47, tauri 2.11.2) — the same lock the working Windows MSI was
built from. Lockfiles are ignored for crates.io consumers of clan-sdk, so
this only affects local/CI builds of this workspace.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Rewrites the README around the core truth: CLAN's properties (provenance,
parallel safety, human view, cold resume) are structural — delivered by the
format's design, not by a runtime. Adds the 5-things handoff hook, explicit
model/framework/environment-agnostic positioning, and a "design not runtime"
section. Scorecard and honest losses unchanged.
Adds "What everything else leaves out" — three paragraphs that implicitly
position CLAN against orchestration frameworks, agent protocols, and token
optimization tools without naming any of them. Followed by a comparison table
across 11 dimensions. No competitor is called out by name; the gaps describe
themselves.
Tauri serves custom protocols as <scheme>://localhost on macOS, iOS and
Linux, and only as http://<scheme>.localhost on Windows (WebView2). The
platform check keyed on userAgent 'Mac', so Linux fell through to the
Windows form and the document <iframe> pointed at a non-existent
http://clan.localhost host — leaving the main pane blank while the React
sidebar (no custom scheme) rendered fine. Gate on 'Windows' instead, in
both the iframe src and the injected EDIT_BRIDGE script.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
The released AppImage bundles an older WebKitGTK whose DMABUF /
accelerated-compositing path fails on modern Mesa/Wayland (blank web
content, and a libwayland mismatch can abort with EGL_BAD_PARAMETER
before the window appears; the AppImage build also strips its bundled
libwayland). Force the software path on Linux unless the user overrides
it. No-op on a current system WebKitGTK.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…path

clan-app is a member of the root cargo workspace, so tauri writes the
AppImage to <repo>/target/release/bundle/appimage, not
app/src-tauri/target. The strip step looked in the latter, found nothing,
and exit-0'd — silently shipping unpatched AppImages (v1.1.6/v1.1.7 still
bundled libwayland and crashed with EGL_BAD_PARAMETER). Locate the
AppImage wherever it lands and fail the job if it is missing.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
fix(ci): strip libwayland from the AppImage at the correct workspace …
The conformance harness (test-sandbox/pipeline/conformance.mjs) is invoked
by .github/workflows/ci.yml; the 'Removed the Tests' commit deleted it
along with the benchmark artifacts, which would break the CI conformance
job. The script is self-contained (Node built-ins + the clan binary, temp
workdir), so only this one file is needed — not the benchmark dump. Verified
locally: 26/26 passed, 0 hard failures.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@batunii
batunii merged commit b2ea895 into main Jun 13, 2026
3 checks passed
saieeshward pushed a commit that referenced this pull request Jun 13, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants