Repository navigation
Gather the IP position into one document - #526
Merged
Merged
Conversation
Deploying with
|
| Status | Name | Latest Commit | Updated (UTC) |
|---|---|---|---|
| ✅ Deployment successful! View logs |
bede | 2dac59b | Oct 08 2026, 02:34 PM |
There was a problem hiding this comment.
🟡 Changes recommended
The header checker still misdiagnoses successful intermediary responses, one IP guard is vacuous, and the patent position is internally contradictory.
3 open findings
What changed in this PR
Consolidates the repository’s IP position, assignment process, and legal decisions while adding automated consistency guards.
Changes:
- Adds the IP position document and decision-register entry.
- Adds tests for critical assignment clauses and CI routing.
- Improves live security-header diagnostics and adds integration tests.
| File | Description |
|---|---|
docs/INTELLECTUAL_PROPERTY.md |
Documents ownership, assignment, trademark, and patent positions. |
docs/DECISIONS.md |
Records the IP work as open decision 35. |
homeschool-api/tests/test_ip_document.py |
Guards critical IP-document clauses. |
scripts/check_live_site_headers.sh |
Distinguishes HTTP failures from missing headers. |
homeschool-api/tests/test_live_header_check_script.py |
Tests header-check outcomes using a local server. |
.github/workflows/test.yml |
Routes relevant document and script changes through CI. |
CLAUDE.md |
Records the new IP and header-checking conventions. |
🧠 Review effort: Balanced
Give feedback about Copilot approvals in this survey to enter a drawing for a $150 gift card.
Comment on lines
+100
to
+102
| case "$status" in | ||
| 2??|3??) break ;; | ||
| esac |
Comment on lines
+299
to
+304
| **The position: not a gate on anything.** A patent publishes the method, | ||
| costs $15-25k and years, issues against a version of a continuously-released | ||
| product that no longer exists, and would need millions to enforce. If an | ||
| attorney's novelty screen says one of those two mechanisms clears prior art, | ||
| a provisional before the US window closes is cheap insurance. Otherwise the | ||
| money belongs in the beta. |
Comment on lines
+82
to
+86
| holder = _root_copyright_holder() | ||
| assert holder in _doc(), ( | ||
| f"the assignment does not name {holder!r} — the owner on the root " | ||
| "LICENSE — as assignee." | ||
| ) |
realjkg
force-pushed
the
claude/debug-job-failure-l9isb8
branch
6 times, most recently
from
October 8, 2026 14:19
ad85441 to
295dd60
Compare
The IP work existed and was real — the root LICENSE's trademark reservation and Apache-2.0 carve-out, entry 18, the BedeMark.tsx attribution — but it lived in five files with no single place that said what the position was. Searched first: there is no docs/ file on the subject and docs/SELLING_BEDE.md covers license-key ISSUANCE rather than ownership, so this gathers and cross-references rather than duplicating. docs/INTELLECTUAL_PROPERTY.md holds what the property is, who owns each part, the formation-and-assignment runbook, the assignment instrument, the trademark position, and the recorded decision that no patent filing is planned. IT CARRIES METHOD AND NO STATE There is no register entry tracking how far along the company is in perfecting its own title. There was one briefly — struck, not stubbed, since a withdrawn entry advertises that something was withdrawn. Where the only thing an entry would track is how far along a private matter is, the entry IS the disclosure: a `needs:` line naming what remains states current posture however neutrally worded, and it is readable by anyone. The register ends at 34, as before today. WHAT IT DOES NOT PUBLISH The repository is public, so the test for committing business text is not "is it true" but what it hands someone who is not on our side. Each of these reached a draft and was removed: the entity's registration particulars (and worse, an OBLIGATION to publish them on every amendment); adverse conclusions about our own title, our own foreign rights and our own mark's strength; a strategic self-assessment ranking the mark against the architecture for defensibility; and a map to what is valuable — a draft §7 named the two internal mechanisms believed most likely novel, with their file and class names, under a heading about patentability. Two traps in the fixing, same shape from opposite ends: the standing rule QUOTED the adverse sentences as examples, preserving the payload under a heading saying not to write it; and a forbidden-vocabulary list would have made the test the one file in the repository containing them. Both now describe rather than reproduce. NO TEST POLICES THIS DOCUMENT, AND THAT IS DELIBERATE A first pass shipped 42 parametrized cases scanning the document's prose for adverse phrasings, status language and mechanism names. Deleted before merge. No code reads the document, it gates no release, and the compliance documents that genuinely need enforcement already have test_coppa_compliance.py. Three of those scans had already fired on CORRECT text — including the sentence explaining the rule they enforced — which is how a gate earns a reputation for crying wolf and then gets deleted, as this repository has done once (#296). The rule lives in CLAUDE.md instead: read by the next session, no CI cost on every backend PR, and incapable of a false red. Guard code; write down judgment. docs/INTELLECTUAL_PROPERTY.md is correspondingly NOT in test.yml's change filter, since nothing reads it. What survives from today's guards, because each covers executable behaviour: test_live_header_check_script.py (a real bash script, verified against a live HTTP server in three shapes), test_trademark_attribution.py (a rendered React string that exists in two apps, tied to the root LICENSE's owner), and test_license_carveout.py's additions (the licence must be internally coherent to ship at all). 86 guards pass across those plus the register and COPPA suites. CLAUDE.md gains "Standing Workflow: Never Publish What The Repository Does Not Need", including why it cuts AGAINST two instincts that are otherwise right here: the register exists to state what is open and why, and this file prizes recorded reasoning over bare conclusions. That pull produced every category above, repeatedly, within one session. Completeness about method is the virtue; completeness about our own exposure is not. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_018GAoM3uH8hhNJDHshRsZXX
realjkg
force-pushed
the
claude/debug-job-failure-l9isb8
branch
from
October 8, 2026 14:33
295dd60 to
2dac59b
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.


What this is
Two files: a new
docs/INTELLECTUAL_PROPERTY.md, and the CLAUDE.md entries that point at it and record the rule it taught.The IP work existed and was real — the root
LICENSE's reservation and Apache-2.0 carve-out, entry 18, theBedeMark.tsxattribution — but it lived in five files with no single place that said what the position was. Searched first: there is nodocs/file on the subject, anddocs/SELLING_BEDE.mdcovers licence-key issuance rather than ownership. So this gathers and cross-references rather than duplicating.The document holds what the property is, who owns each part, the formation-and-assignment runbook, the assignment instrument, the trademark position, and the recorded decision that no patent filing is planned.
It carries method and no state
There is no register entry tracking how far along the company is in perfecting its own title. There was one briefly — struck, not stubbed, since a withdrawn entry advertises that something was withdrawn. Where the only thing an entry would track is how far along a private matter is, the entry is the disclosure: a
needs:line naming what remains states current posture however neutrally worded, and it is readable by anyone. The register ends at 34, as it did before today.What it does not publish
The repository is public, so the test for committing business text is not "is it true" but what it hands someone who is not on our side. Each of these reached a draft and was removed:
Two traps in the fixing, same shape from opposite ends: the standing rule quoted the adverse sentences as examples, preserving the payload under a heading saying not to write it; and a forbidden-vocabulary list would have made the test the one file in the repository containing them. Both now describe rather than reproduce.
No test polices this document, and that is deliberate
A first pass shipped 42 parametrized cases scanning the document's prose for adverse phrasings, status language and mechanism names. Deleted before merge.
No code reads the document, it gates no release, and the compliance documents that genuinely need enforcement already have
test_coppa_compliance.py. Three of those scans had already fired on correct text — including the sentence explaining the rule they enforced — which is how a gate earns a reputation for crying wolf and then gets deleted, as this repository has done once (#296).The rule lives in CLAUDE.md instead: read by the next session, no CI cost on every backend PR, incapable of a false red. Guard code; write down judgment.
docs/INTELLECTUAL_PROPERTY.mdis correspondingly not intest.yml's change filter, since nothing reads it.Test plan
Nothing in this PR is executable, so there is nothing new to test. What was verified is that the existing suites still pass with the document added and the prose-policing test removed:
Those three of today's guards survive because each covers executable behaviour: a real bash script verified against a live HTTP server in three shapes; a rendered React string that exists in two apps, tied to the root
LICENSE's owner; and the licence's internal coherence, which the repository cannot ship without.The COPPA suite re-confirms
docs/is excluded frombuild_pages_site.sh, so this document is in the repository and not onagnusdei.ai— a real boundary, not a hiding place, since the repository itself is public.History note
This branch was rebased onto current
mainafter #524, #522 and #525 landed. The earlier force-pushes during the disclosure cleanup are no longer ancestors of the branch — the rebase restarted it frommain, so those drafts are orphaned objects rather than history. The PR-timeline caveat still stands.No
site/ordemo/files touched.🤖 Generated with Claude Code
https://claude.ai/code/session_018GAoM3uH8hhNJDHshRsZXX