proofpress 0.1.0 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +87 -215
- package/assets/logo-on-dark.svg +6 -0
- package/assets/logo-on-light.svg +6 -0
- package/package.json +6 -2
- package/proofpress.py +679 -68
- package/skills/README.md +34 -71
- package/skills/claude-code/proofpress/SKILL.md +14 -18
- package/skills/codex/AGENTS-snippet.md +14 -18
- package/skills/cursor/proofpress/SKILL.md +14 -18
- package/skills/pi/proofpress-skill.md +14 -18
package/skills/README.md
CHANGED
|
@@ -2,109 +2,72 @@
|
|
|
2
2
|
# Proofpress harness adapters
|
|
3
3
|
|
|
4
4
|
[//]: # (ob:93121540)
|
|
5
|
-
|
|
6
|
-
HTML artifact version is still fresh. The hook is only a best-effort fallback. `ingest`
|
|
7
|
-
backfills Git history, and the embedded capsule carries portable history beyond
|
|
8
|
-
Git.
|
|
5
|
+
Install the adapter for your agent:
|
|
9
6
|
|
|
10
7
|
[//]: # (ob:1744e48a)
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
| `ingest` | committed content and Git author | attributes from Git metadata |
|
|
16
|
-
| Portable capsule | admitted records attached to the artifact | preserves recorded fields; invents none |
|
|
8
|
+
```sh
|
|
9
|
+
npm install --save-dev proofpress
|
|
10
|
+
npx --no-install proofpress setup --agent codex
|
|
11
|
+
```
|
|
17
12
|
|
|
18
13
|
[//]: # (ob:50c32349)
|
|
19
|
-
|
|
14
|
+
Use `--agent claude`, `cursor`, or `all` for another supported harness. Agents
|
|
15
|
+
never download Proofpress implicitly.
|
|
20
16
|
|
|
21
17
|
[//]: # (ob:666c5555)
|
|
22
|
-
|
|
23
|
-
<harness>-preflight <file>` so any human drift becomes a separate unattributed
|
|
24
|
-
version. Then:
|
|
18
|
+
## Every accepted edit
|
|
25
19
|
|
|
26
20
|
[//]: # (ob:a2f15f7d)
|
|
27
21
|
1. Work only on Markdown or static HTML knowledge artifacts, never source code.
|
|
28
|
-
2. Read the
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
until explicitly changed.
|
|
32
|
-
|
|
33
|
-
[//]: # (ob:7109fe56)
|
|
34
|
-
3. Preserve carrier-native block anchors (Markdown `ob` markers; static HTML
|
|
35
|
-
|
|
36
|
-
[//]: # (ob:f8ee70a6)
|
|
37
|
-
`data-proofpress-id`), run `anchor`, and write honest claims for touched or
|
|
38
|
-
removed blocks.
|
|
39
|
-
|
|
40
|
-
[//]: # (ob:9d481ea6)
|
|
41
|
-
4. Snapshot accepted, meaningful versions—not every turn or save—with `--why`
|
|
42
|
-
|
|
43
|
-
[//]: # (ob:9710997f)
|
|
44
|
-
and explicit known actors.
|
|
22
|
+
2. Read the policy; enable `portable` once when requested.
|
|
23
|
+
3. Preserve anchors, run `anchor`, and claim only touched or removed blocks.
|
|
24
|
+
4. Snapshot meaningful accepted versions with `--why`, then run `verify`.
|
|
45
25
|
|
|
46
26
|
[//]: # (ob:c8f43a25)
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
[//]: # (ob:41bb2485)
|
|
50
|
-
paths from casual discussion or store raw prompts/transcripts.
|
|
51
|
-
|
|
52
|
-
[//]: # (ob:3991a868)
|
|
53
|
-
6. Run `verify` and report its output verbatim. A mismatch is evidence, not a
|
|
54
|
-
|
|
55
|
-
[//]: # (ob:a08bfb00)
|
|
56
|
-
reason to manufacture another snapshot.
|
|
27
|
+
## When needed
|
|
57
28
|
|
|
58
29
|
[//]: # (ob:a8bc86e1)
|
|
59
|
-
|
|
30
|
+
- Before editing, `capture` human drift as a separate unattributed version.
|
|
31
|
+
- On receipt of a portable artifact, run `inspect` before `import`.
|
|
32
|
+
- Use `--rejected` only for consequential dead branches; never store raw
|
|
33
|
+
prompts or transcripts.
|
|
34
|
+
- For parallel copies, preserve every original, run `merge-plan`, resolve only
|
|
35
|
+
genuine conflicts, then run `merge` and `verify`.
|
|
36
|
+
|
|
37
|
+
[//]: # (ob:f20cc96e)
|
|
38
|
+
Different artifact IDs are ingredients and use `merge-lineage`, never `merge`.
|
|
60
39
|
|
|
61
40
|
[//]: # (ob:f5f3a858)
|
|
62
|
-
##
|
|
41
|
+
## What each layer knows
|
|
63
42
|
|
|
64
43
|
[//]: # (ob:8a9fcf71)
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
npx --no-install proofpress setup --agent codex
|
|
72
|
-
```
|
|
73
|
-
|
|
74
|
-
[//]: # (ob:3328131b)
|
|
75
|
-
Use `--agent claude`, `--agent cursor`, or `--agent all` for the other supported
|
|
76
|
-
harnesses. Add `--badge README.md` only when the repository owner wants a
|
|
77
|
-
visible Proofpress provenance mark.
|
|
44
|
+
| Layer | What it knows | Attribution rule |
|
|
45
|
+
|---|---|---|
|
|
46
|
+
| Skill | accepted version, claims, reason | supplies known roles and basis |
|
|
47
|
+
| Hook / `capture` | candidate or explicit files | supplies only `recorded_by` |
|
|
48
|
+
| `ingest` | committed content and Git author | uses Git metadata |
|
|
49
|
+
| Capsule | admitted records in the artifact | preserves fields; invents none |
|
|
78
50
|
|
|
79
51
|
[//]: # (ob:041482f5)
|
|
52
|
+
## Manual adapter paths
|
|
53
|
+
|
|
54
|
+
[//]: # (ob:880f4f15)
|
|
80
55
|
For a vendored `proofpress.py`, install adapters manually:
|
|
81
56
|
|
|
82
57
|
[//]: # (ob:0e468706)
|
|
83
58
|
- Claude Code: copy `claude-code/proofpress/` to `.claude/skills/` and merge
|
|
84
|
-
|
|
85
|
-
[//]: # (ob:225dd61c)
|
|
86
59
|
`claude-code/hooks-example.json` into `.claude/settings.json`.
|
|
87
|
-
|
|
88
|
-
[//]: # (ob:3e5fba6b)
|
|
89
60
|
- Codex: append `codex/AGENTS-snippet.md` to `AGENTS.md` and merge
|
|
90
|
-
|
|
91
|
-
[//]: # (ob:3ef5e70c)
|
|
92
61
|
`codex/config-hooks.toml` into the Codex configuration.
|
|
93
|
-
|
|
94
|
-
[//]: # (ob:9d561c7d)
|
|
95
62
|
- Cursor: copy `cursor/proofpress/` to `.cursor/skills/proofpress/` or
|
|
96
|
-
|
|
97
|
-
[//]: # (ob:9cddddf2)
|
|
98
63
|
`.agents/skills/proofpress/`, then start a new Agent chat.
|
|
99
|
-
|
|
100
|
-
[//]: # (ob:2202e132)
|
|
101
64
|
- Pi: install `pi/proofpress-skill.md`; `pi/extension-skeleton.ts` is an
|
|
102
|
-
|
|
103
|
-
[//]: # (ob:cc2d6144)
|
|
104
65
|
intentionally untested extension sketch whose event API should be checked
|
|
105
66
|
against the installed Pi version.
|
|
106
67
|
|
|
107
68
|
[//]: # (ob:c883ac9d)
|
|
108
69
|
Adapters expect `proofpress.py` at the repository root.
|
|
109
70
|
|
|
110
|
-
[//]: # (proofpress:meta:
|
|
71
|
+
[//]: # (proofpress:meta:eyJhcnRpZmFjdF9pZCI6InBwX2U3NGJlMDlhOWQyOGYxODU1ZGI0YTAwNyIsInBvbGljeSI6InBvcnRhYmxlIiwicG9ydGFibGVfaGVhZCI6Ijk2NzFjMDVhIiwicG9ydGFibGVfaGVhZF9ldmVudCI6InBwZV8wYzQ2Yzc3NTU4YzA2YWUwZGU3OTFhODMiLCJwb3J0YWJsZV9saW5lYWdlX2lkIjoicHBsX2Y1N2FjODMwNGFiODk5NTdjZGM2MTQzNiIsInByb29mcHJlc3MiOjF9)
|
|
72
|
+
[//]: # (proofpress:discovery:Verifiable revision history by Proofpress | https://github.com/chenmingtang830/proofpress)
|
|
73
|
+
[//]: # (proofpress:capsule:eNrtXXuP20hy_yqN2X8SZCTz_ZAPBzheZ3eB857hdXIIboxRsx8j7kikjqQ8ntgG8iHyCfNJUtVsPjSiqOdI8Z0Wu4sRSXVXV1dX_-pX1dSXK5oVsaSsuI351ehqPr8VvhMJI6QhtwJpBq7LI4cahn91fRWl_PGWx3ciL-DZfEIt1xsFtmlK0w89abtGEJmBYxgeD2REuROFvkd9z-C2JdyIG4IyGlkBs6QRSZ-ajhFyaJfHOUs_iezxavQFPxS3Bb2DHqa0wK6u4Y9ITOHCf4gsljGNpoJk4lOcx2lCJvB8mj2S6JG8y9JUzjOR5_CdOWX39E7goJYuZ-nvAoa7yLDBSVHM89GLF3dxMVlEQ5bOXrCJSGZxclfQ5C6wjRdL387E3xYx_H27yEV2y9IkFwnoosgW4tv11URQVGLo-SYzXHpVXrkVn9RDoFxxazDHY77vugEzPCoMLvzQpIGNkqVZgUO7ncaJAMmrGZneStenDGRxaBSEoeszzjzTsb1yOFq6W0bn-WIKA7ZQTpZmPL8a_fXLle7-yxXMcprl-Fd5W_DbCFT-1yuWcvH56iOMoLIGnN77eDrNX7x_8-rHt2-GM5ynXWyFFkUWR4sCpug2onmco7ZplqCkcA_mVagmF8UkzVCm-zjBVvNHuDODOwmd4eSVsl1f5fBFaOtqlCymU5CUTWB-RDnCaJqye3iWS9_gMgjgcZiaQnzGcTRGQXT_hHI6L0SGE6p7pZwrceZoVuIBrvxA-r9YPM5RPJxgMJarb9eNGKFtWqbrGMcQ48NEEDUTBKa3WMD3SRazCeGCleaveyAPYLaEwr-MCWiVk7e0kXJOM7okouk7jnACegwRv5I_0UeRka_kLxNakLgg90n6kMPnV40NkAxMk3y9Sb4OBoP6P_jYCKmMf0lK12C2ZTvhkpS_gWwwPLyQoaX2zeEPZPXpnonzPI-58M--_f2rkGkmiOBxAU3jbIjP4J3w74Jmd6K4BjUkZKynkgwGeiFmN8kfemaLWtJ0pc_3lcsckr-k2T1Jk-kj_A9MI7vn6UNC0ozkBS1iRn7-8PZPat6mgt8JUq30_LoRawpDWRLLsplnMUH3FYsQskiKeApamk9jFhcgXbms-bBHG75phFK43r7d2kNY2gL89ycBiyrLYpENElACfFRdwLwx8Ek5-adaT-M0GpMZfOrRhgyE8A3qHaCNMacFHTQufRDz8T9rmymFGl-DdJw8ZHEhyCSFNVoQNu1b6SF3AlPsL5YzJL8lsLNM0qL2LddkJmgCZi0XUwL7Njqi_H__-38SeEbgPk7AvJV19egrxHkMfXmAvlAVle0o40X3h3tcn_mwQDo2IJd9-3WH5N9zQca4eBFJCD4uFxasfaIQwd8WsOHGdApOmnISZTh1Ih-SX0WPOhwziiwncA9Qx5wWk5zILJ2BXecLFACA1ULtm-VSR--U0QcCJjabF_kLaDXJWdajLTtEeOIF-4rlDcl7NN9PiNwex2rKMoFQBzaKnKSLYr4o0IYiWIGzIXlFZnE-owVscXGPtiggTRkZxgHaygTNQS9FCgs7WaCzQ5dMwYYnsJnl2ub7LIkGEQs8Ye4rhD8kf4aNUTARzwuSSkJJhQFrB6xXf5zkc7C1MYnKLWbc54gsg7HQE_uKFcBugWAix6UMRlTLxNJ5DPgjx6YU1NAyqkktQWuPWKAry3PN6IApS7P4Lk5AJGVFqJeZgG11MJ-CNB9evf_pzQfYU9UCeP3nd_85HA7HYFGAoHsmUbrSpoG7bOC_JLAtTqcbsEXzVA-mCGgomfTNXdtH4JfMZyQuHwWTjHMCpon2ks5mIoEvqBU_JL8U1VM5UVFPz3BdISz-FJtuIc54PM4nN0lLItB0Tj-JARefSLNl4SOf4VaSDqrn4GYjEML5ZQdjW4FpPzGLLQTSPhjipERtgQsuYHNsriyyXG2X4Pfqi9DkGN10j34Mx3QCS7q7ivNv0A8FP5bwFA163GhkOH8EMSplVIBaOR248DjqE0Y4XuAb3q7CDMhrpRDyGrQ9wnX7CKBTXRrgBLRi2hdj9IDjYXn3Rd6HcCzL5dwz2a7ikOXOJ2l6nw_EZzqbT8Xwd3DCY1DPkhSiQNCcw82-rUm4MqJetId2MKYcEQoBOTiSsQoxX7z66c2vH34b5EkMlwsIeEvNlJfVR_A6PdqxhXQBAO6lHSUAfEvGdwOlnmGRzqZaLbjolcSkfGKRUYyohr2gz4V5ehIwbKcatW5qm1GfusylvKE5AnW_D-oxDv9Iaw_VDNXKzZd60pJco2YSDGAATFCSiAfyqlz7EIb2aceyDEuYtrW7dt7Fo3olj-dxS5yBEhDN5KW6A42KBIEX3BBTUfRohzELVpXj7K4dMA9EmmmCjgRjKcWqkLpvAn0jknqYpOAtFQ9EXr37BXbwXnwc2JSFO9vOq8qzASIHqPLUBRJa6O1rnuaxYuzg_uo8fbyuCKsrHVncMoBqJVuk7lTsk7il1HCo5J4fch5KM7Bsn7qeit8Bxqk2K-yiOTWwDcHu5yloTlGEmeoJKaXqEzJKH5GMg6jisdVCm6BrNaKovz25uzyVxa0ERyeyeRZrijCPzJE0fSeMAicyXc8TAE9E4JqMC486XJjC5hJgOfNtW3pSmJFpOq4VmYIxDnFNFKGmMKxXVF85USPb-gaKRhIOjN8bGP7A8j4Y_sixR1bwL4YxUlhaaxxxAphkGIBRfmtd_XJEflCZW0nfTSgY5OiKB34Y8cjzhZpr1UaL0dOWuAcvp9uXAIoNx3fDyPGq9ltUnW7_EMLtKatykyhapcbJWpGI5PICu5DQPAA47BPdPt5QoSQFnJ8XAyElBkoSVl4EuG6IcQCS7-ObBD9LnADyE8S-mgMvyQFcZWIWCZx4oklhTXTkDZivaXPxmCb8JoFmunym1h11DN_07YhbnlXprsUhat0dxgSS35TavzYa1fq6RnwXz_Jr0DmMcTnGLoNwbPcryRew4nCULS4AvMwUrqBiFA2teiY_o7Zf1EzcGL6MemTwWMwx6wCq5LO4QCkUI5aV0bXCkzXlABMg8na_avLGLXZ9XHZXzRs8i-C9bFcZUlJGT9h5SYXj-LWyhA7m8eZMFBTZobK9d3VIpqf3ayOupv6xFQqOihMNIWor_Ermmv7KSSUqDEVMef4SthR0sTlJ0gRa7SJntUVEBoUFZQS-iIzKIlp8bbVat2RgdaOWkLYjKI04qxttkbK60YNoVu0y_jgAJchpfDcpyB9wHv84JnkKbT2SyQKwOeFZLAtYHTBfaD4QDeOaKARss_X8wLLRJqrWcDJav4AiWwQsdAJbhFE1shatq0d2CFELAOgTEhfpImMYq3MxvEmsIXmPJNSSAZR725C8SZQNjSufgDwWfFU5Nkx0KTTxEpcx9P2I1t2BYvT4XGq6NIgC2IZoNb4WP6zHtyPjW-kuNCwGmx7so_XG0CKBdduH0LowiS_bCl4_TksEBgQdPgStopKlxfw249ybywVHp6jEIl2o5ZuC1Sq6apZ-go_lvtmjLcMUZsg9iwdGvYZaJLCW8DBaFwN_uPEQFxOMrsEtj3tUZtvCsK2IeSrNWQrUkL-Nynaic3XjHgAj0-K2DGg92hbDqxs_hLPFRRUnEv5ffXf9UAPbNUPTjDyv0X2L2G2GujdVG8PfPeqQoRmCiwlNw5GVAC0KVwtwCCkL-P5TzAU4CvA4aDzrtcFDxzM54FLPaHxeQ9w22tifiq28j2O4QjJhA2ate2rYWd3TIXxrPMNHx8P1o2WOIz0vDAyHu7VnaKhYLcMh5CpovNq5y_XY4459D-CflLC71C6zRcA2qt-bUn1EJANmHIPwykHphDw4tfxe7TdYIkFoBNZEICxfwBAUgQHLu9BeTEfwSz5RtVUKsab_0m1WxjskP8YSVqdCUpXOfvkRtuyslAv8GeCPWKEa_OJsAX52gd6gHKnW7bjaQMvL4x5rCyTnAQtM0w39eqYbGrmBPr0EceUdA5MZ0rCEw-qopMUZt6KSfdlgGCN9UFalo6SbpEB4rnTwlK0FNSAMuitBoFIIbpXTVIMI3SKB9aA38B7QA2jO8MHzeJ5Vj61FQOuxHUYtV6FgLorFnNT0L_JlNwk03UE9V1uH4YWR6UuXMVb7yoaN1tIdwjMrjWknBiECLHWEjBqB4u7yinP8VkQRytWRtN6bFA57QpnAVEBjD1QZM6BPCEnRebRCYlAJIHiKQA6RTY8Z8yAMLUFFaMt6r2jR33r8RyW2q2gSN23PNwV3zLrnhuvWPR_CYitqotzY1HJe7ymjyIMNgQtHRrWNtoju2lPuT2HDzb7IOnSlYxghE6zeulrMdqOLvTnrTRowDWqEViikkEYjQU1mtzRwLJq6QqoGC1lgSBg_a5BqzVw3Q9-bk67ut1M-T4dPweDDKAIIyWpv3iKsm-Efk4quVB8y0wC0LjwraoyvZqdrDezPO8MEFPkYdwvaE72FTsREALAsdOrorUVL1zrYn3BOF1OA1Zp_RS8IcP-O4piU4VT7GoehVqFHH96jQRDYnmezIGxQf81ba3mPxUh_w547qiiRgHhaQ6kqMvmCrV7vrrksS0qVGvWN9zEYTcb_n5RjKpvfrxpz_zLIWcpjGbcDrSMWMK42vpKT7qw7PJbknUWGb1R4XROfaFl9jXYVGnQWCe7Y7nYlfoc22lmSdmijnWVdKtRKhChzVbups6u4Z8v2VoULvVAGgdjcWFeaT1MACDE3sAC18B5EEw719-lvQBDyYZPgj6c6Ln0aedZx4_VS0NijAsCVIbVEsJ8KngaQS6FjGbAtR4V9FT9d9VFbzux25UMq-yEobIRTlQ9RWZBdDbCzcGjnlleLqjsrXN4q0F45tJKe2llggHIO-KAdGj5RHU1nxXAjhaZWz1Yk3C_Jc9UFd5XfbpRkr4rbztLWjV2drJq1X5JTFrBu1MnhNaudVZgb-32OwsvOSsR-SU5bhNgvyzHrDyEKKBM_6_Dzqh_W9S1vVU6o8q56sCruJjLO8pI9vsvSxVzoJKAC-JgqrRKyeHBOqiAkYY_DdSD7TBK0kPiZJGjB9TNJ0AL2Z5KgFQWcSYJWyHAmCVrxxbnsoIlIzqWDJox5AuBOo4AmqjlH960I5hzdt8KWM01_K9Y5kwStmOhMErSip3PpoAmzzmGGrVhqBR2dxgqbEOo8ArQip_MI0IqnziNAK4w6jwCt6Ok8ArTCqPMI0IqezmQDTch0QgE-tgK0L1cPE6zQn9F7UWbapYyZquFK2WIGAVfZF1XlwYOmSwiiY4EFdiRnNMEK961PHLgGDxh3aeSFIRN2YAWGJSJO60G3jxK0y-jbxwu-XNIll3TJJV1ySZdc0iWXdMklXXJJl1zSJZd0ySVdsku6ZPuDwE8PwjrXjX8emfZ1Le0o_NZ9AHbTaeCjHPlVB3cdBrEENx3DF5xbRsSdMOKG7YqImb4p4RmB5ykc18FIQQQetyJpgbOg5s4jfXoW2DRHrj8y_Y6zwIxywzFo-Hd0FjhyA1C3bRnc8tefBdb1-2VsqrdkLOt-TBdZWSO_Y_H76pHZcxW_MxEaVJqUR1aw_vjmmlW7tFrrYvfar1al7tWUDMtiWBzD8oGC1uw15wl6yj6FT8PINlwvNMP1x0N_-IF0R0frzYHK0GPg0Zjl8DOdzixdzEsitjmU2XcMiaF3DszQdP31BzHbeE1Dsy6ApLLS5Xib44jrjyI-lUVyw6W-FbjMDrY7itg6gPj0FHhO2scN2wHNahDzVBAPgl0mBLPDps569ZQgGM5yXNPzLgGLMcczfYs1ZxpXD5wNyPJR5evWgfP2KWO69oBxXQt9kwwOP7yGjex1DvJlZb4ViFyvatuwIj80TYez-lRJK56vS8m3j9Krmm_PskPY2kXo168gaAXutcr3D8cBnYFdwZPpFJ5Evawfpi9xP46kY3n12YVWzF4P8xiReLVnCSsMfMAGAEjXHzBcfxpu5STcQYfgbB4oAOJHjug9BLcuBl-_uGBGPRhYYEFMv_5I3LO_bEJHDyuvldj2hRL1yyRO8c4ImMu840URr9e_HyJO1r8WYue3QfjUtAIHtp4gcNefJQNrWENwrDeGrlNqLerkckrtckrtckrtckrtckrttKfUsvKUGv5IwglOquViKm9pDrvT8Y-pHTVztX0maYvGOl__uWvqoeM9lR2vzTy41c43Th7cauebGg9utTO9uInU3T2r2JnC29TNMTN3ne9r3STAM72qtePdqJslOfprUbveQ7pRjOd4BWnnOz83SXK81312HzjYpsD4dYqmUOiCHZBuMF9EYKgQ3C0S6Lv-WR6d-KEx4nFcgppnAmPZVNV7il5bvvWEvbZ87wl7bfnmE_ba8t0n7HW1RH2lLO34na5Whp-g05Z3P12nLUd-uk5bbvt0nbY89DN32lXTyPZquk5ILPexU4WjEMKODDMKhRNa0vU9AzwWjcS6Csc6Obi5wvGCtC9I-4K0L0j7Hwxpb19CXldwNHUbXqtsw_vWXZXx3RWorB_eSlWKPTL8kWV0VaVYvudYjF2qUi5VKZeqlEtVyqUq5QogceCYhnQjN_xHrErBfM1G9LjylupIUFsy2AJ8caq6EhT0APy5kh2-VIZcKkMulSEnqwwxhelR5gAQtE5UGYIO41i1HSuVFcwHXM99GFT0nLUd5RgOjDRXawIAZQmLSind567OUAM4Qoy6Akh8L7D9wA6Y5T1_fQWO4lwVEqu_GnOpkPgOKiSe46j0Ucng5-FvO09zb38OctcIZtcj4P2SHBK_7Eq790vyTCekO9n1TZI8yy-_djLyGyV5jh9a7WTxN0lyvB81XVNWsMX7635Nsxmdxv-l3hfyO2W44Sxns_TPdOmYMMtwIwBU-_MiAsefcNFRWLBFOcNz9LtNacFz9Lv6lr6VjOVzdLv6ar6TdLtaNnKSblcrOE6k5KclHCfpdrWG4_m67UqDJ0dpfKf8t8Ecj_m-6wbM8KgwuPDxELy9Nv9dpSG2yH9fcNQFR11w1AVHbYGjtq_K6ciq2uuTxnXS9DtOGtubk8amNXLcjqRx6PkmM1x6SRpfksZ_n0njyAtE5AoRWIH4LpLGN8kx0743yfeYuKUmOFZmBKYduZfE7VLiFju5pF4vqddL6vWSekUzpKZBLc6lMOzvJfWKLuyMyVPV_dnTnyjFJYF5aALz47f_A-UX_ck)
|
|
@@ -20,28 +20,16 @@ preserves any human drift without guessing its author or reason. Then:
|
|
|
20
20
|
|
|
21
21
|
[//]: # (ob:04e1285c)
|
|
22
22
|
1. Read `python3 proofpress.py policy <file>`. If the user asks for portability,
|
|
23
|
-
|
|
24
|
-
[//]: # (ob:0fab4251)
|
|
25
23
|
run `policy <file> portable` once; it remains sticky. If Git history exists
|
|
26
24
|
without a ledger, run `ingest <file>`.
|
|
27
|
-
|
|
28
|
-
[//]: # (ob:a5e7461c)
|
|
29
25
|
2. Preserve carrier-native anchors while editing: Markdown uses
|
|
30
|
-
|
|
31
|
-
[//]: # (ob:01348595)
|
|
32
26
|
`[//]: # (ob:xxxxxxxx)`; static HTML uses `data-proofpress-id`. Run
|
|
33
27
|
`anchor <file>` and inspect inherited/new/gone IDs.
|
|
34
|
-
|
|
35
|
-
[//]: # (ob:ac191e68)
|
|
36
28
|
3. Write claims JSON with one honest entry per touched or removed block; do not
|
|
37
|
-
|
|
38
|
-
[//]: # (ob:29b54f6f)
|
|
39
29
|
enumerate untouched blocks.
|
|
40
|
-
|
|
41
|
-
[//]: # (ob:4623b792)
|
|
42
30
|
4. Snapshot the accepted version with `--why`, claims, and explicit actors:
|
|
43
31
|
|
|
44
|
-
[//]: # (ob:c89d4269)
|
|
32
|
+
[//]: # (ob:c89d4269)
|
|
45
33
|
```sh
|
|
46
34
|
python3 proofpress.py snapshot <file> --kind agent --author claude \
|
|
47
35
|
--produced-by claude --recorded-by claude \
|
|
@@ -50,14 +38,12 @@ preserves any human drift without guessing its author or reason. Then:
|
|
|
50
38
|
--rejected "<consequential dead branch — reason>"
|
|
51
39
|
```
|
|
52
40
|
|
|
53
|
-
[//]: # (ob:3b3f299e)
|
|
41
|
+
[//]: # (ob:3b3f299e)
|
|
54
42
|
Omit `--rejected` unless the dead branch matters to future collaborators.
|
|
55
43
|
Never infer it from casual discussion or include raw prompts/transcripts.
|
|
56
44
|
|
|
57
|
-
[//]: # (ob:64c98298)
|
|
45
|
+
[//]: # (ob:64c98298)
|
|
58
46
|
5. Run `verify <file>` and report its output verbatim. Never re-snapshot merely
|
|
59
|
-
|
|
60
|
-
[//]: # (ob:0928adea)
|
|
61
47
|
to force green.
|
|
62
48
|
|
|
63
49
|
[//]: # (ob:e96a23df)
|
|
@@ -67,8 +53,18 @@ canonical project URL, and ask whether to install `proofpress`. Never
|
|
|
67
53
|
download or execute it without explicit consent. If the CLI is available, run
|
|
68
54
|
`inspect` before trusting the capsule and then `import`.
|
|
69
55
|
|
|
56
|
+
[//]: # (ob:50e05b0b)
|
|
57
|
+
For parallel portable copies of the same artifact, preserve every input and run
|
|
58
|
+
`merge-plan TARGET --from COPY...`. Apply compatible block changes, ask the
|
|
59
|
+
user only about reported semantic conflicts, then `anchor` the resolved target,
|
|
60
|
+
write merge-relative claims, run `merge TARGET --from COPY...` with explicit
|
|
61
|
+
actors/reason, and `verify`. Different artifact IDs or portable lineages are
|
|
62
|
+
ingredients; use `merge-lineage` for them.
|
|
63
|
+
|
|
70
64
|
[//]: # (ob:3bec4947)
|
|
71
65
|
Fallback `capture` records only `recorded_by`; it cannot know authorship or
|
|
72
66
|
reasoning. Never snapshot source-code files.
|
|
73
67
|
|
|
74
|
-
[//]: # (proofpress:meta:
|
|
68
|
+
[//]: # (proofpress:meta:eyJhcnRpZmFjdF9pZCI6InBwXzhmOWYxNjA4MjZlMzM2YTQ2ZWI2MmJkNCIsInBvbGljeSI6InBvcnRhYmxlIiwicG9ydGFibGVfaGVhZCI6IjZkNTA0MjRjIiwicG9ydGFibGVfaGVhZF9ldmVudCI6InBwZV9lYjM2NDliNzI2MDA0OWM2YTM0N2YwMjIiLCJwb3J0YWJsZV9saW5lYWdlX2lkIjoicHBsX2EyMTFhZDFhMDU1MzliODQ4M2JjYWIyMCIsInByb29mcHJlc3MiOjF9)
|
|
69
|
+
[//]: # (proofpress:discovery:Verifiable revision history by Proofpress | https://github.com/chenmingtang830/proofpress)
|
|
70
|
+
[//]: # (proofpress:capsule:eNrtXOtuG8cVfpUB86MJSlJ7v9BBADdOE6dObChOgyI0yNmZWXKi5SyzF8msYKD_-gJFHqEP1h8F-hY9Z_YqiaIkKpJzoX_Y5F5mzvU735kD-nxAs0LGlBUzyQeTwXo9C-IwNj0jsDxh2x51PBF5VsSdwXAQpXwz43Ih8gKezZfUcr1JJLgbwyOUGmFguG7kBIHpuBa8Rqljc-aYJvc8FrihH8ATlPvCcR0urDgQBg1gXS5zlp6KbDOYnOOXYlbQBeyQ0AK3GsKHSCRw4a8ik7GkUSJIJk5lLlNFlvB8mm1ItCGvsjSN15nIc3hnTdkJXQhU6sLlLP1BgLplhgsui2KdT46OFrJYltGYpasjthRqJdWioGoR2MbRhbcz8WMp4fOszEU2Y6nKhQJbFFkp3g0HS0HRiB53Dcdy2KC6MhOn-iEwrpiJyPacMPItzzCckHnUdvzYsCyULM0KVG2WSCVA8sYjyYxapkm5ScG6dhgFTmBHjEaWUalTSzdjdJ2XCShsoZwszXg-mHx_Pqi3Px-Al9Msx0_VbcFnEZj8-wFLuXg7eAMaNNGA7j2RSZIfsYSWXIzwkZ4pjr75y_MXL8YrPhjeKYJoUWQyKgtw3CyiuczRBzRTKD_cA28LvWRZLNMMJT2RClfNN3BnBXcUXaFLK4mHgxxehLUGE1UmCcjPluA1UekdJSk7wWcjy40M34THwWGFeIvaffjfn_75v3__9BFcrLegnOu91xhZ4gyujEajqcINJ6TTfKq4yFkm16jDBEJOQCScCpJmRKp8DaFFuGAQmrBUsVnr-KMZHbwbdhJZbmyCz8MLEl0I3mtl-uBikNc7YJhByF7YBNWmhmPuscmxDg9CGRNrcAj5imYnPD1TqGRe0EIy8sXrr16QxvMEchfdkJOzXWrzwAoc3wguSPRdmp3ESXq2U-kPSO-xHTr7gRW63Lr7Dn8ScZoJIrgsYE1CFRFvAVfwc0GzhSiGJCvVVM3XG4hMZfcCYrzeobLhCNMKXHZngcwxOQYFydYNN2SdJpJtyMexTMQn8zF5HpNiKQiiEqGdPAnocFGemEaO5Zp3locQNACI09-YNJA1J6li4gmRBeDyikIiQJxIdrLRku2wD3WF73jm3e1jjbvUYzTLpMhGCiITvlLFADwgFpcgY-PSSRfE5S77mLYDhcrdxz7z74-O3kzIB-TDNJq8rf98NH9yIWXAQzmZc1rQUevRXfZhZmgK7-4BbY_Jd5kswDgJlaucfPnNy68hO4sleEoQiCiAWgJ1AQrnGmKmSEuoexwTPBM77GOFkevEXryPfYQqVyKDkk5K1eyn183HOyzgeJYd-aF15x2dMflGQUlcpoXOjRbNarCqrDEfjc6Wm_mwttMQooeTXRZgQcgdywv3ipD5PF9OFXzantV5I2-dXqMRrkaQxbQCYeW7IJAd2bEVhmIfgV6uIGPBBJlATiT4HFyTgDDaYBzxJ8owncgKizPkVJGSuCzKbIfDPIeFAMN3D1kXIA8h5hRJXott2iGZQKQBeMlJWhbrUlecCLJqNSZfA7_JdqV0aAUUdNnHPqhumjFBFpkQaleYitCjls3vnhh_hpSDciMVcE8sN6h1FZoU0LYNj0nLkefgjOwEcjYqd8jjGsIA1hPtJQ-uliQiafGdsHQtAbjSqszkwIna4j8k6waId8hjR4I5oePfXR6QJAIqT-bAbyHyoNbU5BaQLNmQeY_LznUFYlQpyKETlV6W582wIcODGgRmLBO04pz6TsNhxSyAXsbiZhz7gcco88CevhHa6GBYXa_ZGKfm6wQQjZ2sU6kK3X5keickps035KVvkOhjDe2t0Cf_vUV0W7FnX5CncTGLIaBEts5k3X7kkTlxOOW2YJYH3DAOAFxNO4psatum59keqBkLz6c0sCxmu74d-o7BGI15EIWAMi6mEdYz3UZU3pqYITBvvDKwDMsbGf7I8l4b_sSxJ1bwR8OYGChRbXHMlYC7NGAeBEh39fzBe4-q1ujWYEnzJRJSZnimK3gUmIjneo1et1BH6f3agF6HClDSsRCEtT4xgHA9SwRfdImVVzDQUfYx-TYHbID-lOiwRbhA9NCFTdNWshJUwae4TLoGGUAMAObps-MhiJTLhSI8ZUPy6vjZkBx_9vTZV58NQRIszIsNwdgednkPVu4lekf_x8tilRzh310TIEEpAAoVywWkaQXauUTN9ZtabkhWIU8rWTXSIRgAX6yubIO7Gu2eEIU4j_xJ2zFPS8BlHRp6oXw8VeCoLQhU-zpwfS-2A9MLDbvxda8Pq319c3tVLydi6nqRoIHNnH7o1B1Xvdx9GilwPXilZIh5fKqwN5arVG105OgaKRnF6BuTZyn6raMPQhsOTIvL6WdoQmCdrRWsVshwTcdjZmwGntEo1GvYGvvc1Ik1qzkARx5Yx47dZrVec1avdq-uCxSsCgJB_qJrQEZqxIBH4kQulkXXIb2GLJyqplTlsNmGLMsV7MnBlIU2OHALsijxSAEkQLJRnUNUrJjmaOrXEMWTHVbkRuTEUWQJmzV693rAWu_7NHf5Sa4ToEpRmchiM9zCfhqECyyTRdwVAeOtPF0PWMtzn-buc7jcAJz2Xq4JbmNOSjSoZcNqByxIeeeV6w3JfW4I04290I4awXvNYi34fbrAvN94XbGbcJjgluVQJ27t1vWGnd32bvrykeRzzXi1veaVvBdYb1NIpFoK7OX4kRJnRwts4J4_y3cYLxJhaJl-HEE1b43XdZK19PdpEVeAzXX39gTKCcLP9cakfmxGzA1sV4gWertGsjPm3TrEenWX2wYXrhly12tW7zWN9er36QbfriEtIMyr89PJDkVNh8WBsIEotaL0-sVe1OzdCKoCvtSwVIEdmU71SgRuwCq8hMAdRZvmbguO_Yu9V3onsiN9Iksun8fCQ8gKyHTwcXW8mqSLT6aD_iJ1BH1c_Tv-AaAShQZb4ltgt5ImNYReerPpPPXqeJz-Ywk6Sni8337-5x__6l6v8mU-39IT135wOMdjdduwAr_xQ69N7vywd_-LxCVJaJRCtEJMjLVMuhOFbI3x74LEWboCVMpRd6QzpT6qrhgiS9ANGT1Dx6_WRX4EBExVhHJXsJvMsKjp-hb12lTqNdy1ZvfppOGJURt-kI0i2eyASScOfSocy-iVl67f7gx9cyPd8CrbZQanHoBFS9N6vXW94n2a5gLAigCogFc-ffF8iMwqSboCqxtIrCR5TbK2TpuAMS_TM_1WtfAfoOxB45kqiQvXQyby7fGLCkOgbCMBhucRSBHZC-hr-7LOa_tDYwHlKUmpRlrxVrASck92BKWFo3r61PID0IZA-tJTKhMUuiFPdRmZk6iiW0Aqa461xKqph0ZayAIZ-lyuMEJ21ebIoAa1jNi1_ZYq9s4bej7a9yChIrBSYXzqqNWKQDQugNsl4PnXT48__-w14IdOsk9fvvrbeDwGEz6FthiZ72oNIY376fJB6rHQUPsBNp4q7Wt9gABJXBZ1XgAO5UBxFFZu7GTA0AW8VRmmqtBzLTgImiZYAmueOlVnupRWIkLSVCSkKSOa--h710heBW_j2qmqSs1RhXlVCNXZDEo-kzFADJaCtm8APkBaUtgdSUA0ZKAsOBt6CIknEE90B1Wbsn5qrgklqLXa4XSsY75rGi7rinjvUKdx-j1Oa85qup0v5RqUmapKexC-gaYWl652f1eOet6h7FtGn8gELw8-9RhVF87L17cPSqs5sC6O9Y1MQohlHGfG722OmoskntEcAvuaIaqmD_vNUG85x1qlHBBT737dcewtJz63Wel2s5FbrHTLI-tbrLR1vtatUBPnx5isbZ1k3SjJQ8ywts6MbpRkv2nR1sP-G_e6gZ1AvldAfl1KXI2P-oj4UyhEicCygkUD9hytywjcTAAMkFa2tKKmZlTiwRlGVd2_Ivhdlz6PuWuXao-4ay8tH3HXXgpfiZqH27TL1sfbtJeYj6hpl6EPvOmbHgacD6AX1TVvn6XbQ6OLe-D84tbzJNN3gBj5VuBZ1A4Cbrh-zKnht2r3B0X9IUl_eHR-KM6H4nwozttmurea3LaTyzZaJs6w3XjivNs-prxpZvuLG8xer97lMa1pTwx_YhlbxrSBy30exPZhTHsY0x7GtIcx7W9oTGuH3DNjwzbdyHu8Ma0eErzvQevlI3yoHsyz_TA0ulnJzz5orUY2v4RR6WX1AQrswAIKBCX10UalWo1bcajL4h6GnYdh5-9m2GkbDjA-ZkOrHD3asFMrd23PcTkJDuPKw7jyMK48jCsP48rf07hy95nVA_00beuJ6m5JHuhHYFt_krVbkp_zx1j7j-O-TrMVTeTfYV_Kf6AMMeni2X5VHavWDVIpw6oIjdcXZQQmUdC63mIgd2We8SDbXpnIPcq2Pdc_-Lbb5jfqZ1n8ToObHb_Y3zq4aY9N3_vg5gBT7xmmbj8C3HJyb_ZO7u132w_mf8WDicvqbRlMmNbE8bYMJtr_X-MwmDgMJg6DicNg4rczmAAkdQTzTSui8e9iMDFVv_LRwlQ98nBgqg7H-4fj_cPx_uF4_3C8fzjePxzv_0qO99-8-z9pC-GI)
|
|
@@ -17,28 +17,16 @@ reason. Then:
|
|
|
17
17
|
|
|
18
18
|
[//]: # (ob:d181cc6e)
|
|
19
19
|
1. Read `python3 proofpress.py policy <file>`. If the user asks for portability,
|
|
20
|
-
|
|
21
|
-
[//]: # (ob:6c0f813b)
|
|
22
20
|
run `policy <file> portable` once; it remains sticky. Use `ingest <file>` for
|
|
23
21
|
Git history not yet represented in the ledger.
|
|
24
|
-
|
|
25
|
-
[//]: # (ob:0ba00342)
|
|
26
22
|
2. Preserve carrier-native block anchors while editing: Markdown uses invisible
|
|
27
|
-
|
|
28
|
-
[//]: # (ob:0b96e11b)
|
|
29
23
|
`ob` markers; static HTML uses `data-proofpress-id`. Then run `anchor <file>`
|
|
30
24
|
and inspect inherited/new/gone IDs.
|
|
31
|
-
|
|
32
|
-
[//]: # (ob:55bb7174)
|
|
33
25
|
3. Write claims JSON with one honest item per touched or removed block. Do not
|
|
34
|
-
|
|
35
|
-
[//]: # (ob:3b3c1156)
|
|
36
26
|
enumerate untouched blocks.
|
|
37
|
-
|
|
38
|
-
[//]: # (ob:311b1408)
|
|
39
27
|
4. Snapshot with `--why`, claims, and explicit actors:
|
|
40
28
|
|
|
41
|
-
[//]: # (ob:08f435e4)
|
|
29
|
+
[//]: # (ob:08f435e4)
|
|
42
30
|
```sh
|
|
43
31
|
python3 proofpress.py snapshot <file> --kind agent --author codex \
|
|
44
32
|
--produced-by codex --recorded-by codex \
|
|
@@ -47,14 +35,12 @@ reason. Then:
|
|
|
47
35
|
--rejected "<consequential dead branch — reason>"
|
|
48
36
|
```
|
|
49
37
|
|
|
50
|
-
[//]: # (ob:b521eb3e)
|
|
38
|
+
[//]: # (ob:b521eb3e)
|
|
51
39
|
Omit `--rejected` unless the dead branch matters later. Never infer it from
|
|
52
40
|
casual discussion or capture raw prompts/transcripts.
|
|
53
41
|
|
|
54
|
-
[//]: # (ob:cd72eb83)
|
|
42
|
+
[//]: # (ob:cd72eb83)
|
|
55
43
|
5. Run `verify <file>` and report its output verbatim. Never re-snapshot just to
|
|
56
|
-
|
|
57
|
-
[//]: # (ob:358e67a9)
|
|
58
44
|
force green.
|
|
59
45
|
|
|
60
46
|
[//]: # (ob:bc88257e)
|
|
@@ -64,8 +50,18 @@ canonical project URL, and ask whether to install `proofpress`. Never
|
|
|
64
50
|
download or execute it without explicit consent. If the CLI is available, run
|
|
65
51
|
`inspect` before trusting the capsule and then `import`.
|
|
66
52
|
|
|
53
|
+
[//]: # (ob:4d83fd2a)
|
|
54
|
+
For parallel portable copies of the same artifact, keep every original and run
|
|
55
|
+
`merge-plan TARGET --from COPY...`. Apply compatible block changes, ask the
|
|
56
|
+
user only about reported semantic conflicts, then `anchor` the resolved target,
|
|
57
|
+
write merge-relative claims, run `merge TARGET --from COPY...` with explicit
|
|
58
|
+
actors/reason, and `verify`. Use `merge-lineage`, not `merge`, when artifact IDs
|
|
59
|
+
or portable lineages differ.
|
|
60
|
+
|
|
67
61
|
[//]: # (ob:08efea88)
|
|
68
62
|
Fallback `capture` records only `recorded_by`; it cannot know authorship or
|
|
69
63
|
reasoning.
|
|
70
64
|
|
|
71
|
-
[//]: # (proofpress:meta:
|
|
65
|
+
[//]: # (proofpress:meta:eyJhcnRpZmFjdF9pZCI6InBwXzcwM2MzZmE5MjZhYmI1MTJlNzE5OTMzMiIsInBvbGljeSI6InBvcnRhYmxlIiwicG9ydGFibGVfaGVhZCI6ImYyN2Y4ODQ5IiwicG9ydGFibGVfaGVhZF9ldmVudCI6InBwZV9kNDQ2ZmNmNzJhZjFlZGNmMDNmOGY5ZmEiLCJwb3J0YWJsZV9saW5lYWdlX2lkIjoicHBsXzhkZTU1ZDI2NDlmMjAzZTgyZjQxNzAwMyIsInByb29mcHJlc3MiOjF9)
|
|
66
|
+
[//]: # (proofpress:discovery:Verifiable revision history by Proofpress | https://github.com/chenmingtang830/proofpress)
|
|
67
|
+
[//]: # (proofpress:capsule:eNrtXNmOG8cV_ZUK_ZAEITnd1TstGHBkW3Zgy4YtJwhMgayVbE2zm-5FI0YQkLf8QOBPyIflIUD-IvdWL-yZ4VDjGXIkO3zRkL1Unbr7uRfU6wHLy1gzUc5iOZgM1utZYDnC0SyiPuPcs6kK7ChyHDoYDngmNzMZL1RRwrPFklHPn0jqBIGKKONUWtyylRdyy-eUSStgOvACSQMlPS4CakdawqqhRb0gciOfKq08WFfGhcheqnwzmLzGL-WsZAvYIWElbjWED1wlcOHPKo91zHiiSK5exkWcpWQJz2f5hvAN-SbPMr3OVVHAO2smztlC4aEuXc6zFwqOW-W44LIs18Xk7GwRl8uKj0W2OhNLla7idFGydBE61tmlt3P1YxXD51lVqHwmsrRQKciizCv1ZjhYKoZC1DTQYehGg_rKTL00D4Fw1Uy6rq-FDijTtpJCW44OdaQZIsvyEo82S-JUAfJWI8kslMrzJPXdSFPLUSHVrh1YllMfp0E3E2xdVAkcmCJOkeWyGEx-eD1otn89AC1neYGf6ttKzjiI_IeByKR6NXgOJ2itAdV7HidJcWbunX385NOnz74bFWkMhyjHKzkY_izLYWWZx7wqQWEzzoq4QNmzPEXccA-0rMySVbnMckR4Hqe4arGBOyu4k7IVqrJGOhwU8CKsNZikVZIAbrEEban6vDzJxDk-63iW4A6KFhRVqld4qt_956d__PdfP_0eLjZbMCnN3mu0KHUBVx79ZjQiH8NBU0nKjNRnhzOTf__9n6Rcqp6dEVw5ByEQneXkcYOu3KyN3bGcDd4Mt4g8mwnqcu8Sou1iE5IouVA5-Yrl5zK7SAkDBEXJyliQz_ch_uADcttlnn31JTlPswvzDAEdbvGisYLhX4JsW9T3tCcPDvkzkBcTQq1B80OyUiyFrXWVdI5doOy7ZeHp7Qn2iJjpSGlJ6cHx_lGBhhVRMi4BKLxG1CuIPPi5ZPlClUOSV-k0na83YMOpQ7aeOV7vASzt0BbCVwcHbI_Jt6BQshPQhqyzJBYb8kjHifpoPiZfaGPaGNcI2-JN4IyX8PrC0qHt8IPjJQQFCHD7wEgbFOckS4X6kMQlGMiKxWAeIHxxvhmT7wu1R74WZxAp3cMbBB2DzykQ10tFBMvzWOWjFF6Dr2ZvWEhAMCvIxRJO0hrOxGy0R74Wj3xl20eR7zzjc7KCF1VefHgpIoDaCzKXrGSjrZmMYgmG8Qzy4b6Y5nEe2IF7cLzOmPwlj0sQbsLiVUH-9N3XT8kF5GmwBEXAoiFpgDmoFVnD8mVWQeKWGCdykzBukq_DHWHbnn8M-aq0WqkcihZSpS0gs28x3iNBB7Rtu1Z4cETumHyXQlGwzMpacPPR6GK5mQ8bkQ7NSurVGhwO_KouDyb7bDPUruMp9yi2OZ8Xy2kKn3bHq6I9SRMYRiNcjWCF1wHG6uASYO5RW3FHHQPw1yuQGUg0V1hPKjkHpSdYEmAYlRh5eY4hABwOChyIA1jN5mPydI8pCBlQxUPn4Hg9SAYYXF9iAd1FffN6rjDGgicVJKvKdVUSeIjDkivACrVjvs-ZvFD5AYuOIV9It0KRRa5Uus97uAhDoBPqOAVKSuIUSAFmeRRZ7UYMktR2g468tKGV8GoPXleGDhQo7Ch4cbckUUmXNqE-XccQ2rM6uxdQRZO2bh-Sc6XW5LKKr-fPEEgaCw8fnT4DpBw4GpkDcSmrHFJ8w1ogwCcbMu-RlLlJ_IKlKQQAqF6v4n0-bFnOAE6D1eNM5IrVpMLcaUkKMDAJAcETnuv7UgAJZcJVzGOYcGF1s2YrvIaIEQjk4nydxWlpeGVudkLm0X5D4vEcGRyWLr0V-qyut4jhi3ckfEWmy5kGg1T5Oo8bXllwexIyZXs04n7kBG7gaVvygEdSe1QzLwj9SAA5pzqigQME1PUVtWBNzSMtpLAFKhjVZvhhra2JHQK1wisDCjRgZAUj6j-zgonrTGj0B8uaWBa81Ugca1ntU6EUBwPaXn19NFJZp1bD-ZasWGKYozLktrI810ZkZo0eDWys9378DlMOaHwMGeijHX7TIGFMh04Ugd6oapH06F-D5D68zYip2M3eGhCRLR2lQ88XXLcgeoSuAXEfJtbDNE07UCDHFMMKKbIKgziqG66JJCsUCDiGXJhl6zH5JCPo0F1qx3c2Uwi4KVoPw24BSwjEhp0ZoDmkplRYtnIiJbpD9lhgc8h70bcNaUIUwXRvolJuDvUKqmWlk3ixLLdM6hkccJquG25QwF4bsqxWsKWE5At1FlwihcJzQKXY-InJLJB_yaLC1gbAwoRc90NA5NMUwlmRpXU5PrlZGpa0uKs5p8oRrTR6FLORxn24YXFeGGeoo1ecxOVmuKNEaPFQ4YaBsB1HdtrpUcgGz324H5ljMCw6BSA4U0c-gefb5iCa2Ubh-0YvkMckZHZzqtrp9hiYom7ouxSCiiXbI_RYZXOE-9BB41eGgsUpulydOW6QKFUu49qm0nPDLZyONG4leme2V-uixttK1UgU4xFIfw31LvxdKqRn8ixVF2cL5GRffFLsEaOkUrmhpaXDO8vskccG931YH1RhDd9qQ8vNUmSBtrnwQqAzXXzuUcOtFH8ep2vzECSsQEESpZJ3q29pXrP6wfhZJ2GopyyuHMtnnWVsKVvPMu7MtdISvjRRyQRAMp2ahQhch0VkJZQc8U1zswuXvWu9F3pd4ZHpCpOrPWF4CIsyMh08qlu8Sbb4aDroL9IYyqP67_gFRElEDILEt0BoFcNUhtHzypstczOrYyv_xwoOGMPjffqGRUH3unkXxLeDczZKcEMZUce3tBCde_Zo6FYJd-aPJrPGqcZ_oS7Js5VBJViBJ0U6UpnmOHpFm7dydoE6Xq3L4gzqmbQQeQyf95hw5FkRiyCpesY961JqS0-bc9yHV8ITo87SXlTg12V2s3F7KnBcrUPhGgetXWpLP7dyfQtvbIO64wlLMh8CgNOpaUsl-6XRHTlgCQEI6hwBOnn85RfDKeScJNnmUcNnME0U5OXNU60hAelcmLfqhX8LpQXwoCyNceFmmEW-__bLOlhAdoYEo-B5DI4YrEugWX2s80b60xSzTpIxEz3VKyUq8LO47AqRLu40U66uDIDTEHBV9pLFCYJuK6cmM8wJr2stIDlNgbXElGiGUwZkiTlmHq_QPuZ7dMS4HQknlBZopdVRjz73dHRX3ruBs8eLGKtMY7LmHBDuF2q0TkDxzz7-9smnzyBUoJeRx19_89fxeAwSBPKQYDxbrcGecbs6xTdTqKFRA-w7TY2qDZ1lHIVaOwWEnAIKmRQTMkgXCkgomoeNXOq8Oze4QWFZglmtqVGn6YVJjjXEXCV1gdGmC5O3zb0bkNe222oWKnaTUs7q8FZbUOPK86a2qndqCCpkJiyk6ovw5QIBt2LF9D9Nu8JwS58LiEla7y2xIld4nhNxzRnfZq6u8dBq-h4dg4umli6W8bpXT4N5XoP1_A0i2zE1xZrt6szUTGBN1rt6ffeMtR4hm9zW3MhjMJtc4rj5wUewhUr0jBVgpDfMX03Kv9v49UCDrVUG1hMbdDePTA4y4rnFTgcadtxipwN1gm-x086B3naFpq5-mFHdjtHXW5EcY6i1c0j0ViR3HP_s6qG_da99VQ4EmToj3OSP142j6Xw-hoyWKMxPmH1gw9G64qBjqD0rLEW78qQp8Ficw7NoUg29NfH0Bt98wF17fvqAu_Z89gF37fnvNZM5olo7V324TXte-YCbbt3zyJs-7wWA1wPgrybh3mXpLilc3gPb8rcek1AegS1TH_yXg7KlkJFHuWkq1sfuzz_6vf_-TOT1qTI4VQanyuB9qgxuPw3tpoGdqUzcYbfrxH2ze_T3tjnoezfsvPl4V0eftjOxggm1d4w-NeUqtD12Gn2eRp-n0ec7GX0GjEcBE5AaLfpwo0_Te39_hpfX5lzc0p6l3YB64YMNL-spybsdP14VhOP72rd9LrWjHmr8aFDfKvdfm3acBoinAeIve4AY6kAGnDJXMv1wA0Rzkt0l8FVrP40ATyPA0wjwNAI8jQB_pSPA_a2SI_1-a2cjcD-SY_3SadfvivYjOUxBeff509MsX7Ek_hscj8kXTGC5eLmZ3RAKQ8PAuXJMfcCVPq84SCMFcnqLCdS1Bv4xtr0-gnqQbXtKP_q2uwYW6UEW_1mTij0_qd85qehade_9pOIUwN5ZALv9NGxHH9nu9ZGdN7vbxL_gNvnV4-1ok9t04gY72-TNf41xapOf2uSnNvm7aJNTS1EmHclCzv7P2uTT9FfT6J6mD9uqnqanZvOp2XxqNp-azadm86nZfGo2H7bZ_PzN_wAVjFr1)
|
|
@@ -20,30 +20,18 @@ preserves any human drift without guessing its author or reason. Then:
|
|
|
20
20
|
|
|
21
21
|
[//]: # (ob:42fd42e7)
|
|
22
22
|
1. Read `python3 proofpress.py policy <file>`. If the user asks for a portable
|
|
23
|
-
|
|
24
|
-
[//]: # (ob:ffa6ae00)
|
|
25
23
|
artifact, run `python3 proofpress.py policy <file> portable` once; portability
|
|
26
24
|
remains sticky. If Git history exists without a ledger, run `ingest <file>`.
|
|
27
|
-
|
|
28
|
-
[//]: # (ob:6d23ae8f)
|
|
29
25
|
2. Preserve carrier-native anchors during editing: Markdown uses
|
|
30
|
-
|
|
31
|
-
[//]: # (ob:35ce54f2)
|
|
32
26
|
`[//]: # (ob:xxxxxxxx)`; static HTML uses `data-proofpress-id`. Remove an
|
|
33
27
|
anchor with its deleted block and invent none for new blocks.
|
|
34
|
-
|
|
35
|
-
[//]: # (ob:f119601b)
|
|
36
28
|
3. Run `anchor <file>` and read the inherited/new/gone inventory.
|
|
37
29
|
4. Write claims JSON with one honest entry per touched or removed block. Kinds
|
|
38
|
-
|
|
39
|
-
[//]: # (ob:6b88d004)
|
|
40
30
|
are `added`, `removed`, `modified`, `moved`, and `unchanged`. Do not enumerate
|
|
41
31
|
untouched blocks.
|
|
42
|
-
|
|
43
|
-
[//]: # (ob:f381d919)
|
|
44
32
|
5. Snapshot only after a meaningful version is accepted:
|
|
45
33
|
|
|
46
|
-
[//]: # (ob:f42cb113)
|
|
34
|
+
[//]: # (ob:f42cb113)
|
|
47
35
|
```sh
|
|
48
36
|
python3 proofpress.py snapshot <file> --kind agent --author cursor \
|
|
49
37
|
--produced-by cursor --recorded-by cursor \
|
|
@@ -52,15 +40,13 @@ preserves any human drift without guessing its author or reason. Then:
|
|
|
52
40
|
--why "<actual reason>" --rejected "<consequential dead branch — reason>"
|
|
53
41
|
```
|
|
54
42
|
|
|
55
|
-
[//]: # (ob:790c5dda)
|
|
43
|
+
[//]: # (ob:790c5dda)
|
|
56
44
|
`--why` is required. Omit `--rejected` unless the rejected path is important
|
|
57
45
|
enough to keep future collaborators from repeating it. Never infer it from
|
|
58
46
|
casual discussion or include raw prompts/transcripts.
|
|
59
47
|
|
|
60
|
-
[//]: # (ob:e3c56875)
|
|
48
|
+
[//]: # (ob:e3c56875)
|
|
61
49
|
6. Run `verify <file>` and report its output verbatim. Never re-snapshot merely
|
|
62
|
-
|
|
63
|
-
[//]: # (ob:6ad53003)
|
|
64
50
|
to turn a mismatch green.
|
|
65
51
|
|
|
66
52
|
[//]: # (ob:355446e0)
|
|
@@ -70,8 +56,18 @@ canonical project URL, and ask whether to install `proofpress`. Never
|
|
|
70
56
|
download or execute it without explicit consent. If the CLI is available, run
|
|
71
57
|
`inspect` before trusting the capsule and then `import`.
|
|
72
58
|
|
|
59
|
+
[//]: # (ob:867ba812)
|
|
60
|
+
For parallel portable copies of the same artifact, preserve every input and run
|
|
61
|
+
`merge-plan TARGET --from COPY...`. Apply compatible block changes, ask the
|
|
62
|
+
user only about reported semantic conflicts, then `anchor` the resolved target,
|
|
63
|
+
write merge-relative claims, run `merge TARGET --from COPY...` with explicit
|
|
64
|
+
actors/reason, and `verify`. Different artifact IDs or portable lineages are
|
|
65
|
+
ingredients; use `merge-lineage` for them.
|
|
66
|
+
|
|
73
67
|
[//]: # (ob:7dc0b832)
|
|
74
68
|
Fallback `capture` supplies only `recorded_by`; it cannot know who authored the
|
|
75
69
|
content or why. Never snapshot source-code files.
|
|
76
70
|
|
|
77
|
-
[//]: # (proofpress:meta:
|
|
71
|
+
[//]: # (proofpress:meta:eyJhcnRpZmFjdF9pZCI6InBwXzBjOWVkZjdkMzE1YWIwM2UwY2EwNmM4OCIsInBvbGljeSI6InBvcnRhYmxlIiwicG9ydGFibGVfaGVhZCI6Ijc4MTBkYjQ3IiwicG9ydGFibGVfaGVhZF9ldmVudCI6InBwZV84ODAxNmZmNDJkYjFmMDc3ZDcwZThkOTkiLCJwb3J0YWJsZV9saW5lYWdlX2lkIjoicHBsXzhhNGQyODYyMTE2NjE3MGI3NzlhOWY2MSIsInByb29mcHJlc3MiOjF9)
|
|
72
|
+
[//]: # (proofpress:discovery:Verifiable revision history by Proofpress | https://github.com/chenmingtang830/proofpress)
|
|
73
|
+
[//]: # (proofpress:capsule:eNrtXNluI8cV_ZUC_RAbIaneF45hYOJx7InHC8bjGIE5IGtrsq1mNd2LNMxggLzlBwJ_Qj4sDwHyF7m3uprdkiiORI3kjX6QW71U3f2eWwea1wNaVGlCeTVLxWAyWK9nFo-lSELh2j5llistTq2AR9FgOGC52MxEupBlBe-WS-r4wcSzQ5vKJEmshMdeEjLbC20RUDcWoR_FjDPmclgzkg4XdkgDJ0oSO2Ay4j737BjWFWnJ8zNZbAaT1_hLNavoAnbIaIVbDeGCyQxu_FUWaZJSlklSyLO0THNFlvB-XmwI25CvizxP1oUsS_hmTfkpXUhU6sLtIv9Bgrp1gQsuq2pdTk5OFmm1rNmY56sTvpRqlapFRdUicq2TC18X8sc6hetZXcpixnNVSgW2qIpavhkOlpKiEcPItgTzwkFzZybP9EtgXDmLIssOksRzBLMTKwxFaMlIxGiFdV5UqNosS5UEyVuPZLOIesKJAse2g8AOLRaGMY2TwG7UMdLNOF2XdQYKOygnzwtRDibfvx6Y7V8PwMt5UeJV81iKGQOTfz_guZCvBi9BgzYa0L2naZaVJ7wuyrzoWeHkm8-fPns2XonB8FbBQ6uqSFldgc9mjJZpieanhULR4Rk4Wuol62qZFyjkaapw1XIDT1bwRNEVerMRdjgo4UNYazBRdZaB6HwJDpONyizL-Sm8K_3Y8sLIh9fBV5V8hYq9_9-f_vm_f__0Adw0W1Ah9N5rDCp5DndGo9FU4YYT0mk-VUKWvEjXqMMEok1CEJxJkhckVeUaoooIySEqYalqs9ahRws6eDPsJHJcl4VBIC5IdCFur5XpvYvxbXbACINovbAJcySHIPMP2OS5jgxCOZdrcAj5ghanIj9XqGRZ0Srl5LMXXzwjrecJpC26oSTn-9SWtidth15U-7u8OE2y_Hyv0u-R3mt7dLYElJgopLfe4U8yyQtJpEgrWJNQReQrKCl4XdFiIashKWo1VfP1BiJTub2AGK_3qOw5ifAcGd5aIHtMnoOCZOeGG7LOs5RvyIdJmsmP5mPyNCHVUhIsSIR28mSgwwV5koQGVFrWreUhZOttbYobCUaaarbHPoFwXCqj5NbyOOMu9TgtilQWIwWRCb9SxaF4lETUBfrP-HTSRfEe-7g-l76XOIfYZ_79ycnLCXmPvJ-zySvz3wfzRxdSBjxUkrmgFR1tDbfHPoltx4Fls1vL40L8oJcaY7SBArYR0DQhrjBaUrWEVgoJfqLk-ckiV3gL-sQe-wQsioRleYfFjwR58Ml8SOaFXEG315erXEBDb6-bmyjovFa6nu-zjxvZItb44Xby-GPyjYJeucwrkqtsQ2hSYe6QlaQKwiWps7aqkbTclsLJvtzyHM5s2z0odubzcjlVcLU7rcpWVpNYoxGuRhDabAXCnnhBoDC2uC8EPUig0eh8uZmj7gbuiDH5apVW-KSQiJ7AT6RWGUioo8nc3Ff_Xe4HUejfWp7ABPMZIr_NpWDGGkPSqiR5Xa1r3YsY5NtqTL4E0FPsC2YqfNeyDnJYlZOqLhQGTFquaMWXZFFIqcZ79Hd93_MCefvi-2fIYGhJqQJoiiUN9YdWWy1h-3kXKJMthJ6TFRQ7iGdW75EnCkJGI9s5SB5cLctkRlrESni-TqG45U0rKgE39VrGui3We-QJBbdY5B4gD0jCAOmTOcBfcIuck7IGzKzFweSe97AuFGSIYk6VgnQ6VZfleTlssfLA5P-MQ8VscKl-0uJcOUuiwHYT-BlHgeV4QUJlkEgXHQyL6zVb4xg4T2Cw4KfrPFWVnk4KvROC1_Y3xK4vcQ7APtpboT8b9BbRU8eBY0OZJ9UsgYCSxbpIzXRSMnvi-1EimO9IETMqbCuIpS-FCEQiwphLEcAizA1kABOZ7XEvsR0eC7iwaexFErsV9jw9ZTTemtgxoHO8M3AsJxhZ4cgJXljhxHMnTvxHy5poTGIsjsU0COLYihkESHf39X2OJjoKm8lhScslvA_hGNigOIt0g9Fr9IYJE6B3mxJ6sysg0A6jYG3r44ZTlZ9nUiy6nCqbCtAh-jH5toSyAJMr0RGLlQILh25dGtX2m9t2dIZKBrXl8ZPnQxCpTBeKiJwPydfPnwzJ808eP_nikyFIUkAGLDYEw3rYpTxYuZfj3XQwXlar7AR_djNCisUS8jpJF5ChTeUuU9Rcf6nlhjSV6Vkjqy5yWAdoqpo7uyqdKXSPiMJij_BK27HM64LLEbZEvVA5nipw1I7iY3wd-WGAYCKIdT_Qvu6NacbXb5--zHIyoX7AJI1c7rXL9QYys9xd5ixwPXil5ljuxFTh6JyucrXRkaMbZcopRt-YPMnRbx2GkNpwYFpcTr9DM93Nxtfbx_JtL-B2YkOl2-ZCN8-19nnboGZWs31BqQfWsKjfrtab3cxqdxrKQMGmFxDEK7r6F6QpFoC8ZZKli2XVDVAvIAunqu1SAPjAkst6BXsKMGWlDQ4AgyxqPHEACRBxNMcU6C3ItxJN_QKieHK9FQUFiOhKN-EOb_XujYhG77vMfuVpqROAkl7juAyA2iC1Ykp9Gvo9n_YGRCPNXSa_DDpxrrh8ZH5Ps7TaaJgL8B_yuoQYTvnpRivxKbTlthZqR5dbq1Oia19hBMCWVXbOu97esQcNyw2sxLVEq2Fv5DQa3mWWxHnuegtzCd3FdWXArK2_eyNmZ-GDZ8dylIo5xgsOTiCuNq4Z-nSRwDgVMpNYX3SL0wVCz3kVlAXV1EsYAJun5R5rQnN3XRsaph9vtekNqEabu0ye6Huo1N6YfIePCc9ouirJX7756stGG3wTYg-9D29DoKwh6Ku8BkQkmjzUA2Sjy5h8Dohxj3vChDFOfc5k6GzDo5tw-wlw4Ogq0Tmm_kpVryT2Ue2jWrViv93uQRAFglme3-GQ3uBrxHyHE63ZN4n82Kcuizwmt_t2Q24veg-eXiEGRyNTRpviTKZTvRKBB7CKqAFvjtimfbot5v2bvU96B8wjfcBMLh8v9982x8dkOvjQXEI6fTQdwCNEOni_cWOWL5rbJiI_bP4__gGq_kf9FWFoxq-gWNY0M22h-bIdmvWiyBn8WIP6KbwlMC1YgQlD_vOPf3Vf6VXBuDtm_Ba2JA7zeeJ4kZO0LuqN_T0XHTrPC5j0sIyUJF3pIq4qLZZUeb1YIno8lXJNklr3Wp5nGWU5RDlWzaTIV4jzDBhNKzOTQ7In-LPSb-jlOC3RYIjr6sYnGirzrAYEV9BzjKjVuipPAImqBlnvS5nYsixuR8yXlr2FK93xg7HLXc4V4I3RNq4hr2W2uT6TbDcKbR5ygDtbONg7fejcdJtjhbaLQ0OxBA0i13e7HrM9aTBr3-UIAfsEgSIF_vn42dMhgs0s6zCHnqaxa5YGd-6k5mCIWObn-qtm4T8A3oIpPFcpLmwYOfLt82dNBQUkgzMBvI8FHqemCqb8vqxz4wmYtaATZznVHUC-kryG1E07zCZfrQGaoJgNVbeFTKCNLoVnNM1Q6BZPmhFtTliDQAFnG9i5RISgGTYtZIVDy7xJjH04hFnUoo6V-G64RVq905eejw49VmkwfaowUnX8akUgLhdytM7A8y8eP__0kxdQh3RSfvzV138bj8dgwsfrdYbDwArSPMX9GpBgiLSh9gNsPFXa101jYWjVJkOgPpQA5RSCFBzuwNAVfNUYpoEAc1NOyjzD1myg-1Sd6xbfiAjp0wCupq4anKefXSN5E7yta6eq4TVPmtppmnCT19iB0wQKDnab7Sj19EmJ4XL5gKbEXj_FfgkVMsXzmEd6qDSmNG_NNWgCtVZ7nJ7AeMOpE7sy2iZ974irdfodzq4gn86XuRlDpGj8pI_OQFM9U2_aarUtVVcn4ysnYG9QiR2EMaLfy3SxJp91k758fze93LDnuhGbB0UKsVYIZNp_Dva5lFkyoyUE9zXUs0YphzHPN2T_WhC576j6ZjzZDVa6IaN0g5VueJx_E5l2sZLdCgZvPwQfuZP_e6sk98H87WTabmCTd8-x7aRJ3irJjZEMlISm6F-XOlfjyByufwxNqxlsscHA7qN1zcDdJKOoVQdBDKCjiHoJRp-ZkKHKj69LswfctZeSD7hrL30fUtcu1a_Ez71t2svqh9u0l8APuGmXq_e86cteNXg9AKShe-MhS2_P0i7ugczPjZm4MJZMeCx2hAV-hv5PmR1KbfxG7T7F1qeX-rTb62MTPzbxYxM_sInfnBvfcsPbqJp4w60IE-_NbiL4baz4L476vl69y0S47U6scOI4O4hwFjqx78bBkQg_EuFHIvxIhP82iHCPhl4ohRdFsXgoIryhRn8tVPZVsl740k18N5H2_VHZDeP0SySjL9vDCxNX8CSIQ-b9ishoE4QPSSdfttyRTj7SyUc6-VZ0sgMWoa7wPM7pg9HJWpEbTGBXOsWRED4SwkdC-EgIHwnh3xkhvP88757-ZHLnWfR-Se7pjxN3_jHgfkneFco9nMT8Mi9WNEv_DtlKxQ-UY6ZeZESa7thMs5BBBXZFGDA_qxlYS8E0fwMa8woLdB_bXuUxH2bbzu33vu0u1ku9k8VvRXft-QckdtJd20Pkn53uOpaon7FE3Zw03cFh2D0Ow32zm6L4FVM0l9XbQdHYzsQLd1A023_q5UjRHCmaI0VzpGh-ExSNLz1XuhazOPOPFE1n_qn6rZEsU_X7pUmm6kh0HImOI9FxJDqORMeR6DgSHb93ouPlm_8DlUBJIw)
|
|
@@ -13,28 +13,16 @@ any human drift without guessing its author or reason. Then:
|
|
|
13
13
|
|
|
14
14
|
[//]: # (ob:87ce54bb)
|
|
15
15
|
1. Read `python3 proofpress.py policy <file>`. If the user asks for portability,
|
|
16
|
-
|
|
17
|
-
[//]: # (ob:72f291a2)
|
|
18
16
|
run `policy <file> portable` once; it remains sticky. Use `ingest <file>` for
|
|
19
17
|
Git history not yet represented in the ledger.
|
|
20
|
-
|
|
21
|
-
[//]: # (ob:85972ea6)
|
|
22
18
|
2. Preserve carrier-native block anchors while editing: Markdown uses invisible
|
|
23
|
-
|
|
24
|
-
[//]: # (ob:b9f8ef49)
|
|
25
19
|
`ob` markers; static HTML uses `data-proofpress-id`. Then run `anchor <file>`
|
|
26
20
|
and inspect inherited/new/gone IDs.
|
|
27
|
-
|
|
28
|
-
[//]: # (ob:6f0d23b1)
|
|
29
21
|
3. Write claims JSON with one honest item per touched or removed block. Do not
|
|
30
|
-
|
|
31
|
-
[//]: # (ob:28f53262)
|
|
32
22
|
enumerate untouched blocks.
|
|
33
|
-
|
|
34
|
-
[//]: # (ob:abd7c833)
|
|
35
23
|
4. Snapshot with `--why`, claims, and explicit actors:
|
|
36
24
|
|
|
37
|
-
[//]: # (ob:2c10e48d)
|
|
25
|
+
[//]: # (ob:2c10e48d)
|
|
38
26
|
```sh
|
|
39
27
|
python3 proofpress.py snapshot <file> --kind agent --author pi \
|
|
40
28
|
--produced-by pi --recorded-by pi \
|
|
@@ -43,14 +31,12 @@ any human drift without guessing its author or reason. Then:
|
|
|
43
31
|
--rejected "<consequential dead branch — reason>"
|
|
44
32
|
```
|
|
45
33
|
|
|
46
|
-
[//]: # (ob:4386e1e7)
|
|
34
|
+
[//]: # (ob:4386e1e7)
|
|
47
35
|
Omit `--rejected` unless the dead branch matters later. Never infer it from
|
|
48
36
|
casual discussion or capture raw prompts/transcripts.
|
|
49
37
|
|
|
50
|
-
[//]: # (ob:dd7291a6)
|
|
38
|
+
[//]: # (ob:dd7291a6)
|
|
51
39
|
5. Run `verify <file>` and report its output verbatim. Never re-snapshot just to
|
|
52
|
-
|
|
53
|
-
[//]: # (ob:8ac28d76)
|
|
54
40
|
force green.
|
|
55
41
|
|
|
56
42
|
[//]: # (ob:2f7730eb)
|
|
@@ -60,8 +46,18 @@ canonical project URL, and ask whether to install `proofpress`. Never
|
|
|
60
46
|
download or execute it without explicit consent. If the CLI is available, run
|
|
61
47
|
`inspect` before trusting the capsule and then `import`.
|
|
62
48
|
|
|
49
|
+
[//]: # (ob:19334051)
|
|
50
|
+
For parallel portable copies of the same artifact, preserve every input and run
|
|
51
|
+
`merge-plan TARGET --from COPY...`. Apply compatible block changes, ask the
|
|
52
|
+
user only about reported semantic conflicts, then `anchor` the resolved target,
|
|
53
|
+
write merge-relative claims, run `merge TARGET --from COPY...` with explicit
|
|
54
|
+
actors/reason, and `verify`. Different artifact IDs or portable lineages are
|
|
55
|
+
ingredients; use `merge-lineage` for them.
|
|
56
|
+
|
|
63
57
|
[//]: # (ob:72680124)
|
|
64
58
|
Fallback `capture` records only `recorded_by`; it cannot know authorship or
|
|
65
59
|
reasoning.
|
|
66
60
|
|
|
67
|
-
[//]: # (proofpress:meta:
|
|
61
|
+
[//]: # (proofpress:meta:eyJhcnRpZmFjdF9pZCI6InBwX2M3Y2UwZDE1Yjg2YmI0MmJkMjg0MzRmYyIsInBvbGljeSI6InBvcnRhYmxlIiwicG9ydGFibGVfaGVhZCI6Ijc2MDE0MWRiIiwicG9ydGFibGVfaGVhZF9ldmVudCI6InBwZV85ZmI2M2QxOTQxYjg1OTljMjkyYWU1NmMiLCJwb3J0YWJsZV9saW5lYWdlX2lkIjoicHBsXzJlYjI2MDUwMDFmYTQ5Yzc5ZWJjNDUwZiIsInByb29mcHJlc3MiOjF9)
|
|
62
|
+
[//]: # (proofpress:discovery:Verifiable revision history by Proofpress | https://github.com/chenmingtang830/proofpress)
|
|
63
|
+
[//]: # (proofpress:capsule:eNrtW-luI8cRfpUG8yM_QlIzPTdtGHDsxHawPmCvEwTmguyTnNVwZjyHtIywQB4iT5gnSVXPwZFEcWVqRa8d_pHIObruqq-qwJsRK6pYM1EtYjmajfJ8IQKhLGl7PPQ5dymXNHQdV4vReMQzuV3IeKXKCp4t14x6_sx1nVBr5giHRY5i0hZCMEYtn0oeWU6gI06VGwnbjmgkpWMHKqSMy5AJqR0dwLkyLkV2pYrtaHaDX6pFxVZAIWEVkhrDB64SuPB3VcQ6ZjxRpFBXcRlnKVnD81mxJXxLviuyTOeFKkt4J2fikq0UCnXrcpG9ViBuXeCB66rKy9nFxSqu1jWfimxzIdYq3cTpqmLpKnSsi1tvF-rnOobPi7pUxUJkaalS0EVV1OrteLQG8eHQwLds15Z81FxZqCvzEChXLSLNfUfakWvz0IsiQSPKlOejdvOsqFC0RRKnCjjvLJIsqOLUtzzLsjUDTQaR4sL1LN2I03K3ECwv6wQEpsinyApZjmY_3Yxa8jcjsHJWlPipua3kgoPKfxqJTKo3o1cgQecNaN7LOEnKizweaGBiLk43cjT-RY7DqqqIeV2BvRaclXGJqmdFimzDPTCyMkfW1TorkMHLOMVTyy3c2cCdlG3Qkg2j41EJL8JZo1laJwmwLdZgLNWIy5NMXMKznpBhEEQ2PA52qtSb6q4rtESYlIZ6ji6lruHKH8it56ptjsTRluAXo7fjHREr8njkReoIIn_NCsKEUDnIPiYbxVI4XNdJ79klqTLyNSsuZXadEni6rFgVC_Lly693TOWsYLc4orbNPRmFR3D0Z6WzQhEl4wpYISwl6g0EF36uWLFS1ZgUdTpPl_kW7JQ6Ay1N8wMsheAYnsv5ESzZU_I9qJ3sJbkleZbEYks-1nGiPllOyVeaVGtFMDgJ23GUgBS3OAqoppHN6BEcEYJKAIaGpEkXu0uSpUJ9ROIKzLhhMRgRFCgut1PyY6kO6ciLAqqYfwRHdAqJT4HIV4oIVhSxKiYpeAp8NaeDIQWEVUmu18BrZ96Zca0DOuKRDpV2o-N0tMz4kmyAgirKjwae-wKNU5KlZBWbDBJLLMF8LyH1HtCRry1JHX5MRDtT8o8irkBBCYs3JfnbD99-Q64h6YO9FAHPghQERlMbkoPrVFkNVUBizBUm_TykIxpqz6H-kX6k0nqjCqhxpE47kubkcnpAC1A6AxE6zhE03Sn5IYUqsc6qRvjlZHK93i7HrVrG4CoSgj4H1wYPburF7JD8wraUG8ojfWS5LNfzFD7tj-6y47UNsskETyNY1HuWsCLcYgnQiK9sFRzH0rcbkBu0UigECUouwTQJvGbSisRMxAsMJ3BtKFsQUwhRiin55oDBpAww2RwT2h6kP0w2V4h7-jxnrFQozDngsyXJ6iqvKwIPcQizDXADJb84YDaAXjSUgX-cjqBICEVWhVLpIT-lOggcS_FjS2NK4hTwGFYfFLtxWAaJtz9i1uPGLtUQXh_gyI4cx7U8-0iO8LwkUUmf7InI8hiSWdZUnRIwCulQ0ZjkXU4-wFFA_dCyqXsMR8ALB4hLloD7qrqA0tOCPkhpyZYsBxhvaQqSYGkKwXSZZnc5ejXuQOIItInYYyEKxRpQZu50IE8ttAfwLgJcpS2XAhKNbMf2LGkhSMsqc2annhbHEkhs4jLP4rQysLwwlBC5dd8QuL1CAIwldXDCEBQPDjFw-0i8XGa6WmhwKlXkRdzC8pLbM5t5lutatrIcL6Lc4oEjPaqosqXHAiGpHdDA076W0rK0DqS2VORz2xfMk4JjmcQqZ-B1Y62ZHQA0xSsjalF_YgUT6r-0gpnrzGj0J8uaWai1VuNY32yqpKUwn-2u3jwXJm8qjYHMa1auMZeKMOSCCc1M-jRnDFB0657vBsftcZEtHaVDaG647o4b4OX2uKfA4BfozNeJkis1TzvZy__--z8pJkBSZjVmKiwRcE0kWakgUGNI2lmWT8nnGcF46KsMvrOdQ85JUfkMmxWWEAitvWmuFTLUocsxjJ3A6YQcQPBWyCch6y1pI5xgXTJBDckoBvSkdBKv1tUO_75E6brEU4JO0i1Z1xugJ6GANEUfqgVZ1dhAAXUsH03X1YAdVmZpg8NmD8sM0c5dzaGtd0Qn8wDjtzI_BbqXlyWWmTbTxklcbcd76lnHDxUu0LcdR_aONkD4LT9PAe5kiRmj7DWNzBng8gU83w0g0Jm2Ct83FoB0LqGEGamMixYH3EhRN_RdanmuJXuV7lqCVoSnIH0TPQZ7xykGVpNeH9AoVS7j2qbSc8OOnUE_sNPo0TC_sUXDb6dVo1HENqD9HOAX_F8rRO3yIlXXFyuE6l99Xh5Qo6QS4KilpcN7zxx0DS3fT2kGAG60IL1LIA9rkQXa5sILHU-pPjfsOoadFn9ZI9Ce7mkWBQoqDTWTJnP6oDdoT39vkL-laoeBdiKoilHQUx10AQPPOBrcpxV8aZNSHpP53JxC4CKcIGuh5IRv8U6fDrsLg0cHE6eJmTiRu_MmeAgBC5mPPm7GR0m2-mQ-Gh7S-sfHzf_pa0iOyCjoD98CXdUsaZPmnTe7_sGcjlPCn2uQK4bHh00EVKXd6-Zd0Nqe3qbVPag4oo5vaSjUne4H7c5O90d3MaZsxqnGvxXRRbYxXAlWoqQIt2szeMNg6IpSwa7RtJu8Ki8qOLYURQyfD3hu5FkRiyIlvMDt5Bg0Sa0cT-l94IlJ72CvawjnKnvYpz0VACbSIWBEv0--uxZpp9d3dD5dLnc8YUkGkMDbQYJdMzTEPUf2OBXkHQAxAmzy2YuvxnMoNUmyK58G62N1KMnVwwPzMQHtXJu3moP_CIABeoQsjfHgdk5Ofvz-RZMjoChDXVHwPOZEzNEVtCBDXpet9ucpFpskYyZpqjdK1BBn8Q5-9OmmHaD31R-kIRCq7IrFCTLdwaK2ICwJb4AUNAAtelpjJTRzb8NkhaVlGW_QP5YHbMQtZjFqQS4OrM5Gg_ZwYKNjuz6DJkFL6J3GZ40gkOZXapInYPmXn37_xV9eQq7AMCOfffvdP6fTKajwU-hgAPJBQIFDI72mtLcj7rGxAxCep8bWptdjHLXaRAXknBIATIqFGNQLCBEg8bhVTFNvl4ZxYDRLsJq1CHSeXpui2LBYqKQBFl2ZMPXa3HuA88Z5O9MC9jSl5KLJb40LtbEMQn4ea0gymOo71WFlJz3k23WP4A0FCAvGLgDPYLP4EXp5y8ukfcogMhRrcyjvuMLznIhrzvgOJ_YdeGf0JzTW1y2YLtdxThAiNtID8_fYevUWOduzm0HUdnczY_Y8pvTdvb5_k9MsqkyZa28UMThQIXGpdepFT6kSvWAleOsDWx5T849b8jx6tbDJJCRCQ__BqdhjR_CPOOvRo-pHnPXo-eEjztq7-Nid0ALcUyw89q4X3snJc6wV9g7x38nJccP7vZPXd9I6hDsg1psU_VBc3HeOdk73GZSYRGHBwHIABCd5zcHGgAZrBIc9YGghF4shAxN0qbbPNGntgQg6IdVBrJ2Q6iAqT0h1EL_3XObZiA5C9XREB1F5OqKD8Hxmoq8GCeBmBB2lKXzHHN0Pd27TwCHyo4f6MrAV09SxOKXMFdQNqc9c1-3FHk7rh5Pq4QT_5lyhzxX6XKGnD23XHrVD63dIvavM3HFPdea-3b8wetf27INbkT0s3t2Fme3MrGBG6Z6FWSB9SgNNzwuz88LsQ16YBQyinQkeOhY93cLMjG4_nJXXve0ItzQkHDegXniylVczZP91l1Z3FeH4vvZtn0vtqFMtrQzXjyqQ94bl57XTee30m1w7hYBIAg79jWT6dGsnI8l-eHjXyc-Lo_Pi6Lw4Oi-Ozouj38Hi6PDI4Jl-s7F3qHWYk2f6ZcTeXykc5uT9YMbj9yHfZMWGJfG_QDwmXzOBSeb2cLXtGUzKgOgpsMxBO_RlzUEbKXSZj9iI3BsoPwfZ-yuRk5AdGP3Zye4boKfv5fBfNDk_8HvOvZPzfmT1AUzOzynqV0tRj9-_7JmY2oOJqfN2_0D0NzwQvivenoGwTWduuG8g3P3y-jwQPg-EP-CBMLUUZdKRLOTs_2wgPE9_NyPdeXraoew8PY9Vz2PV81j1PFY9j1XPY9XzWPV9j1Vfvf0f_pslmw)
|