docs(legal): recover review fixes that missed the #99/#100 merge window - #108
Conversation
|
Important Review skippedAuto incremental reviews are disabled on this repository. Please check the settings in the CodeRabbit UI or the ⚙️ Run configurationConfiguration used: Path: .coderabbit.yaml Review profile: CHILL Plan: Pro Plus Run ID: You can disable this status message by setting the Use the checkbox below for a quick retry:
📝 WalkthroughWalkthroughThis 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. ChangesLegal and marketplace lifecycle
Estimated code review effort: 3 (Moderate) | ~25 minutes Possibly related PRs
🚥 Pre-merge checks | ✅ 5✅ Passed checks (5 passed)
✨ Finishing Touches🧪 Generate unit tests (beta)
Comment |
There was a problem hiding this comment.
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
📒 Files selected for processing (6)
legal/counsel-review-memo.mdlegal/module-api-exception.mdlegal/module-commercial-license.mdlegal/provenance-policy.mdlegal/trademark-policy.mdspecs/modules/marketplace-v1.md
| 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 |
There was a problem hiding this comment.
📐 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.
| 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.
| 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 |
There was a problem hiding this comment.
📐 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 AgentsAlso 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
| 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. |
There was a problem hiding this comment.
🗄️ 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.mdRepository: 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 |
There was a problem hiding this comment.
🗄️ 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.
…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>
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>
3bbc663 to
1c2b8e3
Compare
What happened
Work pushed to
docs/ht-5-licensing-decisionsanddocs/ht-5-legal-textsafter their PRs were already squash-merged. The pushes succeeded onto dead branches and never reachedmain.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: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