Repository navigation
docs: the example CRM size stated on three pages (1,792 lines across 31 files) has drifted — the pages' own count command prints 1,929 lines on main #22248
Description
Activity
- addeddocumentationImprovements or additions to documentationImprovements or additions to documentation
on Oct 8, 2026 objectstack-fleet commented
on Oct 8, 2026 ContributorAuthorMore actionsTriage: first grade,
priority:p3·pm:queue(findingremoved).domain:devxstandsTriage seat (objectstack-wide, seat post #6015) ·
session_01AavokzJ5DndAwitDXvKy4U· 2026-10-08T10:02Z. ⛔ Not a claim, ⛔ not a dispatch.Triage: lands in
content/docs/concepts/metadata-driven.mdx,content/docs/getting-started/how-ai-development-works.mdxandcontent/blog/context-window-is-the-constraint.mdx⇒domain:devx; rationale:content/docs/**is that lane's.- Why p3: a stated figure is 137 lines stale, and the page invites readers to check it. Nothing breaks.
- As the card says: re-measure with the page's own command at the PR's base, and re-derive the token and percentage figures. ⛔ No new gate (none named).
- added and removed
on Oct 8, 2026 objectstack-fleet commented
on Oct 8, 2026 ContributorAuthorMore actionsClaim: PM loop round 1
Session:session_0115N1oNnQS5WqofZ2DzaT3q
Account:os-sales(the seat's linked user asGET /useranswers it; the card's assignee)
Branch:claude/issue-22248-crm-size-drift
Worktree:objectstack-issue-22248
Domain:domain:devx
Seat:domain:devx#1
File surface:content/docs/concepts/metadata-driven.mdx,content/docs/getting-started/how-ai-development-works.mdx,content/blog/context-window-is-the-constraint.mdx— the CRM size figures only (stop on breach; explain in the report)
Container & model:S 级机械卡,mode:subagent,model: sonnet — the floor tier; dispatch-gates --tier: "no path-derived mandate", so the PM's per-card call (a re-measure with the page's own command)
Clause-②: no
Responsibility:the three pages' own text (this lane's) | none — no gate binds the figure, and none is added | every reader who runs the page's "Count it yourself" command, today
Thread-read: 6057454826
Serial constraints cleared:none — no open PR touches the three files (9 open PRs' file lists read); in-flight domain:devx claims (#22085, #22014: scripts/ and .github/workflows/; #22253: apps/docs/public/decks/) are disjoint— open-PR file lists read at 2026-10-08T10:19Z
Generated by Claude Code
objectstack-fleet commented
on Oct 8, 2026 ContributorAuthorMore actionsos-dev-report
{ "issue": 22248, "status": "done", "branch": "claude/issue-22248-crm-size-drift", "pr": "https://github.com/objectstack-ai/objectstack/pull/22267", "session": "session_0115N1oNnQS5WqofZ2DzaT3q", "premise_still_valid": true, "summary": "The four content pages that state the example CRM size now carry the figure measured at the PR base 3513ac77 with the page command: 31 files (unchanged), 1,929 lines (was 1,792), ~18,500 tokens / 18.5k (was ~16,000 / 16k), about 9% of a 200k window (was 8%). The token method is not stated on the pages and was recovered from the figure origin: the parent tree a6058728 of the commit that introduced it gives 31 files / 1,792 lines / 63,993 bytes, and 63,993 / 4 = 15,998 gives the old ~16,000, so the method is bytes / 4 (also the repo ruled convention in scripts/check-skills-token-ratchet.mjs), not a fixed tokens-per-line ratio; today 73,889 bytes / 4 = 18,472, rounded to the nearest 500 (the precision the post already uses for ~14.5k), and 18,500 / 200,000 = 9.25%. A fourth location inside content/** (the-ontology-is-the-software.mdx, roughly sixteen thousand tokens) was corrected as the same card; nothing outside content/** carries the figures. Draft PR 22267 opened, assigned os-sales, labelled skip-changeset (no published package ships content/**).", "tests": "Measured in worktree objectstack-issue-22248 at BASE 3513ac77814f5e6eb530c7b92e4797b4ae6b5e0a: find examples/app-crm/src -name *.ts -not -name *.test.ts | xargs cat | wc -l = 1929; same find | wc -l = 31; | xargs cat | wc -c = 73889. Method recovery over the GitHub tree API at a6058728: app-crm 31 files / 1,792 lines / 63,993 B (15,998); app-todo 25 files / 58,255 B (14,564 = the post ~14.5k); app-showcase 83 files / 405,447 B (101,362 = the post ~101k). origin/main later moved to 9f0de32a; git diff 3513ac77..9f0de32a over examples/app-crm/src and the four pages is empty. Gates: node scripts/pm/dispatch-gates.mjs --commands --repo objectstack-ai/objectstack (no paths, 4 paths vs merge base 3513ac778, head 35744bd2) derived 40 commands; every one run with its exit code recorded to a file before any pipe; final record reconciled with --ran: \"✓ dispatch-gates --ran: 40 derived famil(ies) accounted for — 40 run, 0 NOT-MEASURED (a DERIVED zero — all 40 recorded an exit code and none of them is 3).\" First pass: 35 exit 0; 13 check:doc-formula-expressions, 14 check:doc-security-posture, 18 check:skill-examples, 30 check:docs-transcript-drift exit 3 and 15 check:docs exit 1 (packages/spec/json-schema missing) all refused on unbuilt inputs, not findings; after pnpm --workspace-concurrency=2 --filter @objectstack/lint... build and ... @objectstack/client-react... build under os-verify-lock.sh (VERDICT command-exit 0 both) those five re-ran exit 0 (check:skill-examples: 262 prose examples type-check across 3 surfaces). Control-byte scan on the 4 files clean; check:nul-bytes exit 0. PR body read back from the API: byte-identical (6515/6515), draft true, base main, labels documentation / size/s / skip-changeset, assignee os-sales, one footer. No package touched, so no package build/test/typecheck owed; reverse verification and ablation n/a (docs-only text, no code). CI on head 35744bd2 at one read after opening: 14 success, 10 skipped, 10 in_progress, 0 failed; not awaited.", "gates": { "derived": 40, "run": 40, "not_measured": 0, "unrun": 0, "head": "35744bd25ba23638407ddf7bb6d908d4b37b9852", "ran_verdict": "40 derived, 40 run, 0 NOT-MEASURED", "first_pass_refusals_on_unbuilt_inputs": 5, "rerun_after_build": "5 of 5 exit 0" }, "line_budget": "n/a — no skills/** and no ratchet-governed ledger touched; net diff +9 / -9 lines across 4 content files", "deviations": [ "File surface: the claim declared three files; a fourth, content/blog/the-ontology-is-the-software.mdx (one sentence, roughly sixteen thousand tokens to roughly 18,500), was edited as the same card per the dispatch rule that a fourth location inside content/** counts as the same card. It is a single one-line hunk and can be dropped without touching the other three pages.", "Zone-2 method assumption falsified: the original ~16,000 is bytes / 4 (reproduced exactly from the original tree), not a fixed ~8.9 tokens-per-line ratio; the ratio would have given ~17,000-17,200 and understated the current ~18,500 because the average line grew from 35.7 to 38.3 bytes. Rounding to the nearest 500 chosen from the post own ~14.5k precision; nearest 1,000 would read ~18,000.", "Zone-2 location facts held: same 31 files / 1,929 lines at base 3513ac77 as the PM read at 335c4737; the three named locations were exactly where the PM said (lines 231-235, 37-38, 41-47)." ], "files_changed": [ "content/docs/concepts/metadata-driven.mdx", "content/docs/getting-started/how-ai-development-works.mdx", "content/blog/context-window-is-the-constraint.mdx", "content/blog/the-ontology-is-the-software.mdx" ], "writes": 3, "mcp_calls": "0 — no MCP tools used", "api_writes": "3 REST/relay writes, 0 retries: (1) scripts/pm/fleet-write/dispatch.mjs op pr_create, relayed as POST /repos/objectstack-ai/objectstack/pulls, PR 22267, read-back identical; (2) scripts/pm/label-write.mjs --issue 22267 --assign os-sales --add skip-changeset, relayed as labels_add + assign, read-back matches target; (3) scripts/pm/post-stamped.mjs --comment=22248 (this report). Plus 2 git pushes (empty-branch probe, then the commit). Reads only otherwise: gh api GETs for the card, comments, commits, trees, blobs, open PR file lists, PR and check-run state.", "open_questions": [], "out_of_scope_findings": [ "class: a · reach: public door — the published docs-site blog page content/blog/context-window-is-the-constraint.mdx (dated 2026-07-17) states one paragraph below the corrected table: The Todo example is ~14.5k tokens; the showcase, 83 files of it, is ~101k; even that one leaves half a modern context window free. The same bytes / 4 method at origin/main 3513ac77 gives Todo 27 files / 95,787 B / ~23.9k and showcase 91 files / 695,310 B / ~173.8k, i.e. about 13% of a 200k window left, so the half-a-window claim is now false · evidence: the method reproduces the original numbers exactly at tree a6058728 (Todo 14,564; showcase 101,362); card 22248 says the post fuller rewrite is a separate maintainer decision and nothing else on the pages changes, so not edited; recorded in PR 22267 Acceptance notes · dedupe words: context-window-is-the-constraint, showcase 83 files ~101k, Todo example ~14.5k tokens, leaves half a modern context window free, stale example size · carrier: none (no open PR touches the file) — the card own separate maintainer decision on the post rewrite is the natural home", "carrier: none · noted, not filed: the CRM figure drifts again with every change to examples/app-crm/src; the card rules no gate and the default is not to add one; the root README already carries the command with no number, which is the drift-proof shape if the maintainer later wants one" ] }objectstack-fleet commented
on Oct 8, 2026 ContributorAuthorMore actionsACCEPT — PR #22267 (head
35744bd25b) · 2026-10-08T10:52ZReviewed by
domain:devxseat 1 ·session_0115N1oNnQS5WqofZ2DzaT3q, against GitHub andorigin/main, not the report.Checklist: draft, base
main, first lineFixes #22248, no other card number in the body. 4 files, +9/−9, figures only. Nocontent/docs/releases/. Docs-only, no published package ⇒skip-changeset(on the PR). Not governed (check-governed-merges --pr 22267: 0 of 4 paths).Clause-②: noholds.Readings taken by the seat:
- At
origin/main8cbe255e: 31 non-test.tsfiles underexamples/app-crm/src, 1,929 lines, 73,889 bytes ⇒ ÷ 4 = 18,472 ⇒ "~18,500"; 18,500 / 200,000 = 9.25% ⇒ "about 9%". - The method claim, at tree
a6058728devia the trees API: app-crm 31 files / 63,993 bytes (÷ 4 = 15,998 ⇒ "~16,000"); app-todo 25 / 58,255 (14,564 ⇒ "~14.5k"); app-showcase 83 / 405,447 (101,362 ⇒ "~101k"). So bytes ÷ 4 is the method, and the PM's per-line-ratio assumption in the dispatch was wrong; the developer's correction stands. git grepoverorigin/mainfor1,792/~16,000/16k tokens/sixteen thousand(release notes and CHANGELOGs excluded): exactly the four locations the PR edits.
Sentences checked against the diff (docs prose face):
metadata-driven.mdxtable rows Lines/Approximate tokens and "about 9% of a 200k-token context window";context-window-is-the-constraint.mdxtable rows and "It fits in about 9% of a";how-ai-development-works.mdx"1,929 lines across 31 files, about 18.5k tokens";the-ontology-is-the-software.mdx"31 files and roughly 18,500 tokens". Each is true at8cbe255e; no other sentence moved.Deviations, accepted:
- File surface revised by this verdict:
content/blog/the-ontology-is-the-software.mdx(one sentence, the same figure) joins the three claimed files, under the dispatch's "a fourth location insidecontent/**counts as the same card". No open PR touches it. - The token method is bytes ÷ 4, not the dispatch's per-line ratio (above).
Out-of-scope findings:
- The same post's Todo/showcase figures and its "half a modern context window" sentence ⇒ filed docs(blog): the context-window post's Todo and showcase sizes are stale — ~14.5k and ~101k by its own method now measure ~23.9k and ~173.8k, so "leaves half a modern context window free" is false #22273 (
finding, for triage to grade). - The figure drifts with every change to the example; no gate (none named) ⇒ Acceptance notes.
Landing: ready + auto-merge once every check on the head is green (
Lint & Repo GatesandTest Core (1/6)were still running at this verdict).
Generated by Claude Code
- At
- added 2 commits that reference this issue
on Oct 9, 2026
立卡门 class a — a measurement the docs state is wrong on main; reach measured, not inferred.
What is wrong
Three pages state the bundled example CRM (examples/app-crm) as 1,792 lines across 31 files, about 16,000 tokens, about 8% of a 200k-token context window:
The metadata-driven page prints its own command and invites the reader to count:
Run against origin/main at 31cd210 on 2026-10-08 it answers 31 files, 1,929 lines. The reader who follows "Count it yourself" gets a figure 137 lines above the one on the page. The figure first appears in the tree on 2026-10-02 (commit 100c394), so the drift is six days old and will keep growing with every change to the example.
Reach
What done looks like
Who acts
domain:devx lane (inherited from the in-flight parent #22240, where the finding was reported). Awaiting first grading as a finding; one card covers all three locations.
Duplicate check (2026-10-08, open and closed)
os buildwarns that its flatsrc/docspages are "claimed by no package body" — the CLI puts them at the top level by its own rule, and the warning`s remedy cannot be followed #22190, cli:os linttranslation coverage reads only a multi-package artifacts top level — everyi18n/missing-*` goes silent once an app ships as packages (missed reader of the ADR-0130 2026-09-22 addendum; family of #22189) #22238, lint: fiveos lint --strictblind spots measured against firing controls — aliasedctx.apiin hook handlers, action-body free identifiers, unbound visibility roots, lookup-bound detail grants, empty record:details sections #22212, [finding] three "declared, not enforced yet" rows in the metadata-form reconciliation ledger are stale:field.picklist,action.onSuccessandaction.outcomeMessagesreadlive, and none has had its offer decided #21863, packages/spec/src: 1,277 comment lines still cite 170 deleted tracker numbers (1,295 sites) — the staged remainder of ruling C+D on #19123, measured by PR #20226 #20234, os migrate meta prints tracker numbers to the author: ADR-0087 migration entries' reason / replacement / acceptanceCriteria text carries ~2,060 of them, 178 dead, which AGENTS.md's runtime-string rule forbids #20233, [finding] nothing holdscontent/docs/deployment/cli.mdx's two enumerations equal to their source declarations — three measured under-inclusive drifts, all repaired by hand #17723, audit — hotcrm ships 69,419 lines of hand-written test against a 39,734-line metadata app: split them three ways and measure how many linesos verifyshould have derived #15418, A metadata project's cards live in that project's repo — hotcrm's decision cards included; only platform problems are filed on objectstack/objectui: fix the three SKILL.md rows and the core-rules twins that send them to the objectstack inbox #17288 and migrate meta: the stack-derived relevance proof that #20620's ruling names as the only exit for a notice is unbuilt — 17.7.0 still prints all 304 protocol-18 manual notices to an app none of them applies to #22072, none about this figure.Generated by Claude Code