Skip to content

content(blog): views, dashboards and apps are projections of the ontology — the naming test, measured on app-todo (slot 2026-11-10) - #263

Draft
objectstack-fleet[bot] wants to merge 8 commits into
mainfrom
claude/sharp-mendel-1087cg-issue-262
Draft

objectstack-fleet[bot] wants to merge 8 commits into
mainfrom
claude/sharp-mendel-1087cg-issue-262

Conversation

@objectstack-fleet

@objectstack-fleet objectstack-fleet Bot commented Oct 16, 2026 •

Copy link
Copy Markdown
Contributor

Fixes #262
Refs #236 (item C)

Slot: date: 2026-11-10 (Tuesday). The seat merges on that day and no earlier (www AGENTS.md, "Publishing cadence"); this PR stays a draft until then. The Date is in the future advisory from content:lint is expected until the slot.

What this adds

One new directory, content/blog/views-dashboards-apps-are-projections-of-the-ontology/:

  • index.mdx (en, authored) and index.zh-Hans.mdx (zh-Hans, re-derived rather than translated); index.zh-Hant.mdx generated by pnpm gen:zh-hant. No further locales.
  • cover-en.svg / cover.svg and naming-test-en.svg / naming-test.svg (the English-text pair for every non-Chinese locale, the Chinese-text pair for zh-Hans/zh-Hant). Every text node carries an explicit fill; pnpm svg:lint passes on all four (162 text boxes). Rendered at native size and at 390 px and looked at.

Nothing else in the tree changes.

The post, in one paragraph

The thesis is in the first hundred words: reviewing the definition line reviews every surface derived from it, because the derived surfaces name only the object and ask the definition on every call; the projections that name the field (view columns, dataset measures, translation labels) are pinned and stay as authored. The ownable concept is the naming test — if a projection names the field, you review it; if it names only the object, the runtime already did — a companion to #211's removal test. The number behind it: one five-line diff, seven surfaces followed with zero edits, four projections unchanged, and the build gate (field-no-consumers) said so before boot.

Overlap fence

The definition of a projection and the removal test are linked, not restated: the #211 post (/en/blog/what-does-the-ontology-is-the-software-mean/), the /ontology/ page (its "Projections" section) and the ontology-projection glossary term from PR #259. The post starts at the review angle.

Proof artifact, measured

Setup: examples/app-todo copied out of objectstack at origin/main 43567a8f (2026-10-16) into my scratchpad, its workspace: dependencies pinned to the published 18.0.0-next.2 packages (the next dist-tag; the repo's package versions at that commit are 18.0.0-next.2), booted with os dev on the default SQLite file, API key minted over POST /api/v1/keys from the seeded dev admin. The shared objectstack checkout has no node_modules or dist, so a run from source was not available; nothing was run or edited inside the www tree or the objectstack checkout.

The diff (the only change between the two readings):

+    budget: Field.currency({
+      label: 'Budget',
+      min: 0,
+    }),
Surface Before After Source of the mechanism
SQLite todo_task (PRAGMA table_info) 27 columns (the formula field days_overdue has none) 28; budget float added to the existing table packages/drivers/driver-sql/src/sql-driver.ts, initObjects create/alter branches (walks obj.fields, createColumn per entry); schema-drift.ts header: the sync is additive-only
GET /api/v1/data/todo_task 27 keys per record 28 packages/rest/src/rest-route-ledger.ts rows GET/POST /api/v1/data/:object (per object, not per field)
POST /api/v1/data/todo_task with budget: 1200 400 {"error":"Unknown field 'budget' on object 'todo_task'","code":"INVALID_FIELD"} 201 same
GET /api/v1/meta/object/todo_task 27 item.fields 28; {label:'Budget',type:'currency',min:0,…} GET /api/v1/meta/:type/:name (route ledger)
MCP tools/list 12 tools 12 tools; budget in no schema packages/mcp/src/mcp-http-tools.ts (registerTool sites)
MCP describe_object 19 fields 20 packages/mcp/src/stdio-data-bridge.ts describeObject: Object.entries(def.fields)
MCP query_records where budget >= 1000, fields [subject, budget] — [["Renew the domain", 1200]] same bridge, query
OpenAPI /api/v1/openapi.json 14 todo_task paths, no field schema unchanged packages/rest/src/openapi-endpoints.ts
Console create form /_console/apps/todo_app/todo_task/new 16 inputs 17; Budget between Actual Hours and Notes objectui packages/app-shell/src/utils/recordFormNavigation.ts resolveFormViewLayout (no form view ⇒ no sections) and MetadataProvider.tsx ("the dialog lays out the object's own fields")
Console record detail (new record) — BUDGET 1,200.00 in Details; the old record's collapsed group went from "Show 6 empty fields" to 7 same
Console All Tasks grid 6 headers 6 headers examples/app-todo/src/views/task.view.ts (columns by field name); GET /api/v1/meta/view answers the same 3 views before and after
zh-CN label (Accept-Language: zh-CN) subject → 主题 budget → Budget examples/app-todo/src/translations/zh-CN.ts names 19 fields
Dataset task_metrics / dashboard 6 dimensions, 3 measures by field name unchanged (read from the definition, not re-queried) src/datasets/task.dataset.ts, src/dashboards/task.dashboard.ts
Compile gate — ⚠ object "todo_task" · field "budget": declared, but nothing in this stack displays or reads it (inert) … rule: field-no-consumers os dev --compile log (49 author-time rules); rule text from os explain field-no-consumers

Honesty notes carried into the post: the Console grid did not follow (pinned columns); the zh-CN label falls through to English; the dataset cannot chart the field until a measure names it; MCP tools/list and the OpenAPI document are object-level and unchanged by design; a removal would not follow in the table (additive-only sync, drift via os migrate); the status-option example (cancelled counted as overdue by the view filter status not_equals completed and the dashboard metric status: { $ne: 'completed' }) is stated as a reading of task.view.ts / task.dashboard.ts, not a run. The same gate also flags five of the example's own existing fields as carrier-only; the post does not claim the example is clean.

Positioning lines are quoted from src/lib/positioning.ts (T4_STANDALONE and e1, en and zh-Hans) verbatim. No token figures. No model identifiers.

Variation against the siblings (writing rule 9)

Opening: the diff itself, then the answer (#211 opens with a definition paragraph, post A with three bold words, #237 with two tool-call outputs, #244 with a definition contrast and a key, #245 with a claim and a run). Proof artifact: an eleven-row before/after measurement table plus the gate's own line (siblings use a line count, a sourced mapping table, a two-user run, a removed key, and a three-mistake gate run). Structure: no separate "Hosted" section; T4/E1 close the CTA. The diagram is a two-column sort around the diff, not a pipeline.

Two dependencies, stated

  1. PR content(positioning): speak the ontology below the hero — capability pages, home, glossary, llms.txt, the AI-native cluster #259 (glossary term ontology-projection). The post links /en/glossary/ontology-projection/ (zh: /zh-Hans/glossary/ontology-projection/) as the card asks. Until content(positioning): speak the ontology below the hero — capability pages, home, glossary, llms.txt, the AI-native cluster #259 lands, content:lint (source mode and --published, which pnpm build runs first) reports the link as a blocking dangling link and pnpm build exits 1. Measured both ways on this branch: with content(positioning): speak the ontology below the hero — capability pages, home, glossary, llms.txt, the AI-native cluster #259's two term files copied in untracked, every gate below is green; without them, the one red is exactly ✗ content/blog/views-dashboards-apps-are-projections-of-the-ontology/index.mdx: Dangling internal link [glossary entry](/en/glossary/ontology-projection/): no term file content/glossary/*/ontology-projection.ts — create it, or fix the slug (and the same line for the zh-Hans and zh-Hant files). content(positioning): speak the ontology below the hero — capability pages, home, glossary, llms.txt, the AI-native cluster #259 lands before the 2026-11-10 slot; a CI re-run then goes green. The link is kept rather than dropped, per the card.
  2. A generator gap (reported, not fixed — outside this card's file surface). scripts/gen-zh-hant.mjs zhHantTargetBuilds rewrites /zh-Hans/… to /zh-Hant/… only for the locale home, static routes, blog posts and glossary terms; it has no branch for marketing pages although its own header says marketing pages derive zh-Hant from zh-Hans. So a zh-Hans post linking /zh-Hans/ontology/ produces a zh-Hant file that content:lint --published rejects ("/zh-Hant/ontology/ IS built … change the locale segment"), and a cross-locale /en/ontology/ link is rejected in both zh files. Measured here: exit 1 with that line in both cases. Consequence for this PR: the zh-Hans post names the /ontology/ page with its path in inline code instead of a hyperlink (the en post links it). Restoring the link is a one-word edit once the generator carries a marketing-page branch mirroring its glossary one. Filed for the seat in the report as an out-of-scope finding.

Gates (worktree HEAD 13a6486; every command re-run after the final commit; exit codes captured before any pipe)

With #259's term files present (untracked, removed before commit):

  • pnpm content:lint — exit 0 — ✓ content lint passed (350 files, 46 glossary terms checked); advisories only (title width, description width, future date).
  • pnpm check — exit 0 — Result (158 files): 0 errors, 0 warnings, 0 hints (under os-verify-lock.sh, VERDICT command-exit 0).
  • pnpm build (= gen:zh-hant → content:lint --published → svg:lint → astro build → og:images → content:lint --dist) — exit 0 under os-verify-lock.sh (VERDICT command-exit 0 · held the lock 91s) — ✓ zh-Hant: generated 48, kept 0 hand-maintained, 8 with body links pointed at /zh-Hant/ · ✓ content lint passed (350 files, 46 glossary terms checked) · 915 page(s) built in 64.22s · ✓ share images: 91 rendered at 1200x630 · ✓ content lint --dist links passed (98734 internal links in 915 built pages resolve to built files); tree clean after the build (only the generated index.zh-Hant.mdx, committed).
  • pnpm seo:smoke — exit 0 — SEO smoke test passed (905 HTML pages checked; 589 sitemap URLs against 316 noindexed pages; 5619 canonical/hreflang annotations; 17058 prose blocks language-checked; 98724 internal links redirect-checked).
  • pnpm svg:lint on the four new SVGs — exit 0 — svg-text-fit: OK … 4 SVGs, 162 text boxes.

Without #259's term files (the state CI will see until #259 lands):

  • pnpm content:lint — exit 1 — ✗ content/blog/views-dashboards-apps-are-projections-of-the-ontology/index.mdx: Dangling internal link [glossary entry](/en/glossary/ontology-projection/): no term file content/glossary/*/ontology-projection.ts — create it, or fix the slug (and the same line for the zh-Hans and zh-Hant files).

Browser check (Playwright, Chromium, against astro preview of the built dist/)

Pages: the en, zh-Hans and zh-Hant post and the en and zh-Hans blog lists, each at 1440×750 and 390×844.

Acceptance notes


Generated by Claude Code

Patch round 1 (added by the seat)

Patch round 2 (added by the seat)


Addendum 2026-11-06: slot-ahead refresh on 18.3.0 (www seat 1)

Addendum: re-measured on ObjectStack 18.3.0 (refresh commit c8eb1ab)

This is a correction of the existing post under the maintainer's 18.1 A ruling. The post's argument is unchanged. The refresh is one commit on top of a --no-ff merge of origin/main (2416a44). date: is unchanged.

What was re-measured, and how

  • Version. npm view @objectstack/cli dist-tags on 2026-11-06 02:24Z returned { next: '18.2.0', latest: '18.3.0' }. The example came from the @objectstack/cli@18.3.0 tag, which is commit 83d7e4ae ("chore: version packages (#26517)", 2026-11-03).
  • Setup. I ran git archive '@objectstack/cli@18.3.0' examples/app-todo, replaced the workspace: dependencies with 18.3.0 (all 14 @objectstack/* packages are published at 18.3.0) and ran pnpm install. npx os --version returned @objectstack/cli/18.3.0 linux-x64 node-v22.22.0. The server was os dev --no-watch -p 49880 -d file:./db.sqlite, which uses SqlDriver(better-sqlite3). The API key came from POST /api/v1/keys (201). For the "after" readings I applied the same five-line budget: Field.currency({ label: 'Budget', min: 0 }) diff after actual_hours and restarted with --compile.
Reading Before (18.3.0) After (18.3.0) Post said (18.0.0-next.2)
PRAGMA table_info(todo_task) 28 columns 29, budget float 27 → 28
GET /api/v1/data/todo_task keys per record 28 29 27 → 28
POST /api/v1/data/todo_task with budget: 1200 400 {"error":"Unknown field 'budget' on object 'todo_task'","code":"INVALID_FIELD",…} 201 {"id":…} same
GET /api/v1/meta/object/todo_task fields 28 29, {label:'Budget',type:'currency',min:0,…} 27 → 28
MCP describe_object fields 28 29 19 → 20
MCP query_records where budget $gte 1000 INVALID_FIELD [{subject:'Renew the domain', budget:1200}] same
MCP tools/list 12 tools (same names) 12 12
OpenAPI paths containing todo_task 17 (21 operations), no budget anywhere in the doc 17, no budget 14
Console create form labels 16 17, Budget between Actual Hours and Notes 16 → 17
Console record page — BUDGET 1,200.00 on the Overview tab "in Details"
todo_task.default / .overdue / .due_today columns 6 / 5 / 5 unchanged same
zh-CN (Accept-Language: zh-CN) subject → 主题 budget → Budget same
Dataset task_metrics 6 dimensions, 3 measures unchanged, no budget same
Author-time rules → Running author-time rules (63)... — 49
  • Gate text at 18.3.0. The fix: line is unchanged. The rule: line now ends with — `os explain field-no-consumers` for what counts as a consumer.
  • os explain field-no-consumers (exit 0). All three quoted passages are still verbatim: the consumer list, "names a field without reading it" with its carrier examples, and "a consumer can legitimately live outside the stack — …". The consumer definition now also counts a declared field group and a seed or import-mapping match key.
  • Why describe_object jumped from 19 to 28. At 43567a8f, describeObject read metadataService.getObject (the authored object). At 18.3.0 it reads objectView.getObject (the served object, which includes system fields) in packages/mcp/src/stdio-data-bridge.ts:942-958. The Object.entries(fields) mapping the post cites is still there.
  • Overdue clause source. examples/app-todo/src/objects/task.object.ts:73-74 at the tag reads dueLike: true, and settledWhen: P`record.status == 'completed'`,. The spec says "Display only: nothing on the write path reads either key. The consumer is the renderer — objectui's date and datetime cells" (packages/spec/src/data/field.zod.ts:2324-2326). The overdue view filter (status not_equals completed) and the dashboard metric (status: { $ne: 'completed' }) still state the rule separately.
  • Other code claims checked at the tag. The additive-only sync is stated in packages/drivers/driver-sql/src/schema-drift.ts:6-7. connect-mcp.mdx:225 still says "Twelve tools".

What changed in the post

  • Relabelled to 18.3.0 in the prose, both cover footers (en and zh) and both naming-test SVGs (counts and the rule count of 63). The example commit is now 83d7e4ae, the 18.3.0 release tag.
  • Table: 28→29 throughout. describe_object is now 28→29. The Console URL is now /_console/apps/com.example.todo/todo_task/new, which is where todo_app redirects. The record detail is on the Overview tab. OpenAPI is 17 paths. The gate's rule: line is updated.
  • os explain: added the clause about the newly counted consumers. The quotes are unchanged.
  • Overdue paragraph: due_date declares the definition once (dueLike + settledWhen, task.object.ts lines 73–74 at 18.3.0). These keys are display-only, so the view filter and the metric restate the rule. The phrase "both projections name status" became "all three", and "view and dataset definitions" became "view, dashboard and object definitions", because the metric is a dashboard widget.
  • ObjectOS paragraph: "on either edition you can export…" is replaced by the E1 wording ("…is planned"), matching main's 12d151a. It contradicted src/lib/positioning.ts E1.
  • Linked The Ontology Is the Software in "Where the definition of a projection lives". It states the same core/projection boundary, and I found no contradiction with it.

Five locales added

index.ja.mdx, index.ko.mdx, index.de.mdx, index.es.mdx and index.fr.mdx. Each is translated from the corrected English and reuses cover-en.svg and naming-test-en.svg, as AGENTS.md "Blog Content" says translated locales do. Terms follow the existing locale posts (definition post: 中核/投影/削除テスト, 핵심/투영/제거 테스트, Kern/Projektion/Entfernungstest, núcleo/proyección/prueba de eliminación, noyau/projection/test de suppression), and so do the tags. The English os explain and gate quotes are marked <span lang="en">…</span> with a translation after them, as in 217094b. Links go to the locale's own definition and ontology posts; links to English-only targets go to /en/. zh-Hant was regenerated with pnpm gen:zh-hant.

Gates (tree = c8eb1ab)

  • pnpm install --frozen-lockfile: exit 0.

  • pnpm content:lint: ✓ content lint passed (422 files, 46 glossary terms checked). The only warnings for this post are title/description width and the future date, the same kind the corpus already carries.

  • pnpm check, under the lock: 0 errors, 0 warnings, 0 hints, VERDICT command-exit 0.

  • pnpm build, under the lock: VERDICT command-exit 0. svg-text-fit OK (173 SVGs), and content-lint --dist passed for links, CJK breaks and quotation marks.

  • pnpm seo:smoke: passed (993 pages, 21770 prose blocks language-checked).

  • Word-break probe for all 8 locales at 390 and 360 (post h1/h2/h3 and the blog-index first card): 2 splits, both CSS dictionary hyphenation with a rendered hyphen (es h1 "proyec-ciones" at 360, de index card "Projek-tionen" at 390, checked in screenshots). There were 0 splits without a hyphen.

  • Screenshots: the post top in all 8 locales at 1440 light, plus en and zh-Hans at 390, and the four SVGs at native size. All were looked at.

  • Rework round 1 (156848a): removed the retired T4 quote ("Want the same loop hosted … commercial runtime environment built on ObjectStack") from all eight locales. Each locale now quotes the current T4 verbatim from src/lib/positioning.ts (T4_STANDALONE for en, each locale's own t4 elsewhere, zh-Hant regenerated). I dropped the hosted/self-managed sentence and kept the E1 "export is planned" sentence. grep -rn "same loop\|commercial runtime" on the post folder prints nothing. content:lint 0, check 0, build 0, the last two under the lock.

…logy — the naming test, measured on app-todo (slot 2026-11-10)

One new post directory: en and zh-Hans authored, zh-Hant generated, two
SVG pairs. The proof artifact is a one-field diff on examples/app-todo at
objectstack 43567a8f, run on the published 18.0.0-next.2 packages and
read before and after on the table, REST, metadata, MCP, Console, views,
translation and dataset surfaces.

Co-Authored-By: Claude <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_017GeNDQH7E5S2rX8ajVAPxv
…ded) into claude/sharp-mendel-1087cg-issue-262

Co-Authored-By: Claude <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_017GeNDQH7E5S2rX8ajVAPxv
…n surfaces follow; not every surface

The share image travels alone (writing rule 7): the headline now matches
the post's own reading, seven derived surfaces followed and four pinned
projections did not. Layout unchanged; zh re-derived, not translated.

Co-Authored-By: Claude <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_017GeNDQH7E5S2rX8ajVAPxv
@objectstack-fleet

Copy link
Copy Markdown
Contributor Author

席位核对

ACCEPT, held for the slot. repo:www.objectos.ai · seat 2 (session_017GeNDQH7E5S2rX8ajVAPxv), 2026-10-16T08:30Z, on head db59562, after one patch round. The PR stays draft until Tue 2026-11-10, its date. On that day the seat re-runs the gates and the browser check against that day's main, then flips it ready and squash-merges it.

Check Result
Shape Draft PR to main. First lines Fixes #262 and Refs #236 (item C); the only closing keyword in the body is Fixes #262. Assignee os-tesla.
File surface 7 files, all in the new content/blog/views-dashboards-apps-are-projections-of-the-ontology/. The merge commit brings main in; it adds nothing of its own.
CI on head Build and deploy: completed/success on db59562. On 13a6486 it was also green, because the PR build runs on the merge ref, which already carried #259.
Overlap fence (#262) It links #211, /en/ontology/ and the ontology-projection term rather than restating them. It adds what none of the three says: how a projection follows. The "naming test" is minted and paired with #211's removal test.
Measurement A real one-field diff on examples/app-todo (objectstack 43567a8f, published 18.0.0-next.2), with 11 before/after readings. It partly falsifies the seat's own assumption: pinned views, the dataset and the translation do not follow. The post makes that its thesis instead of hiding it.
Sources re-checked by the seat The field-no-consumers consumer and carrier wording is verbatim from packages/lint/src/rule-explanations.ts:63-71. The warning line matches the CLI's own output (packages/cli/test/explain-rule-id.test.ts:205). The Todo app's overdue definition, status not_equals 'completed', is at examples/app-todo/src/objects/task.object.ts:161.
Honesty Four limits are stated: hand-tuned views, translations, external consumers, and removals under additive-only sync. Semantic change is called a reading, not a measurement.
SVGs (seat) naming-test-en.svg (1200×760), cover.svg and cover-en.svg (1200×675) were rendered at native size and looked at. The patch round fixed the one defect the seat found: both cover headlines claimed "every surface" follows, against the post's own 7 / 4 measurement. They now read One field, / seven surfaces. and 「改一个字段,/ 七个面自己跟上。」.

Follow-up: once #265 lands, the zh-Hans /ontology/ mention becomes a link. The slot-day pass checks this.

Pointer for #262: ACCEPT (held to 2026-11-10) → PR #263 comment (this one).


Generated by Claude Code

…luster links, #265) into claude/sharp-mendel-1087cg-issue-262

Co-Authored-By: Claude <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_017GeNDQH7E5S2rX8ajVAPxv
…zh-hant rewrites marketing-page links

The inline-code mention was a detour around the generator gap (#265,
landed as 3c5b6c6); the zh-Hans post now links /zh-Hans/ontology/ like
the en post links /en/ontology/, and the generated zh-Hant file carries
/zh-Hant/ontology/.

Co-Authored-By: Claude <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_017GeNDQH7E5S2rX8ajVAPxv
@objectstack-fleet

Copy link
Copy Markdown
Contributor Author

席位核对 — re-recorded on head 0b2ee78

ACCEPT, still held for Tue 2026-11-10. repo:www.objectos.ai · seat 2 (session_017GeNDQH7E5S2rX8ajVAPxv), 2026-10-16T08:47Z. This supersedes the head named in 6211440801 (db59562); everything else in that record stands.

Check Result
Delta since db59562 The merge commit 6a8b1a8 brings in origin/main 3c5b6c6 and changes no post file. 0b2ee78 changes 2 lines: in index.zh-Hans.mdx the inline-code /zh-Hans/ontology/ becomes [本体页](/zh-Hans/ontology/), and the regenerated index.zh-Hant.mdx carries [本體頁](/zh-Hant/ontology/).
File surface vs main Still the 7 post files only (git diff --stat origin/main... → 7 files, +753).
CI on head Build and deploy: completed/success on 0b2ee78.

Pointer for #262: ACCEPT (held to 2026-11-10) → PR #263 comment (this one).


Generated by Claude Code

…and backfill five locales

Re-ran the eleven readings on the published 18.3.0 packages (npm latest on
2026-11-06) with examples/app-todo at the @objectstack/cli@18.3.0 release
commit 83d7e4ae. Relabelled prose, cover footers and naming-test SVGs to
18.3.0 and updated what drifted: 28 -> 29 columns/keys/metadata fields,
MCP describe_object now 28 -> 29 (it serves system fields), OpenAPI 17
paths, 63 author-time rules, the gate's rule line, the Console URL and the
Overview tab. The Overdue paragraph now quotes due_date's dueLike +
settledWhen (task.object.ts:73-74) and notes the keys are display-only.
The ObjectOS paragraph follows E1 (export is planned), and the post links
The Ontology Is the Software.

Adds ja, ko, de, es and fr translations; zh-Hant regenerated with
pnpm gen:zh-hant. date is unchanged.

Co-Authored-By: Claude <noreply@anthropic.com>
…d ObjectOS line

The closing paragraph in all eight locales quoted the retired "same loop
hosted … commercial runtime environment" T4, which src/lib/positioning.ts
says must not be reintroduced. It now quotes the current T4 verbatim
(T4_STANDALONE for en, each locale's positioning t4 elsewhere), drops the
hosted/self-managed sentence that restated the old quote, and keeps the E1
"export is planned" sentence. zh-Hant regenerated with pnpm gen:zh-hant.

Co-Authored-By: Claude <noreply@anthropic.com>
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.

Post (slot Tue 2026-11-10): Views, Dashboards and Apps Are Projections of the Ontology — What That Changes for Review

2 participants