Add PersonalNote ontology schema - #1100

Open
EgorPPS wants to merge 1 commit into
mainfrom
add-personal-note-ontology
Open

Add PersonalNote ontology schema#1100
EgorPPS wants to merge 1 commit into
mainfrom
add-personal-note-ontology

Conversation

@EgorPPS

@EgorPPSEgorPPS commented Aug 5, 2026

Copy link
Copy Markdown
Contributor

Adds PersonalNote — a note a person wrote for themselves.

Why a new schema rather than reuse

The registry currently has no type for this, and the two nearest candidates are both something else:

  • Note (18a83870-…) is platform documentation. Every record of it in the wild is an integration note or a marketplace listing ("Ontology: File", "Marketplace Listing"); it has no author and no creation time, its content is a URI pointing at a file, and its audience means "who is this documentation written for". A person's note does not belong there.
  • TaskNote is scoped to a task — it requires taskId.

Shape

Modelled on schema.org/NoteDigitalDocument, so the semantics are familiar outside W3DS, but the identity and time fields follow this registry's convention rather than schema.org's — id / createdAt / authorEName instead of dateCreated / author — because all 30 existing schemas name them that way and a reader here should not have to special-case one type. The mapping is stated in the schema description.

Deliberately domain-level and general: what a note is about goes in about / keywords, never into a narrower type. A note about paint and a note about a bike ride are the same kind of thing, and splitting them by subject is how vocabulary fragments.

Two fields worth calling out:

  • derivedRecords — references to records extracted from the note (a purchase read off a photographed letter, a product identified in it), each carrying confidence when it was inferred rather than read verbatim. The note stays authoritative for what was actually said: a derived reading can be wrong and redone, the original cannot.
  • capturedBy — the eName of the application that recorded it, so a reader can tell an app-assisted capture from a hand-typed one.

additionalProperties: true, following communityActivity and socialMediaPost.

Context

Written for Nootropic, where a person hands over a photo, a voice note or a document and expects the meaning to be findable years later. Their utterance is stored as a PersonalNote and anything structured we extract references it. It is published in our self-description at /.well-known/w3ds-platform.json with registered: false until this merges — the flag is checked against this registry at request time rather than maintained by hand.

Happy to rename fields or drop derivedRecords / capturedBy if you would rather keep the type minimal.

Summary by CodeRabbit

  • New Features
    • Added a standardized PersonalNote schema.
    • Personal notes now support content, authorship, creation time, attachments, discovery details, provenance, related records, and archive status.
    • Required fields ensure each note includes an identifier, text, creation timestamp, and author.

A person's own note — the general case that has been missing: the existing
Note ontology is platform documentation (no author, no creation time,
content is a file URI), and TaskNote is scoped to a task.
Modelled on schema.org/NoteDigitalDocument, with identity and time fields
following this registry's convention (id / createdAt / authorEName) rather
than schema.org's, so it reads like its neighbours here.
@EgorPPS
EgorPPS requested a review from coodos as a code ownerAugust 5, 2026 07:29
@coderabbitai

coderabbitaiBot commented Aug 5, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: c1608510-f678-4384-ba66-8804e990b9e4

📥 Commits

Reviewing files that changed from the base of the PR and between 6d1b8b6 and 43294c5.

📒 Files selected for processing (1)
  • services/ontology/schemas/personalNote.json

📝 Walkthrough

Walkthrough

Added a draft-07 JSON Schema for PersonalNote. The schema defines note identity, content, metadata, attachments, provenance, archive status, derived-record references, required fields, and additional-property handling.

Changes

PersonalNote schema

Layer / File(s)Summary
PersonalNote validation contract
services/ontology/schemas/personalNote.json
Defines the PersonalNote object, property types, nested derivedRecords references, required fields, archive default, and allowance for additional properties.

Estimated code review effort: 2 (Simple) | ~10 minutes

Suggested reviewers:coodos

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check nameStatusExplanationResolution
Description check⚠️ WarningThe description explains the schema and design, but it omits the issue number, change type, testing details, and checklist.Add the Issue Number, Type of change, How the change has been tested, and completed Change checklist sections.
✅ Passed checks (4 passed)
Check nameStatusExplanation
Title check✅ PassedThe title clearly identifies the addition of the PersonalNote ontology schema.
Docstring Coverage✅ PassedNo functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check✅ PassedCheck skipped because no linked issues were found for this pull request.
Out of Scope Changes check✅ PassedCheck 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 add-personal-note-ontology

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

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

Sign up for freeto 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

@EgorPPS
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Add PersonalNote ontology schema - #1100

Open
EgorPPS wants to merge 1 commit into
mainfrom
add-personal-note-ontology
Open

Add PersonalNote ontology schema#1100
EgorPPS wants to merge 1 commit into
mainfrom
add-personal-note-ontology

Conversation

@EgorPPS

@EgorPPSEgorPPS commented Aug 5, 2026

Copy link
Copy Markdown
Contributor

Adds PersonalNote — a note a person wrote for themselves.

Why a new schema rather than reuse

The registry currently has no type for this, and the two nearest candidates are both something else:

  • Note (18a83870-…) is platform documentation. Every record of it in the wild is an integration note or a marketplace listing ("Ontology: File", "Marketplace Listing"); it has no author and no creation time, its content is a URI pointing at a file, and its audience means "who is this documentation written for". A person's note does not belong there.
  • TaskNote is scoped to a task — it requires taskId.

Shape

Modelled on schema.org/NoteDigitalDocument, so the semantics are familiar outside W3DS, but the identity and time fields follow this registry's convention rather than schema.org's — id / createdAt / authorEName instead of dateCreated / author — because all 30 existing schemas name them that way and a reader here should not have to special-case one type. The mapping is stated in the schema description.

Deliberately domain-level and general: what a note is about goes in about / keywords, never into a narrower type. A note about paint and a note about a bike ride are the same kind of thing, and splitting them by subject is how vocabulary fragments.

Two fields worth calling out:

  • derivedRecords — references to records extracted from the note (a purchase read off a photographed letter, a product identified in it), each carrying confidence when it was inferred rather than read verbatim. The note stays authoritative for what was actually said: a derived reading can be wrong and redone, the original cannot.
  • capturedBy — the eName of the application that recorded it, so a reader can tell an app-assisted capture from a hand-typed one.

additionalProperties: true, following communityActivity and socialMediaPost.

Context

Written for Nootropic, where a person hands over a photo, a voice note or a document and expects the meaning to be findable years later. Their utterance is stored as a PersonalNote and anything structured we extract references it. It is published in our self-description at /.well-known/w3ds-platform.json with registered: false until this merges — the flag is checked against this registry at request time rather than maintained by hand.

Happy to rename fields or drop derivedRecords / capturedBy if you would rather keep the type minimal.

Summary by CodeRabbit

  • New Features
    • Added a standardized PersonalNote schema.
    • Personal notes now support content, authorship, creation time, attachments, discovery details, provenance, related records, and archive status.
    • Required fields ensure each note includes an identifier, text, creation timestamp, and author.

A person's own note — the general case that has been missing: the existing
Note ontology is platform documentation (no author, no creation time,
content is a file URI), and TaskNote is scoped to a task.
Modelled on schema.org/NoteDigitalDocument, with identity and time fields
following this registry's convention (id / createdAt / authorEName) rather
than schema.org's, so it reads like its neighbours here.
@EgorPPS
EgorPPS requested a review from coodos as a code ownerAugust 5, 2026 07:29
@coderabbitai

coderabbitaiBot commented Aug 5, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: c1608510-f678-4384-ba66-8804e990b9e4

📥 Commits

Reviewing files that changed from the base of the PR and between 6d1b8b6 and 43294c5.

📒 Files selected for processing (1)
  • services/ontology/schemas/personalNote.json

📝 Walkthrough

Walkthrough

Added a draft-07 JSON Schema for PersonalNote. The schema defines note identity, content, metadata, attachments, provenance, archive status, derived-record references, required fields, and additional-property handling.

Changes

PersonalNote schema

Layer / File(s)Summary
PersonalNote validation contract
services/ontology/schemas/personalNote.json
Defines the PersonalNote object, property types, nested derivedRecords references, required fields, archive default, and allowance for additional properties.

Estimated code review effort: 2 (Simple) | ~10 minutes

Suggested reviewers:coodos

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check nameStatusExplanationResolution
Description check⚠️ WarningThe description explains the schema and design, but it omits the issue number, change type, testing details, and checklist.Add the Issue Number, Type of change, How the change has been tested, and completed Change checklist sections.
✅ Passed checks (4 passed)
Check nameStatusExplanation
Title check✅ PassedThe title clearly identifies the addition of the PersonalNote ontology schema.
Docstring Coverage✅ PassedNo functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check✅ PassedCheck skipped because no linked issues were found for this pull request.
Out of Scope Changes check✅ PassedCheck 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 add-personal-note-ontology

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

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

Sign up for freeto 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

@EgorPPS
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Add PersonalNote ontology schema - #1100

Open
EgorPPS wants to merge 1 commit into
mainfrom
add-personal-note-ontology
Open

Add PersonalNote ontology schema#1100
EgorPPS wants to merge 1 commit into
mainfrom
add-personal-note-ontology

Conversation

@EgorPPS

@EgorPPSEgorPPS commented Aug 5, 2026

Copy link
Copy Markdown
Contributor

Adds PersonalNote — a note a person wrote for themselves.

Why a new schema rather than reuse

The registry currently has no type for this, and the two nearest candidates are both something else:

  • Note (18a83870-…) is platform documentation. Every record of it in the wild is an integration note or a marketplace listing ("Ontology: File", "Marketplace Listing"); it has no author and no creation time, its content is a URI pointing at a file, and its audience means "who is this documentation written for". A person's note does not belong there.
  • TaskNote is scoped to a task — it requires taskId.

Shape

Modelled on schema.org/NoteDigitalDocument, so the semantics are familiar outside W3DS, but the identity and time fields follow this registry's convention rather than schema.org's — id / createdAt / authorEName instead of dateCreated / author — because all 30 existing schemas name them that way and a reader here should not have to special-case one type. The mapping is stated in the schema description.

Deliberately domain-level and general: what a note is about goes in about / keywords, never into a narrower type. A note about paint and a note about a bike ride are the same kind of thing, and splitting them by subject is how vocabulary fragments.

Two fields worth calling out:

  • derivedRecords — references to records extracted from the note (a purchase read off a photographed letter, a product identified in it), each carrying confidence when it was inferred rather than read verbatim. The note stays authoritative for what was actually said: a derived reading can be wrong and redone, the original cannot.
  • capturedBy — the eName of the application that recorded it, so a reader can tell an app-assisted capture from a hand-typed one.

additionalProperties: true, following communityActivity and socialMediaPost.

Context

Written for Nootropic, where a person hands over a photo, a voice note or a document and expects the meaning to be findable years later. Their utterance is stored as a PersonalNote and anything structured we extract references it. It is published in our self-description at /.well-known/w3ds-platform.json with registered: false until this merges — the flag is checked against this registry at request time rather than maintained by hand.

Happy to rename fields or drop derivedRecords / capturedBy if you would rather keep the type minimal.

Summary by CodeRabbit

  • New Features
    • Added a standardized PersonalNote schema.
    • Personal notes now support content, authorship, creation time, attachments, discovery details, provenance, related records, and archive status.
    • Required fields ensure each note includes an identifier, text, creation timestamp, and author.

A person's own note — the general case that has been missing: the existing
Note ontology is platform documentation (no author, no creation time,
content is a file URI), and TaskNote is scoped to a task.
Modelled on schema.org/NoteDigitalDocument, with identity and time fields
following this registry's convention (id / createdAt / authorEName) rather
than schema.org's, so it reads like its neighbours here.
@EgorPPS
EgorPPS requested a review from coodos as a code ownerAugust 5, 2026 07:29
@coderabbitai

coderabbitaiBot commented Aug 5, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: c1608510-f678-4384-ba66-8804e990b9e4

📥 Commits

Reviewing files that changed from the base of the PR and between 6d1b8b6 and 43294c5.

📒 Files selected for processing (1)
  • services/ontology/schemas/personalNote.json

📝 Walkthrough

Walkthrough

Added a draft-07 JSON Schema for PersonalNote. The schema defines note identity, content, metadata, attachments, provenance, archive status, derived-record references, required fields, and additional-property handling.

Changes

PersonalNote schema

Layer / File(s)Summary
PersonalNote validation contract
services/ontology/schemas/personalNote.json
Defines the PersonalNote object, property types, nested derivedRecords references, required fields, archive default, and allowance for additional properties.

Estimated code review effort: 2 (Simple) | ~10 minutes

Suggested reviewers:coodos

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check nameStatusExplanationResolution
Description check⚠️ WarningThe description explains the schema and design, but it omits the issue number, change type, testing details, and checklist.Add the Issue Number, Type of change, How the change has been tested, and completed Change checklist sections.
✅ Passed checks (4 passed)
Check nameStatusExplanation
Title check✅ PassedThe title clearly identifies the addition of the PersonalNote ontology schema.
Docstring Coverage✅ PassedNo functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check✅ PassedCheck skipped because no linked issues were found for this pull request.
Out of Scope Changes check✅ PassedCheck 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 add-personal-note-ontology

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

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

Sign up for freeto 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

@EgorPPS
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Add PersonalNote ontology schema - #1100

Open
EgorPPS wants to merge 1 commit into
mainfrom
add-personal-note-ontology
Open

Add PersonalNote ontology schema#1100
EgorPPS wants to merge 1 commit into
mainfrom
add-personal-note-ontology

Conversation

@EgorPPS

@EgorPPSEgorPPS commented Aug 5, 2026

Copy link
Copy Markdown
Contributor

Adds PersonalNote — a note a person wrote for themselves.

Why a new schema rather than reuse

The registry currently has no type for this, and the two nearest candidates are both something else:

  • Note (18a83870-…) is platform documentation. Every record of it in the wild is an integration note or a marketplace listing ("Ontology: File", "Marketplace Listing"); it has no author and no creation time, its content is a URI pointing at a file, and its audience means "who is this documentation written for". A person's note does not belong there.
  • TaskNote is scoped to a task — it requires taskId.

Shape

Modelled on schema.org/NoteDigitalDocument, so the semantics are familiar outside W3DS, but the identity and time fields follow this registry's convention rather than schema.org's — id / createdAt / authorEName instead of dateCreated / author — because all 30 existing schemas name them that way and a reader here should not have to special-case one type. The mapping is stated in the schema description.

Deliberately domain-level and general: what a note is about goes in about / keywords, never into a narrower type. A note about paint and a note about a bike ride are the same kind of thing, and splitting them by subject is how vocabulary fragments.

Two fields worth calling out:

  • derivedRecords — references to records extracted from the note (a purchase read off a photographed letter, a product identified in it), each carrying confidence when it was inferred rather than read verbatim. The note stays authoritative for what was actually said: a derived reading can be wrong and redone, the original cannot.
  • capturedBy — the eName of the application that recorded it, so a reader can tell an app-assisted capture from a hand-typed one.

additionalProperties: true, following communityActivity and socialMediaPost.

Context

Written for Nootropic, where a person hands over a photo, a voice note or a document and expects the meaning to be findable years later. Their utterance is stored as a PersonalNote and anything structured we extract references it. It is published in our self-description at /.well-known/w3ds-platform.json with registered: false until this merges — the flag is checked against this registry at request time rather than maintained by hand.

Happy to rename fields or drop derivedRecords / capturedBy if you would rather keep the type minimal.

Summary by CodeRabbit

  • New Features
    • Added a standardized PersonalNote schema.
    • Personal notes now support content, authorship, creation time, attachments, discovery details, provenance, related records, and archive status.
    • Required fields ensure each note includes an identifier, text, creation timestamp, and author.

A person's own note — the general case that has been missing: the existing
Note ontology is platform documentation (no author, no creation time,
content is a file URI), and TaskNote is scoped to a task.
Modelled on schema.org/NoteDigitalDocument, with identity and time fields
following this registry's convention (id / createdAt / authorEName) rather
than schema.org's, so it reads like its neighbours here.
@EgorPPS
EgorPPS requested a review from coodos as a code ownerAugust 5, 2026 07:29
@coderabbitai

coderabbitaiBot commented Aug 5, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: c1608510-f678-4384-ba66-8804e990b9e4

📥 Commits

Reviewing files that changed from the base of the PR and between 6d1b8b6 and 43294c5.

📒 Files selected for processing (1)
  • services/ontology/schemas/personalNote.json

📝 Walkthrough

Walkthrough

Added a draft-07 JSON Schema for PersonalNote. The schema defines note identity, content, metadata, attachments, provenance, archive status, derived-record references, required fields, and additional-property handling.

Changes

PersonalNote schema

Layer / File(s)Summary
PersonalNote validation contract
services/ontology/schemas/personalNote.json
Defines the PersonalNote object, property types, nested derivedRecords references, required fields, archive default, and allowance for additional properties.

Estimated code review effort: 2 (Simple) | ~10 minutes

Suggested reviewers:coodos

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check nameStatusExplanationResolution
Description check⚠️ WarningThe description explains the schema and design, but it omits the issue number, change type, testing details, and checklist.Add the Issue Number, Type of change, How the change has been tested, and completed Change checklist sections.
✅ Passed checks (4 passed)
Check nameStatusExplanation
Title check✅ PassedThe title clearly identifies the addition of the PersonalNote ontology schema.
Docstring Coverage✅ PassedNo functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check✅ PassedCheck skipped because no linked issues were found for this pull request.
Out of Scope Changes check✅ PassedCheck 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 add-personal-note-ontology

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

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

Sign up for freeto 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

@EgorPPS
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Add PersonalNote ontology schema - #1100

Open
EgorPPS wants to merge 1 commit into
mainfrom
add-personal-note-ontology
Open

Add PersonalNote ontology schema#1100
EgorPPS wants to merge 1 commit into
mainfrom
add-personal-note-ontology

Conversation

@EgorPPS

@EgorPPSEgorPPS commented Aug 5, 2026

Copy link
Copy Markdown
Contributor

Adds PersonalNote — a note a person wrote for themselves.

Why a new schema rather than reuse

The registry currently has no type for this, and the two nearest candidates are both something else:

  • Note (18a83870-…) is platform documentation. Every record of it in the wild is an integration note or a marketplace listing ("Ontology: File", "Marketplace Listing"); it has no author and no creation time, its content is a URI pointing at a file, and its audience means "who is this documentation written for". A person's note does not belong there.
  • TaskNote is scoped to a task — it requires taskId.

Shape

Modelled on schema.org/NoteDigitalDocument, so the semantics are familiar outside W3DS, but the identity and time fields follow this registry's convention rather than schema.org's — id / createdAt / authorEName instead of dateCreated / author — because all 30 existing schemas name them that way and a reader here should not have to special-case one type. The mapping is stated in the schema description.

Deliberately domain-level and general: what a note is about goes in about / keywords, never into a narrower type. A note about paint and a note about a bike ride are the same kind of thing, and splitting them by subject is how vocabulary fragments.

Two fields worth calling out:

  • derivedRecords — references to records extracted from the note (a purchase read off a photographed letter, a product identified in it), each carrying confidence when it was inferred rather than read verbatim. The note stays authoritative for what was actually said: a derived reading can be wrong and redone, the original cannot.
  • capturedBy — the eName of the application that recorded it, so a reader can tell an app-assisted capture from a hand-typed one.

additionalProperties: true, following communityActivity and socialMediaPost.

Context

Written for Nootropic, where a person hands over a photo, a voice note or a document and expects the meaning to be findable years later. Their utterance is stored as a PersonalNote and anything structured we extract references it. It is published in our self-description at /.well-known/w3ds-platform.json with registered: false until this merges — the flag is checked against this registry at request time rather than maintained by hand.

Happy to rename fields or drop derivedRecords / capturedBy if you would rather keep the type minimal.

Summary by CodeRabbit

  • New Features
    • Added a standardized PersonalNote schema.
    • Personal notes now support content, authorship, creation time, attachments, discovery details, provenance, related records, and archive status.
    • Required fields ensure each note includes an identifier, text, creation timestamp, and author.

A person's own note — the general case that has been missing: the existing
Note ontology is platform documentation (no author, no creation time,
content is a file URI), and TaskNote is scoped to a task.
Modelled on schema.org/NoteDigitalDocument, with identity and time fields
following this registry's convention (id / createdAt / authorEName) rather
than schema.org's, so it reads like its neighbours here.
@EgorPPS
EgorPPS requested a review from coodos as a code ownerAugust 5, 2026 07:29
@coderabbitai

coderabbitaiBot commented Aug 5, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: c1608510-f678-4384-ba66-8804e990b9e4

📥 Commits

Reviewing files that changed from the base of the PR and between 6d1b8b6 and 43294c5.

📒 Files selected for processing (1)
  • services/ontology/schemas/personalNote.json

📝 Walkthrough

Walkthrough

Added a draft-07 JSON Schema for PersonalNote. The schema defines note identity, content, metadata, attachments, provenance, archive status, derived-record references, required fields, and additional-property handling.

Changes

PersonalNote schema

Layer / File(s)Summary
PersonalNote validation contract
services/ontology/schemas/personalNote.json
Defines the PersonalNote object, property types, nested derivedRecords references, required fields, archive default, and allowance for additional properties.

Estimated code review effort: 2 (Simple) | ~10 minutes

Suggested reviewers:coodos

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check nameStatusExplanationResolution
Description check⚠️ WarningThe description explains the schema and design, but it omits the issue number, change type, testing details, and checklist.Add the Issue Number, Type of change, How the change has been tested, and completed Change checklist sections.
✅ Passed checks (4 passed)
Check nameStatusExplanation
Title check✅ PassedThe title clearly identifies the addition of the PersonalNote ontology schema.
Docstring Coverage✅ PassedNo functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check✅ PassedCheck skipped because no linked issues were found for this pull request.
Out of Scope Changes check✅ PassedCheck 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 add-personal-note-ontology

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

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

Sign up for freeto 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

@EgorPPS
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Add PersonalNote ontology schema - #1100

Open
EgorPPS wants to merge 1 commit into
mainfrom
add-personal-note-ontology
Open

Add PersonalNote ontology schema#1100
EgorPPS wants to merge 1 commit into
mainfrom
add-personal-note-ontology

Conversation

@EgorPPS

@EgorPPSEgorPPS commented Aug 5, 2026

Copy link
Copy Markdown
Contributor

Adds PersonalNote — a note a person wrote for themselves.

Why a new schema rather than reuse

The registry currently has no type for this, and the two nearest candidates are both something else:

  • Note (18a83870-…) is platform documentation. Every record of it in the wild is an integration note or a marketplace listing ("Ontology: File", "Marketplace Listing"); it has no author and no creation time, its content is a URI pointing at a file, and its audience means "who is this documentation written for". A person's note does not belong there.
  • TaskNote is scoped to a task — it requires taskId.

Shape

Modelled on schema.org/NoteDigitalDocument, so the semantics are familiar outside W3DS, but the identity and time fields follow this registry's convention rather than schema.org's — id / createdAt / authorEName instead of dateCreated / author — because all 30 existing schemas name them that way and a reader here should not have to special-case one type. The mapping is stated in the schema description.

Deliberately domain-level and general: what a note is about goes in about / keywords, never into a narrower type. A note about paint and a note about a bike ride are the same kind of thing, and splitting them by subject is how vocabulary fragments.

Two fields worth calling out:

  • derivedRecords — references to records extracted from the note (a purchase read off a photographed letter, a product identified in it), each carrying confidence when it was inferred rather than read verbatim. The note stays authoritative for what was actually said: a derived reading can be wrong and redone, the original cannot.
  • capturedBy — the eName of the application that recorded it, so a reader can tell an app-assisted capture from a hand-typed one.

additionalProperties: true, following communityActivity and socialMediaPost.

Context

Written for Nootropic, where a person hands over a photo, a voice note or a document and expects the meaning to be findable years later. Their utterance is stored as a PersonalNote and anything structured we extract references it. It is published in our self-description at /.well-known/w3ds-platform.json with registered: false until this merges — the flag is checked against this registry at request time rather than maintained by hand.

Happy to rename fields or drop derivedRecords / capturedBy if you would rather keep the type minimal.

Summary by CodeRabbit

  • New Features
    • Added a standardized PersonalNote schema.
    • Personal notes now support content, authorship, creation time, attachments, discovery details, provenance, related records, and archive status.
    • Required fields ensure each note includes an identifier, text, creation timestamp, and author.

A person's own note — the general case that has been missing: the existing
Note ontology is platform documentation (no author, no creation time,
content is a file URI), and TaskNote is scoped to a task.
Modelled on schema.org/NoteDigitalDocument, with identity and time fields
following this registry's convention (id / createdAt / authorEName) rather
than schema.org's, so it reads like its neighbours here.
@EgorPPS
EgorPPS requested a review from coodos as a code ownerAugust 5, 2026 07:29
@coderabbitai

coderabbitaiBot commented Aug 5, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: c1608510-f678-4384-ba66-8804e990b9e4

📥 Commits

Reviewing files that changed from the base of the PR and between 6d1b8b6 and 43294c5.

📒 Files selected for processing (1)
  • services/ontology/schemas/personalNote.json

📝 Walkthrough

Walkthrough

Added a draft-07 JSON Schema for PersonalNote. The schema defines note identity, content, metadata, attachments, provenance, archive status, derived-record references, required fields, and additional-property handling.

Changes

PersonalNote schema

Layer / File(s)Summary
PersonalNote validation contract
services/ontology/schemas/personalNote.json
Defines the PersonalNote object, property types, nested derivedRecords references, required fields, archive default, and allowance for additional properties.

Estimated code review effort: 2 (Simple) | ~10 minutes

Suggested reviewers:coodos

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check nameStatusExplanationResolution
Description check⚠️ WarningThe description explains the schema and design, but it omits the issue number, change type, testing details, and checklist.Add the Issue Number, Type of change, How the change has been tested, and completed Change checklist sections.
✅ Passed checks (4 passed)
Check nameStatusExplanation
Title check✅ PassedThe title clearly identifies the addition of the PersonalNote ontology schema.
Docstring Coverage✅ PassedNo functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check✅ PassedCheck skipped because no linked issues were found for this pull request.
Out of Scope Changes check✅ PassedCheck 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 add-personal-note-ontology

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

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

Sign up for freeto 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

@EgorPPS
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Add PersonalNote ontology schema - #1100

Open
EgorPPS wants to merge 1 commit into
mainfrom
add-personal-note-ontology
Open

Add PersonalNote ontology schema#1100
EgorPPS wants to merge 1 commit into
mainfrom
add-personal-note-ontology

Conversation

@EgorPPS

@EgorPPSEgorPPS commented Aug 5, 2026

Copy link
Copy Markdown
Contributor

Adds PersonalNote — a note a person wrote for themselves.

Why a new schema rather than reuse

The registry currently has no type for this, and the two nearest candidates are both something else:

  • Note (18a83870-…) is platform documentation. Every record of it in the wild is an integration note or a marketplace listing ("Ontology: File", "Marketplace Listing"); it has no author and no creation time, its content is a URI pointing at a file, and its audience means "who is this documentation written for". A person's note does not belong there.
  • TaskNote is scoped to a task — it requires taskId.

Shape

Modelled on schema.org/NoteDigitalDocument, so the semantics are familiar outside W3DS, but the identity and time fields follow this registry's convention rather than schema.org's — id / createdAt / authorEName instead of dateCreated / author — because all 30 existing schemas name them that way and a reader here should not have to special-case one type. The mapping is stated in the schema description.

Deliberately domain-level and general: what a note is about goes in about / keywords, never into a narrower type. A note about paint and a note about a bike ride are the same kind of thing, and splitting them by subject is how vocabulary fragments.

Two fields worth calling out:

  • derivedRecords — references to records extracted from the note (a purchase read off a photographed letter, a product identified in it), each carrying confidence when it was inferred rather than read verbatim. The note stays authoritative for what was actually said: a derived reading can be wrong and redone, the original cannot.
  • capturedBy — the eName of the application that recorded it, so a reader can tell an app-assisted capture from a hand-typed one.

additionalProperties: true, following communityActivity and socialMediaPost.

Context

Written for Nootropic, where a person hands over a photo, a voice note or a document and expects the meaning to be findable years later. Their utterance is stored as a PersonalNote and anything structured we extract references it. It is published in our self-description at /.well-known/w3ds-platform.json with registered: false until this merges — the flag is checked against this registry at request time rather than maintained by hand.

Happy to rename fields or drop derivedRecords / capturedBy if you would rather keep the type minimal.

Summary by CodeRabbit

  • New Features
    • Added a standardized PersonalNote schema.
    • Personal notes now support content, authorship, creation time, attachments, discovery details, provenance, related records, and archive status.
    • Required fields ensure each note includes an identifier, text, creation timestamp, and author.

A person's own note — the general case that has been missing: the existing
Note ontology is platform documentation (no author, no creation time,
content is a file URI), and TaskNote is scoped to a task.
Modelled on schema.org/NoteDigitalDocument, with identity and time fields
following this registry's convention (id / createdAt / authorEName) rather
than schema.org's, so it reads like its neighbours here.
@EgorPPS
EgorPPS requested a review from coodos as a code ownerAugust 5, 2026 07:29
@coderabbitai

coderabbitaiBot commented Aug 5, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: c1608510-f678-4384-ba66-8804e990b9e4

📥 Commits

Reviewing files that changed from the base of the PR and between 6d1b8b6 and 43294c5.

📒 Files selected for processing (1)
  • services/ontology/schemas/personalNote.json

📝 Walkthrough

Walkthrough

Added a draft-07 JSON Schema for PersonalNote. The schema defines note identity, content, metadata, attachments, provenance, archive status, derived-record references, required fields, and additional-property handling.

Changes

PersonalNote schema

Layer / File(s)Summary
PersonalNote validation contract
services/ontology/schemas/personalNote.json
Defines the PersonalNote object, property types, nested derivedRecords references, required fields, archive default, and allowance for additional properties.

Estimated code review effort: 2 (Simple) | ~10 minutes

Suggested reviewers:coodos

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check nameStatusExplanationResolution
Description check⚠️ WarningThe description explains the schema and design, but it omits the issue number, change type, testing details, and checklist.Add the Issue Number, Type of change, How the change has been tested, and completed Change checklist sections.
✅ Passed checks (4 passed)
Check nameStatusExplanation
Title check✅ PassedThe title clearly identifies the addition of the PersonalNote ontology schema.
Docstring Coverage✅ PassedNo functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check✅ PassedCheck skipped because no linked issues were found for this pull request.
Out of Scope Changes check✅ PassedCheck 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 add-personal-note-ontology

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

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

Sign up for freeto 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

@EgorPPS
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Add PersonalNote ontology schema - #1100

Open
EgorPPS wants to merge 1 commit into
mainfrom
add-personal-note-ontology
Open

Add PersonalNote ontology schema#1100
EgorPPS wants to merge 1 commit into
mainfrom
add-personal-note-ontology

Conversation

@EgorPPS

@EgorPPSEgorPPS commented Aug 5, 2026

Copy link
Copy Markdown
Contributor

Adds PersonalNote — a note a person wrote for themselves.

Why a new schema rather than reuse

The registry currently has no type for this, and the two nearest candidates are both something else:

  • Note (18a83870-…) is platform documentation. Every record of it in the wild is an integration note or a marketplace listing ("Ontology: File", "Marketplace Listing"); it has no author and no creation time, its content is a URI pointing at a file, and its audience means "who is this documentation written for". A person's note does not belong there.
  • TaskNote is scoped to a task — it requires taskId.

Shape

Modelled on schema.org/NoteDigitalDocument, so the semantics are familiar outside W3DS, but the identity and time fields follow this registry's convention rather than schema.org's — id / createdAt / authorEName instead of dateCreated / author — because all 30 existing schemas name them that way and a reader here should not have to special-case one type. The mapping is stated in the schema description.

Deliberately domain-level and general: what a note is about goes in about / keywords, never into a narrower type. A note about paint and a note about a bike ride are the same kind of thing, and splitting them by subject is how vocabulary fragments.

Two fields worth calling out:

  • derivedRecords — references to records extracted from the note (a purchase read off a photographed letter, a product identified in it), each carrying confidence when it was inferred rather than read verbatim. The note stays authoritative for what was actually said: a derived reading can be wrong and redone, the original cannot.
  • capturedBy — the eName of the application that recorded it, so a reader can tell an app-assisted capture from a hand-typed one.

additionalProperties: true, following communityActivity and socialMediaPost.

Context

Written for Nootropic, where a person hands over a photo, a voice note or a document and expects the meaning to be findable years later. Their utterance is stored as a PersonalNote and anything structured we extract references it. It is published in our self-description at /.well-known/w3ds-platform.json with registered: false until this merges — the flag is checked against this registry at request time rather than maintained by hand.

Happy to rename fields or drop derivedRecords / capturedBy if you would rather keep the type minimal.

Summary by CodeRabbit

  • New Features
    • Added a standardized PersonalNote schema.
    • Personal notes now support content, authorship, creation time, attachments, discovery details, provenance, related records, and archive status.
    • Required fields ensure each note includes an identifier, text, creation timestamp, and author.

A person's own note — the general case that has been missing: the existing
Note ontology is platform documentation (no author, no creation time,
content is a file URI), and TaskNote is scoped to a task.
Modelled on schema.org/NoteDigitalDocument, with identity and time fields
following this registry's convention (id / createdAt / authorEName) rather
than schema.org's, so it reads like its neighbours here.
@EgorPPS
EgorPPS requested a review from coodos as a code ownerAugust 5, 2026 07:29
@coderabbitai

coderabbitaiBot commented Aug 5, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: c1608510-f678-4384-ba66-8804e990b9e4

📥 Commits

Reviewing files that changed from the base of the PR and between 6d1b8b6 and 43294c5.

📒 Files selected for processing (1)
  • services/ontology/schemas/personalNote.json

📝 Walkthrough

Walkthrough

Added a draft-07 JSON Schema for PersonalNote. The schema defines note identity, content, metadata, attachments, provenance, archive status, derived-record references, required fields, and additional-property handling.

Changes

PersonalNote schema

Layer / File(s)Summary
PersonalNote validation contract
services/ontology/schemas/personalNote.json
Defines the PersonalNote object, property types, nested derivedRecords references, required fields, archive default, and allowance for additional properties.

Estimated code review effort: 2 (Simple) | ~10 minutes

Suggested reviewers:coodos

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check nameStatusExplanationResolution
Description check⚠️ WarningThe description explains the schema and design, but it omits the issue number, change type, testing details, and checklist.Add the Issue Number, Type of change, How the change has been tested, and completed Change checklist sections.
✅ Passed checks (4 passed)
Check nameStatusExplanation
Title check✅ PassedThe title clearly identifies the addition of the PersonalNote ontology schema.
Docstring Coverage✅ PassedNo functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check✅ PassedCheck skipped because no linked issues were found for this pull request.
Out of Scope Changes check✅ PassedCheck 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 add-personal-note-ontology

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

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

Sign up for freeto 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

@EgorPPS