A folder with no signer name or key verifies Markdown and saves it unsigned #8

Merged
temeddix merged 1 commits from verify-only-mode into main 2026-09-26 02:27:50 +00:00
Owner

A connection with neither a signer name nor a signing key now opens as a verify-only folder, for someone with no wallet who only checks files others signed: reads still carry the verdict, and a Markdown save stores the file unsigned, byte for byte except the verdict line, so an existing signature stays and an edit honestly reads as Tampered. Giving only one of the two still refuses the connection. Version 0.1.1, since 0.1.0 is already in the store.

Unit tests cover the name and key pairing and the byte-exact unsigned save; the app run against the store follows in a comment.

Evidence Screenshot
Unit tests

🤖 Generated with Claude Code

A connection with neither a signer name nor a signing key now opens as a verify-only folder, for someone with no wallet who only checks files others signed: reads still carry the verdict, and a Markdown save stores the file unsigned, byte for byte except the verdict line, so an existing signature stays and an edit honestly reads as Tampered. Giving only one of the two still refuses the connection. Version 0.1.1, since 0.1.0 is already in the store. Unit tests cover the name and key pairing and the byte-exact unsigned save; the app run against the store follows in a comment. | Evidence | Screenshot | | --- | --- | | Unit tests | ![](https://git.capsulizers.com/attachments/9c4fdbb5-1201-4613-8b7c-80de13b93168) | 🤖 Generated with [Claude Code](https://claude.com/claude-code)
temeddix added 1 commit 2026-09-26 02:19:19 +00:00
Author
Owner

@bot please review the head; with neither ensName nor privateKey the connection is verify-only: reads still add the verdict line, and a Markdown save strips only that line and stores every other byte unsigned, keeping any existing signer and signature. One of the two alone must still be InvalidInput. Also check the 0.1.1 bump in manifest, Cargo.toml and the lock.

@bot please review the head; with neither ensName nor privateKey the connection is verify-only: reads still add the verdict line, and a Markdown save strips only that line and stores every other byte unsigned, keeping any existing signer and signature. One of the two alone must still be InvalidInput. Also check the 0.1.1 bump in manifest, Cargo.toml and the lock.
bot approved these changes 2026-09-26 02:24:28 +00:00
bot left a comment
Owner

✅ Approved
Verify-only operation, unsigned saves, validation, and the 0.1.1 release metadata meet the requested requirements.

Strengths

Requirement coverage
  • Both absent values create a verify-only session; either value alone returns InvalidInput.
  • Reads remain verification-decorated through the unchanged checker path.
  • Verify-only saves remove the verdict and retain all remaining Markdown bytes, including existing signer and signature fields.
  • manifest.json, Cargo.toml, and Cargo.lock consistently use 0.1.1.

Issues

None

No Critical, Important, or Minor findings.

Declined to judge

None

No behavior was set aside as outside the requirements.

Checks

Passed
  • cargo fmt --check
  • cargo test --all-targets — 26 passed
  • cargo clippy --all-targets -- -D warnings
  • python3 -m json.tool manifest.json
  • git diff --check 6677e8a..46f2d1f

Profile: codex · gpt-5.6-terra

✅ Approved Verify-only operation, unsigned saves, validation, and the 0.1.1 release metadata meet the requested requirements. ## Strengths <details> <summary>Requirement coverage</summary> - Both absent values create a verify-only session; either value alone returns `InvalidInput`. - Reads remain verification-decorated through the unchanged checker path. - Verify-only saves remove the verdict and retain all remaining Markdown bytes, including existing signer and signature fields. - `manifest.json`, `Cargo.toml`, and `Cargo.lock` consistently use 0.1.1. </details> ## Issues <details> <summary>None</summary> No Critical, Important, or Minor findings. </details> ## Declined to judge <details> <summary>None</summary> No behavior was set aside as outside the requirements. </details> ## Checks <details> <summary>Passed</summary> - `cargo fmt --check` - `cargo test --all-targets` — 26 passed - `cargo clippy --all-targets -- -D warnings` - `python3 -m json.tool manifest.json` - `git diff --check 6677e8a..46f2d1f` </details> > Profile: `codex` · `gpt-5.6-terra`
temeddix merged commit 5e77f3ca67 into main 2026-09-26 02:27:50 +00:00
temeddix deleted branch verify-only-mode 2026-09-26 02:27:50 +00:00
Author
Owner

Checked in an unmodified nightly Memona against the real store: 0.1.1 is live at https://plugin.memona.io/en/plugins/memona/signature and the app updated to it. A connection with no signer name and no key, trusted parent mdsig91205.eth, over a local WsgiDAV, connects; the file signed as bob.mdsig91205.eth reads Verified, a saved edit goes through with only that line changed on the server, and it then reads Tampered. The nightly has no way yet to open a connection's files in the editor, so the reads and the save went through the app's own plugin file endpoint.

Before (0.1.0) After (0.1.1)
Signer name and key required Both optional, verify-only when empty
Saving without them is refused The connection saves and connects
Evidence Screenshot
Updated from the store
Verified, save, Tampered
Checked in an unmodified nightly Memona against the real store: 0.1.1 is live at https://plugin.memona.io/en/plugins/memona/signature and the app updated to it. A connection with no signer name and no key, trusted parent mdsig91205.eth, over a local WsgiDAV, connects; the file signed as bob.mdsig91205.eth reads Verified, a saved edit goes through with only that line changed on the server, and it then reads Tampered. The nightly has no way yet to open a connection's files in the editor, so the reads and the save went through the app's own plugin file endpoint. | Before (0.1.0) | After (0.1.1) | | --- | --- | | ![](https://git.capsulizers.com/attachments/2c32b240-1b3a-41b4-ab79-8dbf6283fde4) | ![](https://git.capsulizers.com/attachments/d80bef70-510c-4183-a9c7-e32b76cb8cc1) | | Signer name and key required | Both optional, verify-only when empty | | ![](https://git.capsulizers.com/attachments/1fab2df9-b625-489f-870d-74ac667466e1) | ![](https://git.capsulizers.com/attachments/10514cc2-540d-4bcd-a276-80e775948839) | | Saving without them is refused | The connection saves and connects | | Evidence | Screenshot | | --- | --- | | Updated from the store | ![](https://git.capsulizers.com/attachments/93a111e5-044b-4cfa-b761-80b006866f97) | | Verified, save, Tampered | ![](https://git.capsulizers.com/attachments/0c7c5d03-93e4-414f-8069-a6cf13c5e147) |
Sign in to join this conversation.
No Reviewers
No Label
2 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: commons/memona-plugin-signature#8