Skip to content

Gather the IP position into one document - #526

Merged
realjkg merged 1 commit into
mainfrom
claude/debug-job-failure-l9isb8
Oct 8, 2026
Merged

realjkg merged 1 commit into
mainfrom
claude/debug-job-failure-l9isb8

Conversation

@realjkg

@realjkg realjkg commented Oct 8, 2026 •

Copy link
Copy Markdown
Collaborator

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, 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 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:

  • 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.
  • 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, 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.

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:

test_live_header_check_script.py  test_trademark_attribution.py
test_license_carveout.py  test_decision_register.py
test_coppa_compliance.py  test_runner_pins.py          → 86 passed

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 from build_pages_site.sh, so this document is in the repository and not on agnusdei.ai — a real boundary, not a hiding place, since the repository itself is public.

History note

This branch was rebased onto current main after #524, #522 and #525 landed. The earlier force-pushes during the disclosure cleanup are no longer ancestors of the branch — the rebase restarted it from main, so those drafts are orphaned objects rather than history. The PR-timeline caveat still stands.

No site/ or demo/ files touched.

🤖 Generated with Claude Code

https://claude.ai/code/session_018GAoM3uH8hhNJDHshRsZXX

@cloudflare-workers-and-pages

cloudflare-workers-and-pages Bot commented Oct 8, 2026 •

Copy link
Copy Markdown

Deploying with  Cloudflare Workers  Cloudflare Workers

The latest updates on your project. Learn more about integrating Git with Workers.

Status Name Latest Commit Updated (UTC)
✅ Deployment successful!
View logs
bede 2dac59b Oct 08 2026, 02:34 PM

Copilot AI 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.

🟡 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 thread docs/INTELLECTUAL_PROPERTY.md Outdated
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
realjkg force-pushed the claude/debug-job-failure-l9isb8 branch 6 times, most recently from ad85441 to 295dd60 Compare October 8, 2026 14:19
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
realjkg force-pushed the claude/debug-job-failure-l9isb8 branch from 295dd60 to 2dac59b Compare October 8, 2026 14:33
@realjkg
realjkg merged commit af9c246 into main Oct 8, 2026
13 of 14 checks passed
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.

3 participants