Skip to content

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

Open

Description

@objectstack-fleet

Carries item C of #236. #236 keeps item D; item A is PR #260, held to 2026-11-03; item B is split into its own card in the same stroke.
Filing-gate category: ③ maintainer-directed task. The maintainer, PM session chat, 2026-10-15: 「立卡处理」 on the evaluation that proposed this post. #236 split it out per its own body: one dev per post.
Who acts: repo:www.objectos.ai · seat 2 (objectstack-ai/objectstack#23827). It dispatches on filing.
Dedupe: all 113 issues on this repo, open and closed, REST, 2026-10-16T07:34Z. projection: 4 hits — #236 (the parent), #211 (closed; post 1 defines the four projections and gives the removal test), #235 (closed; the /ontology/ page's projections section) and #233 (open; adds the ontology-projection glossary term). See the overlap fence below.
Dispatch tier: ceiling (CONTRACT_REVIEW_TIER) — reason: the maintainer's 2026-10-15 ruling that article cards dispatch at the ceiling tier.

The post

"Views, Dashboards and Apps Are Projections of the Ontology: What That Changes for Review" (working title, query-shaped). Slot Tue 2026-11-10, merged on that day by the seat.

en and zh-Hans authored (the Chinese re-derived, not translated); zh-Hant generated. Facts verified against objectstack origin/main on the day of writing. No token figures as positioning (#209 Q5).

Done looks like

Draft PR Refs #236 (item C) with Fixes this card. The five gates green. Browser check en + zh-Hans at 1440×750 and 390×844. SVGs rendered at native size and at phone width and looked at.


Generated by Claude Code

Activity

  1. objectstack-fleet commented on Oct 16, 2026

    @objectstack-fleet
    ContributorAuthor

    Claim: PM loop round 1
    Session: session_017GeNDQH7E5S2rX8ajVAPxv
    Account: os-tesla
    Branch: claude/sharp-mendel-1087cg-issue-262
    Worktree: www.objectos.ai-issue-262
    Domain: none — single-lane repo (repo:www.objectos.ai)
    Seat: repo:www.objectos.ai#2
    File surface: one new content/blog/ directory for this post (its index*.mdx and SVGs), en + zh-Hans authored, zh-Hant generated (stop on breach; explain in the report)
    Container & model: M, mode:subagent, model: CONTRACT_REVIEW_TIER — reason: the maintainer's 2026-10-15 ruling that article cards dispatch at the ceiling tier
    Clause-②: no
    Responsibility: n/a — not a defect card
    Thread-read: none
    Serial constraints cleared: slot 2026-11-10 free (seat 1's plan on #209, comment 6192871332; seat 2's on objectstack-ai/objectstack#23827); new post directory, no file shared with any open PR (#237 #244 #245 #255 #259 #260 read 2026-10-16T07:34Z); subject overlap fenced in the card body.

  2. objectstack-fleet commented on Oct 16, 2026

    @objectstack-fleet
    ContributorAuthor

    os-dev-report

    {
      "issue": 262,
      "status": "done",
      "branch": "claude/sharp-mendel-1087cg-issue-262",
      "pr": "https://github.com/objectstack-ai/www.objectos.ai/pull/263",
      "session": "session_017GeNDQH7E5S2rX8ajVAPxv — subagent of the dispatching seat; both relay stroke envelopes carried this id",
      "premise_still_valid": true,
      "summary": "Draft PR #263 adds one post directory for the 2026-11-10 slot: en and zh-Hans authored (zh re-derived), zh-Hant generated, cover and diagram SVG pairs. The proof artifact is a measured one-field diff (budget: Field.currency) on examples/app-todo copied from objectstack origin/main 43567a8f and run on the published 18.0.0-next.2 packages: seven object-named surfaces followed with no edit (SQLite 27 to 28 columns via additive alterTable; REST read 27 to 28 keys; REST write 400 INVALID_FIELD to 201; meta/object 27 to 28 fields; MCP describe_object 19 to 20; MCP query_records returns the record; Console create form 16 to 17 inputs and record detail shows BUDGET 1,200.00), while every projection that names fields stayed as authored (3 list views, zh-CN label falls through to Budget, task_metrics dataset); the compile gate printed field-no-consumers for the new field. The post mints the naming test (names the field: you review it; names only the object: the runtime already did) as the companion to #211 removal test, links the three existing definitions instead of restating them, and states what it does not cover (pinned views, translations, external consumers, removals under additive-only sync, semantic changes). PM assumption falsified in part: a Console view follows only where nothing is declared (the derived create form and detail), never the pinned grid columns; MCP tools/list and OpenAPI are object-level and do not change.",
      "tests": "Measurement (scratchpad copy of examples/app-todo at 43567a8f, deps pinned to 18.0.0-next.2, os dev -p 3977 then restart with --compile on 3978; dev admin sign-in and POST /api/v1/keys for an x-api-key; evidence in scratchpad before/ and after/): sqlite PRAGMA table_info 27 to 28 columns (budget float; days_overdue formula has no column); GET /api/v1/data/todo_task 27 to 28 record keys; POST with budget 1200: 400 {\"error\":\"Unknown field 'budget' on object 'todo_task'\",\"code\":\"INVALID_FIELD\"} to 201; GET /api/v1/meta/object/todo_task item.fields 27 to 28; Accept-Language zh-CN: subject=主题, budget=Budget; GET /api/v1/meta/view: 3 views unchanged (default 6 cols, overdue 5, due_today 5); openapi.json 14 todo_task paths, no budget before or after; MCP tools/list 12 tools both times, budget in no schema; describe_object 19 to 20 fields; query_records where budget gte 1000 returns [[\"Renew the domain\",1200]]; Playwright on the Console: All Tasks headers 6 both times, Create Task inputs 16 to 17 (Budget between Actual Hours and Notes), record detail BUDGET 1,200.00, old record Show 6 to Show 7 empty fields; compile log: field-no-consumers for budget (inert), 49 author-time rules, Build complete (533ms); os explain field-no-consumers quoted. Site gates at worktree HEAD 13a6486 with #259 term files copied in untracked: pnpm content:lint exit 0 (350 files, 46 glossary terms; advisories: title 88 chars, description 208 chars, future date); pnpm check exit 0 (158 files: 0 errors, 0 warnings, 0 hints); pnpm build exit 0 under os-verify-lock (VERDICT command-exit 0 · held the lock 91s): zh-Hant generated 48, content lint --published passed, svg-text-fit OK, 915 page(s) built in 64.22s, share images 91, content lint --dist links passed (98734 internal links in 915 built pages); pnpm seo:smoke exit 0 (905 HTML pages, 98724 internal links redirect-checked); pnpm svg:lint on the 4 new SVGs exit 0 (162 text boxes). Without the #259 files: pnpm content:lint exit 1 — 3 blocking dangling-link lines for /glossary/ontology-projection/ (en, zh-Hans, zh-Hant). Browser check (Playwright Chromium against astro preview of dist, started and stopped by PID): en/zh-Hans/zh-Hant post and en/zh-Hans blog list at 1440x750 and 390x844 all 200, no horizontal page overflow, 0 page errors; 2 images per post, cover once (eager) and the lazy diagram scrolled into view and decode()d; the table element is its own scroll container at 390 (display block, overflow-x auto, scrollWidth 521 vs clientWidth 358, scrollLeft settable); 10 internal links from the en post all 200 with the term files present; the post is the first card under Latest Articles; SVGs rendered standalone at 1200 and 390 and looked at. No ablation: no tested behaviour changed (content only).",
      "gates": "Local subset (www.objectos.ai has no dispatch-gates derivation; hand-derived from package.json as the prompt instructs), all at HEAD 13a6486, exit codes captured before any pipe: content:lint 0 (with #259 term files) / 1 (without, the dangling glossary link only); check 0; build 0 (lock VERDICT command-exit 0); seo:smoke 0; svg:lint 0. CI on PR #263 head 13a6486 at report time: check-run \"Build and deploy\" in_progress (https://github.com/objectstack-ai/www.objectos.ai/actions/runs/38872873482); its content:lint --published step is expected to fail on the dangling /glossary/ontology-projection/ link until PR #259 lands (before the 2026-11-10 slot), after which a re-run is expected green — the same two readings measured locally. \"Date is in the future\" is an advisory, not a failure. No label writes (prompt: none).",
      "line_budget": "n/a",
      "files_changed": [
        "content/blog/views-dashboards-apps-are-projections-of-the-ontology/index.mdx",
        "content/blog/views-dashboards-apps-are-projections-of-the-ontology/index.zh-Hans.mdx",
        "content/blog/views-dashboards-apps-are-projections-of-the-ontology/index.zh-Hant.mdx (generated by pnpm gen:zh-hant)",
        "content/blog/views-dashboards-apps-are-projections-of-the-ontology/cover-en.svg",
        "content/blog/views-dashboards-apps-are-projections-of-the-ontology/cover.svg",
        "content/blog/views-dashboards-apps-are-projections-of-the-ontology/naming-test-en.svg",
        "content/blog/views-dashboards-apps-are-projections-of-the-ontology/naming-test.svg"
      ],
      "deviations": [
        "Measurement ran on the published 18.0.0-next.2 npm packages with the example source copied from objectstack origin/main 43567a8f (the repo package versions at that commit are 18.0.0-next.2): the shared objectstack checkout has no node_modules or dist and a source build was not in budget. Post and PR body name both.",
        "Gates are red on CI until PR #259 lands: content:lint (source and --published, which pnpm build runs first) blocks on the dangling /glossary/ontology-projection/ link in all three locale files. Measured green with #259 two term files copied in untracked (never committed, removed before push), red without them. The link is kept per the card and the prompt.",
        "zh-Hans names the /ontology/ page with its path in inline code instead of a hyperlink: the zh-Hant generator rewrites no marketing-page links and content-lint rejects both the zh-Hans-pointing zh-Hant copy and a cross-locale /en/ link (out-of-scope finding below). en links all three places.",
        "One dev-server restart left the earlier pnpm exec child serving the old port, so the first after-run measured the stale artifact (useful: it yielded the before-state 400 INVALID_FIELD reading); found by log and ss, stopped by PID tree, re-measured on the recompiled server. Other agents preview servers on 4338-4343 were left untouched.",
        "Commit trailers kept model-free (Co-Authored-By: Claude; Claude-Session URL); the harness-suggested trailer carrying a model name was not written. PR footer in the role file session-URL form. No environment variable value printed; the API key for the local example lives only in the scratchpad.",
        "Worktree removed after the PR (node_modules first, no --force); the scratchpad run dir keeps the before/after evidence JSON, its 620M node_modules removed."
      ],
      "mcp_calls": "0 — no MCP GitHub tool was loaded or called",
      "api_writes": "5 — POST /repos/objectstack-ai/objectstack/dispatches x2 (relay strokes www-262-pr-create and www-262-report, sent with the session token); executed by the relay as objectstack-fleet[bot]: POST /repos/objectstack-ai/www.objectos.ai/pulls (#263, draft forced), POST /repos/objectstack-ai/www.objectos.ai/issues/263/assignees (os-tesla, read back as listed), POST /repos/objectstack-ai/www.objectos.ai/issues/262/comments (this report). git push x2 (empty-branch probe, commit 13a6486) are git, not REST. Local-only writes to the example server (POST /api/v1/keys, POST /api/v1/data/todo_task) are not GitHub writes.",
      "open_questions": [],
      "out_of_scope_findings": [
        "class: b · reach: public door pnpm build (content:lint --published) exits 1 for any zh-Hans post that links a marketing page such as /zh-Hans/ontology/ — measured on this branch: the generated zh-Hant file keeps the /zh-Hans/ link and lint answers \"Cross-locale internal link … /zh-Hant/ontology/ IS built — Change the locale segment\"; a cross-locale /en/ontology/ link is refused in both zh files the same way · evidence: scripts/gen-zh-hant.mjs zhHantTargetBuilds has branches for the locale home, STATIC_ROUTES, blog posts and glossary terms only, while the file header says glossary terms and marketing pages derive zh-Hant from zh-Hans (src/content-pages/registry.ts); no zh-Hans post linked a marketing page before this one, so the branch was never exercised · fix shape: a marketing-page branch mirroring the glossary one (content/pages/{zh-Hant,zh-Hans,en}/SLUG.ts) · Seam: spec:none → runtime:scripts/gen-zh-hant.mjs zhHantTargetBuilds | renderer:scripts/content-lint.mjs cross-locale rule · consumer: this post zh-Hans body (first real producer) · dedupe words: gen-zh-hant, zhHantTargetBuilds, marketing page, cross-locale, /zh-Hant/ontology/ · carrier: none named; for the seat to file; once landed, the zh-Hans link is a one-word restore in #263 or a follow-up",
        "observation, not filed: at objectstack 43567a8f on 18.0.0-next.2, os dev --compile on the unmodified examples/app-todo prints field-no-consumers for five of its own fields (reminder_date, tags, progress_percent, notes, category_color — carrier-only) and flow-draft-status-ambiguous for two flows; the rule is advisory and the post says the example is not clean · carrier: none · noted, not filed"
      ]
    }

    Generated by Claude Code

  3. objectstack-fleet commented on Oct 16, 2026

    @objectstack-fleet
    ContributorAuthor

    os-dev-report-addendum

    {
      "issue": 262,
      "status": "done",
      "round": "patch 1 — cover headlines",
      "branch": "claude/sharp-mendel-1087cg-issue-262",
      "pr": "https://github.com/objectstack-ai/www.objectos.ai/pull/263",
      "head": "db59562 — 13a6486 (post) → 838e901 (merge of origin/main 45d5ce9, which carries #259 ontology-projection term) → db59562 (covers)",
      "session": "session_017GeNDQH7E5S2rX8ajVAPxv",
      "premise_still_valid": true,
      "summary": "Both cover headlines now state the measurement instead of overclaiming it: cover-en.svg reads \"One field, / seven surfaces.\" (was \"One field. / Every surface.\") and cover.svg reads 「改一个字段,/ 七个面自己跟上。」 (was 「改一个字段,/ 动到每个面。」, re-derived, not translated). Layout, lead, chips, cards and footer unchanged; the right-hand cards already carried the 7-followed / 4-pinned split. The worktree was recreated from the branch at 13a6486, origin/main 45d5ce9 merged in with a merge commit (838e901), so the glossary link resolves on the branch and every local gate is green with no copied files. The zh-Hans /ontology/ mention stays inline code as instructed.",
      "files_changed": [
        "content/blog/views-dashboards-apps-are-projections-of-the-ontology/cover-en.svg (2 text nodes)",
        "content/blog/views-dashboards-apps-are-projections-of-the-ontology/cover.svg (1 text node)"
      ],
      "tests": "pnpm svg:lint on the two covers: exit 0 — svg-text-fit: OK (2 SVGs, 54 text boxes, tolerance 2px, 0 allowlisted). Rendered standalone at 1200 and 390 px (Playwright Chromium) and looked at: both headlines fit the left column, no collision with the right-hand cards, dark text on the light gradient; 390 px legible.",
      "gates": "All at HEAD db59562 (git rev-parse --short HEAD), exit codes captured before any pipe: 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 under os-verify-lock slot www-262 — VERDICT command-exit 0 · held the lock 11s · waited 0s — Result (160 files): 0 errors, 0 warnings, 0 hints; pnpm build exit 0 under the lock — VERDICT command-exit 0 · held the lock 100s · waited 0s — ✓ zh-Hant: generated 48, kept 0 hand-maintained · ✓ content lint passed (350 files) · svg-text-fit: OK · 915 page(s) built in 73.97s · ✓ share images: 91 rendered · ✓ content lint --dist links passed (98822 internal links in 915 built pages resolve to built files); pnpm seo:smoke exit 0 — SEO smoke test passed (905 HTML pages checked; 589 sitemap URLs against 316 noindexed pages; 5619 canonical/hreflang annotations; 17153 prose blocks language-checked; 98812 internal links redirect-checked); pnpm svg:lint exit 0 (above). Tree clean after the build. CI on PR #263 head db59562 at report time: Build and deploy — in_progress (https://github.com/objectstack-ai/www.objectos.ai/actions/runs/38873845634/job/116884055785). Not re-run locally: the full Playwright page pass (only two SVG text nodes changed; layout untouched).",
      "pr_body_should_add": [
        "Head is db59562: 13a6486 plus a merge of origin/main 45d5ce9 (838e901) plus the cover fix (db59562).",
        "Dependency 1 is resolved: PR #259 landed on main as 45d5ce9 and is merged into this branch, so /en/glossary/ontology-projection/ and /zh-Hans/glossary/ontology-projection/ resolve on the branch; the \"without #259 term files\" red reading is historical and the \"with term files copied in untracked\" note no longer applies.",
        "Gates section: replace the 13a6486 readings with the db59562 ones listed in this addendum (content:lint 0; check 0, 160 files; build 0, 915 pages, --dist links 98822; seo:smoke 0; svg:lint 0).",
        "What this adds: the cover headlines are \"One field, / seven surfaces.\" and 「改一个字段,/ 七个面自己跟上。」, matching the 7 derived / 4 pinned measurement (writing rule 7); the earlier \"every surface\" wording is gone.",
        "Dependency 2 (gen-zh-hant has no marketing-page branch) is now the seat's own card; this PR keeps the zh-Hans /ontology/ mention as inline code until it lands."
      ],
      "deviations": [
        "PR body not PATCHed, per instruction; the list above is what it should add.",
        "The merge commit and the cover commit carry the model-free trailer pair (Co-Authored-By: Claude; Claude-Session URL).",
        "Worktree /home/user/www.objectos.ai-issue-262 removed again after the push (node_modules first, no --force)."
      ],
      "mcp_calls": "0",
      "api_writes": "this round 1 — POST /repos/objectstack-ai/objectstack/dispatches (stroke www-262-addendum), executed by the relay as objectstack-fleet[bot]: POST /repos/objectstack-ai/www.objectos.ai/issues/262/comments; git push x1 (13a6486..db59562) is git, not REST. Cumulative for the card: 6 REST writes, 3 git pushes.",
      "open_questions": [],
      "out_of_scope_findings": [
        "none new this round; the gen-zh-hant marketing-page gap is being filed by the seat"
      ]
    }

    Generated by Claude Code

  4. objectstack-fleet commented on Oct 16, 2026

    @objectstack-fleet
    ContributorAuthor

    os-dev-report-addendum

    {
      "issue": 262,
      "status": "done",
      "round": "patch 2 — zh-Hans /ontology/ link restored",
      "branch": "claude/sharp-mendel-1087cg-issue-262",
      "pr": "https://github.com/objectstack-ai/www.objectos.ai/pull/263",
      "head": "0b2ee78 — db59562 (covers) → 6a8b1a8 (merge of origin/main 3c5b6c6, which carries #265 / PR #266) → 0b2ee78 (zh link)",
      "session": "session_017GeNDQH7E5S2rX8ajVAPxv",
      "premise_still_valid": true,
      "summary": "The zh-Hans post links the ontology page again: 「[本体页](/zh-Hans/ontology/)用一句话说明规则」 replaces the inline-code detour, matching the en post's link to /en/ontology/. origin/main 3c5b6c6 (#265: gen-zh-hant rewrites a single-segment /zh-Hans/SLUG/ to /zh-Hant/SLUG/ for marketing pages and clusters) was merged with a merge commit (6a8b1a8), no rebase, no force-push. pnpm gen:zh-hant regenerated index.zh-Hant.mdx with /zh-Hant/ontology/ and printed only its summary line (✓ zh-Hant: generated 48, kept 0 hand-maintained, 8 with body links pointed at /zh-Hant/) — no \"left … as-is\" line. All five gates green at 0b2ee78; in the built dist each locale's post carries its own-locale ontology href (zh-Hans 3x /zh-Hans/ontology/, zh-Hant 3x /zh-Hant/ontology/, en 3x /en/ontology/ — body link plus chrome) and astro preview answers 200 for the three posts and the three ontology pages. Pushed db59562..0b2ee78; the preview server was stopped by PID (no listener on 4399 afterwards).",
      "files_changed": [
        "content/blog/views-dashboards-apps-are-projections-of-the-ontology/index.zh-Hans.mdx (1 line: inline code → link)",
        "content/blog/views-dashboards-apps-are-projections-of-the-ontology/index.zh-Hant.mdx (regenerated; 1 line)"
      ],
      "tests": "gen:zh-hant exit 0; generated zh-Hant body links: /zh-Hant/blog/what-does-the-ontology-is-the-software-mean/, /zh-Hant/ontology/, /zh-Hant/glossary/ontology-projection/, plus the two English-only companions (/en/blog/how-to-review-ai-generated-app-changes/, /en/blog/how-to-point-your-agent-at-objectstack/) left cross-locale on purpose (no same-locale target). Built HTML grep: zh-Hans post 3 href=\"/zh-Hans/ontology/\", zh-Hant post 3 href=\"/zh-Hant/ontology/\", en post 3 href=\"/en/ontology/\". astro preview (port 4399, PID-managed): GET zh-Hans post 200, /zh-Hans/ontology/ 200; zh-Hant post 200, /zh-Hant/ontology/ 200; en post 200, /en/ontology/ 200.",
      "gates": "All at HEAD 0b2ee78 (git rev-parse --short HEAD), exit codes captured before any pipe: pnpm content:lint exit 0 — ✓ content lint passed (350 files, 46 glossary terms checked); pnpm check exit 0 under os-verify-lock slot www-262 — VERDICT command-exit 0 · held the lock 13s · waited 0s — Result (160 files): 0 errors, 0 warnings, 0 hints; pnpm build exit 0 under the lock — VERDICT command-exit 0 · held the lock 95s · waited 0s — ✓ zh-Hant: generated 48, kept 0 hand-maintained · ✓ content lint passed (350 files) · svg-text-fit: OK · 915 page(s) built in 69.54s · ✓ share images: 91 rendered · ✓ content lint --dist links passed (98824 internal links in 915 built pages resolve to built files); pnpm seo:smoke exit 0 — SEO smoke test passed (905 HTML pages checked; 589 sitemap URLs against 316 noindexed pages; 5619 canonical/hreflang annotations; 17151 prose blocks language-checked; 98814 internal links redirect-checked); svg:lint ran inside the build (no SVG changed this round). Tree clean after the build. CI on PR #263 head 0b2ee78 at report time: Build and deploy — in_progress (https://github.com/objectstack-ai/www.objectos.ai/actions/runs/38875750143/job/116890277517).",
      "pr_body_should_add": [
        "Head is 0b2ee78: db59562 plus a merge of origin/main 3c5b6c6 (6a8b1a8) plus the zh-Hans link restore (0b2ee78).",
        "Dependency 2 is resolved: #265 landed as 3c5b6c6 (PR #266); the zh-Hans post now links /zh-Hans/ontology/ and the generated zh-Hant file carries /zh-Hant/ontology/ — all three definition places are hyperlinked in every authored locale, as the card asks. The Acceptance note \"the zh-Hans ontology-page link is a prose mention until the generator gap is fixed\" no longer applies.",
        "Gates section: replace the earlier readings with the 0b2ee78 ones in this addendum (content:lint 0; check 0, 160 files; build 0, 915 pages, --dist links 98824; seo:smoke 0).",
        "Browser check: the preview readings for the ontology links (zh-Hans, zh-Hant, en posts and pages all 200) from this round."
      ],
      "deviations": [
        "PR body not PATCHed, per instruction; the list above is what it should add.",
        "The merge commit and the link commit carry the model-free trailer pair (Co-Authored-By: Claude; Claude-Session URL).",
        "Full Playwright page pass not re-run (one body link changed; the dist grep and preview GETs cover the change).",
        "Worktree /home/user/www.objectos.ai-issue-262 removed again after the push (node_modules first, no --force); no server of mine is running."
      ],
      "mcp_calls": "0",
      "api_writes": "this round 1 — POST /repos/objectstack-ai/objectstack/dispatches (stroke www-262-addendum-2), executed by the relay as objectstack-fleet[bot]: POST /repos/objectstack-ai/www.objectos.ai/issues/262/comments; git push x1 (db59562..0b2ee78) is git, not REST. Cumulative for the card: 7 REST writes, 4 git pushes.",
      "open_questions": [],
      "out_of_scope_findings": [
        "none new this round"
      ]
    }

    Generated by Claude Code

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions