Skip to content

Latest commit

 

History

History
70 lines (54 loc) · 3.41 KB

File metadata and controls

70 lines (54 loc) · 3.41 KB

Contributing to loop

loop is a remembrance vessel built on Rusty — a guided life interview that rests and resumes, sealing responses with a hash. This document covers the legal terms under which contributions are accepted and the technical standards every change must meet. Both exist for the same reason: loop's value is a narrow, checkable claim about tamper-evidence, and neither its licensing nor that claim can rest on sand.


Contributor License Agreement (CLA)

loop is offered under a dual license: the GNU Affero General Public License v3 or later for the community, and a separate commercial license for those whose use the AGPL doesn't fit (see COMMERCIAL.md). That dual model only works if a single party holds the right to relicense the entire codebase — so contributions require the grant below.

By submitting a contribution (a pull request, patch, or any other change) to this project, you agree that:

  1. You own the rights to the contribution, or have permission to submit it under these terms, and it is your original work (or you've clearly identified any third-party material and its license).
  2. You grant Nicholas Vermeulen a perpetual, worldwide, non-exclusive, royalty-free, irrevocable license to use, reproduce, modify, distribute, and relicense your contribution, including as part of loop under both the AGPL-3.0-or-later and any commercial license terms now or later offered.
  3. You retain copyright to your contribution — this grant is a license, not an assignment. Your name stays on your work.
  4. Your contribution is provided "as is", without warranty of any kind.

Without this grant, a single merged change under AGPL-only terms would permanently fragment the licensing of the file it touched.


Technical standards

loop's value is that its integrity claim is checkable, not asserted. A change that weakens that discipline weakens the whole project:

  • Narrow claims only. loop's claim is exact: tamper-evidence on one machine, never tamper-proof — the seal-hash lives in the same file as the session, so whoever rewrites a transcript rewrites its hash too. loop is a local vessel, not a notary. And "intact" must mean every response is sealed, or it means nothing (an unsealed row is absence of evidence). State the caveat.
  • Tests-first, real before/after. A clean run is not evidence. Every integrity behaviour needs a golden-test row (./run_tests.sh), and tampering must be shown to bite — sabotage a sealed response and the right invariant must fail. Note the hermetic test stubs remember/recall but not forget, which would reach the real ~/.rusty/memory.lisp.
  • Built on Rusty, no new engine. loop is pure Lisp over Rusty's primitives (file-hash seals, the memory system). Don't add a dependency that isn't Rusty.
  • Match the surrounding code — its idiom, naming, and its quiet, unhurried voice. This is a vessel for a person's memory; the tone is part of the artifact.

How to submit

  1. Open an issue first for anything non-trivial.
  2. Keep pull requests focused: one concern per PR.
  3. Run ./run_tests.sh and make sure the suite passes before submitting.
  4. By opening the PR, you agree to the CLA above.

Questions about contributing or licensing: thelakeman@protonmail.com.

In memory of my brother.