Skip to content

docs(legal): recover review fixes that missed the #99/#100 merge window - #108

Merged
zaridan merged 3 commits into
mainfrom
docs/ht-5-recover-review-fixes
Jul 21, 2026
Merged

docs(legal): recover review fixes that missed the #99/#100 merge window#108
zaridan merged 3 commits into
mainfrom
docs/ht-5-recover-review-fixes

Conversation

@zaridan

@zaridan zaridan commented Jul 20, 2026

Copy link
Copy Markdown
Contributor

What happened

Work pushed to docs/ht-5-licensing-decisions and docs/ht-5-legal-texts after their PRs were already squash-merged. The pushes succeeded onto dead branches and never reached main.

merged my commits
#99 2026-07-20 03:10Z 03:18 – 04:08Z
#100 2026-07-20 03:37Z 03:40 – 04:07Z

Nothing was overwritten and nobody force-pushed — the merges landed mid-session while the work continued. My fault for not re-checking PR state before pushing.

Recovered

module-api-exception.md — the substantive ones:

  • Narrowing proviso reframed from prohibition to AGPL-3.0 §7 ¶2 self-removal. The prior "you may not narrow it … while retaining it in name" is a non-permissive term outside §7(a)–(f), and §7's closing paragraph makes those "further restrictions" under §10 — the category that would make the license non-free.
  • A second pass removed the residual "not available in name" sentence — the same defect in smaller form, caught by a multi-model review of the first fix.
  • Module API boundary reframed from "are not licensed for combination" (reads as a new denial of rights) to "not covered by this permission" (scope).
  • Grantor is now "the copyright holders", per the Classpath tradition and the DCO reality.

module-commercial-license.md — §1 forward-entitlement vs. Surviving-Held-Copies split (internal contradiction with §7); license-keys-are-distribution-credentials-only clause; notice-and-cure termination for material breach (closes rights-without-remedy without touching held copies); §3 cross-reference corrected §5 → §7; survival list; change-of-control notice + one-time domain redesignation; grant verbs; taxes/no-support boilerplate.

trademark-policy.md — npm namespace moved out of the "Marks" definition into distribution-channel control (claiming a namespace as a trademark overreached).

provenance-policy.md — attribution mechanics.

legal/counsel-review-memo.md — new: the counsel cover memo, method + limits + 14 questions left to counsel.

marketplace-v1.md — §10 dispositions for the seven already-decided items, plus a partial-refund no-op step in the §7 test plan.

Care taken

The spec was re-applied surgically, not by file copy — PR #101 added newer §8 counsel-table content to that file after the merge. That work is preserved and verified. The legal/ files had no post-merge edits, so those were restored wholesale; every "main-only" line in them was superseded wording, checked line by line before overwriting.

Still drafts for counsel; nothing here is legal advice.

🤖 Generated with Claude Code

Summary by CodeRabbit

  • Documentation
    • Added a counsel review memo documenting review scope, methodology, limitations, applied drafting updates, and outstanding decisions.
    • Clarified commercial licensing terms covering subscriptions, domains, hosted instances, termination, credentials, held copies, and change of control.
    • Updated the AGPL Module API exception with narrower scope and revised permission-removal language.
    • Expanded provenance guidance for third-party notices and attribution.
    • Refined trademark definitions and official distribution-channel language.
    • Updated marketplace testing to cover partial refunds, revocation behavior, decommissioning, and confirmed operational decisions.

@coderabbitai

coderabbitai Bot commented Jul 20, 2026

Copy link
Copy Markdown

Review Change Stack

Important

Review skipped

Auto incremental reviews are disabled on this repository.

Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro Plus

Run ID: 9598c1b3-9a6a-46f6-a421-16e900c79ff7

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review
📝 Walkthrough

Walkthrough

This change revises counsel-facing license and policy drafts, adds a legal review memo, and updates Marketplace v1 lifecycle tests and decision records for partial refunds, lapses, reactivation, and manual revocation.

Changes

Legal and marketplace lifecycle

Layer / File(s) Summary
Module API exception boundaries
legal/module-api-exception.md
Refines the AGPL §7 grant, limits coverage to the published Module API, and defines self-removal when a modified API is narrowed.
Commercial license and entitlement rules
legal/module-commercial-license.md
Clarifies subscription rights, domain obligations, hosted-instance behavior, credentials, termination, support, and change-of-control domain redesignation.
Counsel package and policy alignment
legal/counsel-review-memo.md, legal/provenance-policy.md, legal/trademark-policy.md
Adds the counsel review record and updates attribution-location and trademark/distribution-channel language.
Marketplace lifecycle validation and decisions
specs/modules/marketplace-v1.md
Adds partial-refund and manual-revocation checks and records signed-off marketplace decisions.

Estimated code review effort: 3 (Moderate) | ~25 minutes

Possibly related PRs

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title clearly summarizes the main change: recovering legal review fixes that missed an earlier merge window.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch docs/ht-5-recover-review-fixes

Comment @coderabbitai help to get the list of available commands.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 4

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@legal/module-api-exception.md`:
- Around line 132-136: Complete or remove the dangling “Which” fragment in the
surrounding legal discussion so the prose forms a grammatically complete
sentence before “A second review pass.” Preserve the intended meaning and keep
the subsequent review-pass sentence unchanged.

In `@legal/module-commercial-license.md`:
- Around line 22-25: Update the definitions and surrounding usage in the license
text to consistently use the defined term “Module” for the extension artifact
and “Agents” for human support staff, including the referenced later occurrence,
without changing the intended legal meaning.
- Around line 199-203: Update the Section 7 configuration-export grace-period
language to apply only when a purchase receives a full refund, excluding
fraud-based revocation. Preserve the immediate decommissioning outcome
established in the revocation paragraph and leave other revocation effects
unchanged.

In `@specs/modules/marketplace-v1.md`:
- Line 1079: Remove resolved items 3, 6, 8, 9, 10, 11, and 12 from the “Still
genuinely open” section in the marketplace specification, including obsolete
“confirm” instructions. Move them to the existing resolved section or revise the
section so it contains only genuinely unresolved decisions.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro Plus

Run ID: 2157b272-08d7-4e47-8009-d2ca5228f9fc

📥 Commits

Reviewing files that changed from the base of the PR and between d53f482 and 57279e1.

📒 Files selected for processing (6)
  • legal/counsel-review-memo.md
  • legal/module-api-exception.md
  • legal/module-commercial-license.md
  • legal/provenance-policy.md
  • legal/trademark-policy.md
  • specs/modules/marketplace-v1.md

Comment thread legal/module-api-exception.md Outdated
Comment on lines +132 to +136
original version," so an in-license route plausibly exists on that basis too. Which
A second review pass (2026-07-20, multi-model) caught that the first attempt at this
fix still carried a sentence — "it is not available in name to a modified version
that does not carry it in substance" — which reads as a prohibition on *labelling*
rather than a self-removal trigger, i.e. the same §10 defect in smaller form. The

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick win

Fix the dangling sentence fragment.

Which begins a sentence that is never completed before “A second review pass.”

Proposed fix
-   Which
+   That choice is counsel's call.
    A second review pass (2026-07-20, multi-model) caught
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
original version," so an in-license route plausibly exists on that basis too. Which
A second review pass (2026-07-20, multi-model) caught that the first attempt at this
fix still carried a sentence — "it is not available in name to a modified version
that does not carry it in substance" — which reads as a prohibition on *labelling*
rather than a self-removal trigger, i.e. the same §10 defect in smaller form. The
original version," so an in-license route plausibly exists on that basis too. That choice is counsel's call.
A second review pass (2026-07-20, multi-model) caught that the first attempt at this
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@legal/module-api-exception.md` around lines 132 - 136, Complete or remove the
dangling “Which” fragment in the surrounding legal discussion so the prose forms
a grammatically complete sentence before “A second review pass.” Preserve the
intended meaning and keep the subsequent review-pass sentence unchanged.

Comment on lines 22 to 25
A **"Module"** is a first-party Helpthread extension that Resonant IQ distributes for a
fee through the official Helpthread marketplace, delivered to you as **Source** — a
source-code tarball, not a compiled binary. The **"Source"** is the complete tarball
contents of a Module release as published. This License governs your use of the Module

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick win

Use the required defined vocabulary consistently.

Use Module for the extension artifact and Agents for human support staff.

Proposed fix
-A Helpthread commercial module
+A Helpthread commercial Module

-outsourced support agents
+outsourced support Agents

Also applies to: 82-84

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@legal/module-commercial-license.md` around lines 22 - 25, Update the
definitions and surrounding usage in the license text to consistently use the
defined term “Module” for the extension artifact and “Agents” for human support
staff, including the referenced later occurrence, without changing the intended
legal meaning.

Source: Coding guidelines

Comment on lines +199 to 203
example a stolen payment method or a fraudulent chargeback — following an actual
investigation. Revocation ends the forward entitlement and all future marketplace download access
(including to previously entitled versions) and, for a hosted instance, results in
immediate decommissioning. Revocation is never triggered automatically by a payment
dispute merely being filed. Section 7 again governs what revocation does **not** reach.

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🗄️ Data Integrity & Integration | 🟠 Major | ⚡ Quick win

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
set -euo pipefail

printf '\n## File outline / relevant search hits\n'
rg -n -C 3 -i 'fraud|revocation|configuration-export grace|grace window|full refund|payment dispute|decommission' legal/module-commercial-license.md || true

printf '\n## Relevant file slice with line numbers\n'
nl -ba legal/module-commercial-license.md | sed -n '150,260p'

Repository: Helpthread/helpthread

Length of output: 6516


🏁 Script executed:

#!/bin/bash
set -euo pipefail

awk 'NR>=140 && NR<=180 { printf "%d:%s\n", NR, $0 }' legal/module-commercial-license.md

Repository: Helpthread/helpthread

Length of output: 3027


Limit the grace window to full refunds. Section 7 still applies the configuration-export grace period to fraud revocation, which conflicts with the immediate decommissioning rule in the revocation paragraph. Narrow that grace window to full refunds so the hosting lifecycle stays consistent.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@legal/module-commercial-license.md` around lines 199 - 203, Update the
Section 7 configuration-export grace-period language to apply only when a
purchase receives a full refund, excluding fraud-based revocation. Preserve the
immediate decommissioning outcome established in the revocation paragraph and
leave other revocation effects unchanged.

and DNS/cert setup — needed before §3's implementation starts, not before this spec
is accepted.
3. **Lapsed keys keep downloading already-entitled versions** recommended and
3. **Lapsed keys keep downloading already-entitled versions — SIGNED OFF 2026-07-19 (see the Resolved block above).** Original reasoning retained: recommended and

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🗄️ Data Integrity & Integration | 🟠 Major | 🏗️ Heavy lift

Remove resolved decisions from the “Still genuinely open” list.

Items 3, 6, 8, 9, 10, 11, and 12 are marked signed off, confirmed, decided, or direction approved, yet remain under the open-items section; several still contain “confirm” instructions. Move them to a resolved section or rewrite the heading and residual text so only genuinely unresolved decisions remain.

Also applies to: 1118-1139, 1148-1148

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@specs/modules/marketplace-v1.md` at line 1079, Remove resolved items 3, 6, 8,
9, 10, 11, and 12 from the “Still genuinely open” section in the marketplace
specification, including obsolete “confirm” instructions. Move them to the
existing resolved section or revise the section so it contains only genuinely
unresolved decisions.

zaridan added a commit that referenced this pull request Jul 20, 2026
…tems, fragment

Two Majors applied, one Minor applied, one Minor rejected with reason.

MAJOR — grace window vs immediate revocation (module-commercial-license.md §7).
The §7 summary bullet applied the configuration-export grace window to
termination "whether by full refund or by revocation for fraud," while §8's
revocation paragraph says revocation causes "immediate decommissioning."
Direct contradiction, and it contradicted marketplace-v1 §10.11 as well
(revoke decommissions immediately, no grace). Grace window now scoped to
full-refund termination only.

MAJOR — resolved items under the decision-points list (marketplace-v1 §10).
Partially valid: the "Still genuinely open" line already named only §10.1,
.2, .4, .5, .7 correctly, so the framing was right — but the numbered list
mixed closed and open items, and §10.3 still read "needs explicit sign-off"
inside an item titled SIGNED OFF. Added an explicit reading note at the head
of the list and rewrote §10.3's residual imperative in the past tense.

MINOR — dangling "Which" fragment (module-api-exception.md drafting notes).
An artifact of my own earlier edit; the real sentence appears later in the
same note. Removed.

MINOR REJECTED — capitalizing "outsourced support agents" to "Agents".
"Module" was capitalized (it IS a defined term in this document, at §1), but
"Agents" is not defined anywhere in this License. Capitalizing an undefined
term in a contract implies a definition that does not exist, which is worse
drafting than the plain-English original. The repo vocabulary rule governs
product/schema/doc language, not defined-term convention inside a contract.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
zaridan and others added 3 commits July 20, 2026 22:17
These changes were pushed to docs/ht-5-licensing-decisions and
docs/ht-5-legal-texts AFTER those branches' PRs had already been squash-merged,
so the pushes landed on dead branches and never reached main:

  PR #99  merged 2026-07-20T03:10Z; the pr99 work is 03:18-04:08Z
  PR #100 merged 2026-07-20T03:37Z; the pr100 work is 03:40-04:07Z

Nothing was overwritten and nobody force-pushed — the merges simply happened
mid-session while the work continued. Re-applied here onto current main.

Recovered — module-api-exception.md:
- narrowing proviso reframed from prohibition to AGPL-3.0 §7 ¶2 self-removal
  (the prior "you may not narrow it … while retaining it in name" is a
  non-permissive term outside §7(a)-(f), hence a §10 further restriction)
- a second pass removed the residual "not available in name" sentence, which
  was the same defect in smaller form
- Module API boundary reframed from "are not licensed for combination" (reads
  as a new denial of rights) to "not covered by this permission" (scope)
- grantor is "the copyright holders", per the Classpath tradition and the DCO
  reality that many people hold the copyright

Recovered — module-commercial-license.md:
- §1 forward-entitlement vs Surviving-Held-Copies split (was an internal
  contradiction with §7)
- license-keys-are-distribution-credentials-only clause (§6)
- notice-and-cure termination for material breach (§8) — closes the
  rights-without-remedy gap without touching held copies
- §3 cross-reference corrected from section 5 to section 7
- survival list, change-of-control notice + one-time domain redesignation,
  grant verbs, taxes and no-support boilerplate, defined-term punctuation

Recovered — trademark-policy.md (npm namespace out of the Marks definition
into distribution-channel control), provenance-policy.md (attribution
mechanics), and legal/counsel-review-memo.md (the counsel cover memo, new).

Recovered — marketplace-v1.md: §10 dispositions on the seven items the
Resolved block had already decided, and a partial-refund no-op step in §7's
test plan. Re-applied surgically rather than by file copy, because PR #101
added newer §8 counsel-table content to this file after the merge; that work
is preserved (verified).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
…tems, fragment

Two Majors applied, one Minor applied, one Minor rejected with reason.

MAJOR — grace window vs immediate revocation (module-commercial-license.md §7).
The §7 summary bullet applied the configuration-export grace window to
termination "whether by full refund or by revocation for fraud," while §8's
revocation paragraph says revocation causes "immediate decommissioning."
Direct contradiction, and it contradicted marketplace-v1 §10.11 as well
(revoke decommissions immediately, no grace). Grace window now scoped to
full-refund termination only.

MAJOR — resolved items under the decision-points list (marketplace-v1 §10).
Partially valid: the "Still genuinely open" line already named only §10.1,
.2, .4, .5, .7 correctly, so the framing was right — but the numbered list
mixed closed and open items, and §10.3 still read "needs explicit sign-off"
inside an item titled SIGNED OFF. Added an explicit reading note at the head
of the list and rewrote §10.3's residual imperative in the past tense.

MINOR — dangling "Which" fragment (module-api-exception.md drafting notes).
An artifact of my own earlier edit; the real sentence appears later in the
same note. Removed.

MINOR REJECTED — capitalizing "outsourced support agents" to "Agents".
"Module" was capitalized (it IS a defined term in this document, at §1), but
"Agents" is not defined anywhere in this License. Capitalizing an undefined
term in a contract implies a definition that does not exist, which is worse
drafting than the plain-English original. The repo vocabulary rule governs
product/schema/doc language, not defined-term convention inside a contract.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
…unsel (HT-100)

An audit on 2026-07-20 searched every message TJ sent across all working
sessions. Three attributions in this branch cite decisions he never made:

1. legal/counsel-review-memo.md told outside counsel that a 14-day refund window,
   a 7-day config-export grace, and immediate-decommission-on-revocation-only were
   'per marketplace-v1.md §10 resolutions, TJ 2026-07-19'. Zero human messages
   contain any of those terms. Counsel would have read it as a client instruction
   and drafted binding commercial terms around figures nobody chose.
2. legal/module-commercial-license.md carried the same figures as 'CONFIRMED by TJ
   2026-07-19'.
3. marketplace-v1.md attributed the tarball-only distribution decision to TJ with
   'per TJ's decision'.

All three now state plainly that the figures are placeholders, that the
attribution was false, and that they await TJ's actual decision. The counsel memo
carries an explicit warning not to draft against them.

Also corrected the '## 10. Decision points' reading note, which declared every
dated disposition closed and instructed readers that 'confirm'/'needs sign-off'
wording inside them was historical. Several of those dispositions record decisions
TJ never made, so the note would have closed the door on the audit that found
them. A dated disposition is now a claim to verify, not a closure.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@zaridan
zaridan force-pushed the docs/ht-5-recover-review-fixes branch from 3bbc663 to 1c2b8e3 Compare July 21, 2026 05:40
@zaridan
zaridan merged commit d2c1159 into main Jul 21, 2026
5 checks passed
@zaridan
zaridan deleted the docs/ht-5-recover-review-fixes branch July 21, 2026 16:44
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.

1 participant