Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
71 commits
Select commit Hold shift + click to select a range
8da61f8
Spec: safe VBA/StarBasic macro scripting (M001-M012), draft for approval
claude Jul 16, 2026
32ff037
Macro Phase 1: preserve VBA payloads through OOXML round-trip
claude Jul 16, 2026
412b165
Macro Phase 1: preserve ODF Basic/Scripts libraries through round-trip
claude Jul 16, 2026
be668aa
Macro Phase 1: warn on macro payload dropped during conversion
claude Jul 16, 2026
258953d
Macro Phase 1: macros-present infobar + i18n, wired into loki-text ed…
claude Jul 16, 2026
96a3195
Macro Phase 1: fmt + clippy doc-markdown fixes, fidelity-status §12
claude Jul 16, 2026
c0890dd
Macro Phase 2: loki-basic crate skeleton + lexer
claude Jul 16, 2026
3612b99
Macro Phase 2: BASIC AST + recursive-descent parser
claude Jul 16, 2026
e16ce2e
Macro Phase 2: Variant value model (coercions + operators)
claude Jul 16, 2026
25ad673
Macro Phase 2: tree-walking interpreter + built-in stdlib
claude Jul 16, 2026
42caf4a
Macro Phase 2: conformance suite, fuzz targets, purity gate + CI
claude Jul 16, 2026
9b1fddf
Macro Phase 3: loki-vba — VBA source extraction (source only, never p…
claude Jul 16, 2026
ae7b86f
Macro Phase 3: read-only macro viewer + ODF Basic extraction
claude Jul 16, 2026
933f9e9
Macro Phase 3: loki-vba fuzz targets + panic-freedom tests; fidelity-…
claude Jul 16, 2026
85237ce
Macro Phase 4: loki-macro-host — trust store + capability broker
claude Jul 16, 2026
ed29b77
Macro Phase 4: anti-spoof macro dialogs (appthere-ui)
claude Jul 16, 2026
25240aa
Macro Phase 4: wire trust + capability UI into loki-text
claude Jul 16, 2026
861d827
Macro Phase 5a: loki-basic execution surface + "never" list
claude Jul 17, 2026
b73e684
Macro Phase 5b: ExecutionHost + MacroRuntime (explicit-run, batched)
claude Jul 17, 2026
1d245eb
Macro Phase 5: fidelity-status — execution engine landed
claude Jul 17, 2026
da79f0d
Macro Phase 5: in-app Tools ▸ Macros runner (one undo entry)
claude Jul 17, 2026
9e4b970
Macro Phase 5: interactive async runner — live prompts, dialogs, Stop
claude Jul 17, 2026
f746d7d
Macro Phase 6a: auto-run event gating + spreadsheet UDF core
claude Jul 19, 2026
8367d3b
Macro Phase 6b: wire token-gated auto-run into loki-text open path
claude Jul 19, 2026
46d537e
Macro Phase 6 tail: class modules in the loki-basic interpreter
claude Jul 19, 2026
e86e5a4
Macro Phase 6 tail: Find/Replace object model in loki-macro-host
claude Jul 19, 2026
87bba83
Macro Phase 6 tail: wire compute-only UDFs into loki-spreadsheet recalc
claude Jul 19, 2026
e45f1c6
Macro Phase 6 tail: model MACROBUTTON control-assigned macros
claude Jul 19, 2026
823a1bb
Macro Phase 6 tail: record class modules, Find, UDF wiring, MacroButt…
claude Jul 19, 2026
c67e8ff
Macro Phase 6 tail: tag MACROBUTTON runs with a clickable macro-link
claude Jul 19, 2026
8f58f87
Macro Phase 6 tail: in-page click-to-run for MACROBUTTON
claude Jul 19, 2026
5b39c38
Macro Phase 6 tail: record MACROBUTTON click-to-run in fidelity-status
claude Jul 19, 2026
fbd00f5
Macro Phase 6 tail: integration test for the MACROBUTTON click-to-run…
claude Jul 20, 2026
5ab0b08
Phase 7.1: MS-OVBA compressor (loki-vba) for source-only write-back
claude Jul 20, 2026
8d8372a
Phase 7.2: source-only VBA write-back (loki-vba write_source)
claude Jul 20, 2026
8a6da34
Phase 7.3: ODF Basic write-back + MacroPayload::replace_part
claude Jul 20, 2026
f2be24b
Phase 7.4: self-authored trust provenance + reauthor re-key
claude Jul 20, 2026
68f8a8f
Phase 7.5: probe — Blitz supports a real <textarea> for the macro editor
claude Jul 20, 2026
890f4c3
Phase 7.6: macro editor UI + source-only save flow
claude Jul 20, 2026
3bfe429
Phase 7.7: end-to-end macro-editor round-trip tests + verification ch…
claude Jul 20, 2026
f2bb045
Phase 7: address code-review findings on the macro-editor save flow
claude Jul 20, 2026
b227dbb
Phase 8 (Track A+B): design addenda for signatures + Network capability
claude Jul 21, 2026
bf5c675
Phase 8: ratify ADR-0014 & ADR-0015 (Accepted) with resolved decisions
claude Jul 21, 2026
37b60b8
Phase 8A.1: loki-macro-sig crate skeleton + SignatureVerdict model
claude Jul 21, 2026
14d0143
Phase 8A.2: VBA signature-stream location + PKCS#7 locator (loki-macr…
claude Jul 21, 2026
ce31289
Phase 8A.3: RustCrypto detached-CMS + X.509 macro-signature verifier
claude Jul 21, 2026
5e1bbea
Chore: record session tool-permission allowlist entries
claude Jul 21, 2026
ff79359
Phase 8A.4: ODF XMLDSig (macrosignatures.xml) verification
claude Jul 21, 2026
e24e576
Phase 8A.5: TrustedPublisherStore + verdict->trust upgrade
claude Jul 21, 2026
00c674b
Phase 8A.6: RFC-3161 timestamp handling (expired-cert rescue)
claude Jul 22, 2026
44ee91a
Phase 8A.7: trusted-publisher UI + signature-state view model
claude Jul 22, 2026
4886188
Phase 8A.8 (part 1): verify preserved signature on open + ODF sig pre…
claude Jul 22, 2026
8c01220
Phase 8A.8 (part 2): open-path wiring + editor signature warning
claude Jul 22, 2026
16be9bd
Phase 8A: address code-review findings on the signature path
claude Jul 22, 2026
e651269
Phase 8B.1: gate Network behind macro-net feature + origin-scoped grants
claude Jul 22, 2026
30d0028
Phase 8B.2: HttpResponse model + read-only Application.HttpGet shim
claude Jul 23, 2026
fcf08c3
Rebase onto updated main: reconcile gates and file ceilings
claude Jul 23, 2026
65b477a
Phase 8B.3: reqwest/rustls Network transport (bounded HTTPS GET)
claude Jul 23, 2026
0758f75
Phase 8B.4: streaming body cap + Stop-cancels the network fetch
claude Jul 23, 2026
fb04e40
Phase 8B.5: per-host network prompt + composition warning + i18n
claude Jul 24, 2026
9c09b5f
Phase 8B.6: always-refused network for non-interactive contexts
claude Jul 24, 2026
58fd475
Phase 7B: picker-mediated FileRead core (OpenFileForReading)
claude Jul 24, 2026
2655fc6
Phase 7B: picker-mediated FileWrite core (OpenFileForWriting)
claude Jul 24, 2026
bcb5e18
Phase 7B: wire the app-side file picker bridge (loki-text)
claude Jul 24, 2026
7500911
Track B: per-document network runtime enable-toggle
claude Jul 24, 2026
d225cce
Docs: corpus-gathering checklist for the Track A residual gates
claude Jul 24, 2026
59edb67
Phase 7B/8B: address code-review findings
claude Jul 24, 2026
caa4225
Fix clippy::map_unwrap_or in the signature expiry check (CI lint)
claude Jul 24, 2026
68e547f
Fix two more CI lint errors: expect_used in the parser, sort_by_key
claude Jul 24, 2026
54d31a8
Fix the last CI lint error: expect_used in the runner panel
claude Jul 24, 2026
40c9131
Pin the Rust toolchain so CI and local checks cannot drift
claude Jul 24, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 3 additions & 1 deletion .claude/settings.local.json
Original file line number Diff line number Diff line change
Expand Up @@ -103,7 +103,9 @@
"mcp__code-review-graph__list_graph_stats_tool",
"mcp__Claude_Code_Remote__send_later",
"mcp__code-review-graph__refactor_tool",
"mcp__code-review-graph__build_or_update_graph_tool"
"mcp__code-review-graph__build_or_update_graph_tool",
"Bash(sed -n '/\\\\[features\\\\]/,/\\\\[/p' /root/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/rcgen-0.13.2/Cargo.toml)",
"Read(//root/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/rcgen-0.13.2/src/**)"
]
},
"enableAllProjectMcpServers": true,
Expand Down
18 changes: 16 additions & 2 deletions .github/workflows/rust.yml
Original file line number Diff line number Diff line change
Expand Up @@ -17,8 +17,15 @@ jobs:
steps:
- uses: actions/checkout@v4
- name: Install toolchain (rustfmt + clippy)
uses: dtolnay/rust-toolchain@stable
# Pinned, NOT `@stable`. Clippy widens lints between releases, so a
# floating CI toolchain can fail on lints a developer's older local
# toolchain cannot report — a drift only discoverable by pushing.
# Keep this version in step with rust-toolchain.toml, which is what
# cargo actually honours; naming it here just avoids installing a
# second, unused toolchain.
uses: dtolnay/rust-toolchain@master
with:
toolchain: "1.97.1"
components: rustfmt, clippy
- uses: Swatinem/rust-cache@v2
- name: License-header gate (per-crate SPDX on line 1)
Expand All @@ -43,6 +50,10 @@ jobs:
- name: Dependency-direction gate (acyclic, downhill-only)
# Spec 01 audit A-13 / ADR-0009. Fails on any uphill internal edge.
run: python3 scripts/check-dependency-direction.py
- name: Macro-interpreter purity gate (no I/O deps; not server-linked)
# Macro spec §4.3/§10/§12: loki-basic links only its tiny allow-list and
# no server/headless crate links the interpreter.
run: python3 scripts/check-loki-basic-pure.py
- name: Viewport-dimension guard (no assumed screen sizes)
# Spec 01 audit A-1. No bare 1280-class literals in editor input/viewport paths.
run: python3 scripts/check-no-hardcoded-viewport-dims.py
Expand All @@ -59,7 +70,10 @@ jobs:
steps:
- uses: actions/checkout@v4
- name: Install toolchain
uses: dtolnay/rust-toolchain@stable
# Pinned — see the lint job and rust-toolchain.toml.
uses: dtolnay/rust-toolchain@master
with:
toolchain: "1.97.1"
- uses: Swatinem/rust-cache@v2
- name: Install conformance tools (xmllint, pdftoppm)
# Spec 02 gates, all running as ordinary cargo tests in this job:
Expand Down
25 changes: 22 additions & 3 deletions CLAUDE.md
Original file line number Diff line number Diff line change
Expand Up @@ -110,12 +110,31 @@ These conventions apply to all crates in the workspace.
- **Checkpoints:** Run `cargo check --workspace` after each logical unit of
work. Do not accumulate failures across steps.
- **Documentation Sync:** Any change to layout, rendering, or import/export properties must update the living status registry in [docs/fidelity-status.md](docs/fidelity-status.md).
- **Final pass:** `cargo fmt --all` and `cargo clippy --workspace -- -D warnings`
must both pass before any PR or commit is considered complete.
- **Final pass:** `cargo fmt --all --check` and the **exact CI clippy command**
(below) must both pass before any PR or commit is considered complete.

### Toolchain is pinned

[`rust-toolchain.toml`](rust-toolchain.toml) pins the workspace toolchain, and
CI installs that same version. Do **not** work around it by switching your local
toolchain: clippy widens lints between releases, so a floating toolchain lets CI
fail on lints a local run cannot report — a drift only discoverable by pushing.
Upgrade the pin deliberately (see the file's header for the procedure).

### Clippy compliance

The entire workspace must pass `cargo clippy --workspace -- -D warnings`.
The whole workspace must pass **the command CI runs** — note `--all-features`
and the two extra deny flags, which a plain `cargo clippy --workspace` does
*not* apply. Running anything narrower is how `.unwrap()`/`.expect()` in library
code reaches CI:

```
cargo clippy --workspace --all-features -- -D warnings \
-D clippy::unwrap_used -D clippy::expect_used
```

`clippy.toml` exempts `#[cfg(test)]` code from the panic-accessor lints, so the
gate targets shipped code only.

For pre-existing code in `loki-layout`, `loki-odf`, and `loki-ooxml` that
required structural changes beyond the scope of the cleanup pass, targeted
Expand Down
Loading
Loading