Repository navigation
docs(analytics): retire the dataset inventory, keep the argument - #1683
Merged
Merged
Conversation
`content/docs/analytics/cubes` carried a nine-row table transcribing every dataset's dimensions and measures, and `analytics/reports` repeated the same roster in prose. Neither had a producer: `src/datasets/` declares those names, nothing compares the pages against them, and the neighbourhood has paid for that four times over. Remove the inventory from all three locales and rewrite the pages around it as a business-concept introduction: what the semantic layer is, which business questions it answers today, where it stops, and why the exact dimension and measure names are read from `src/datasets/` rather than copied here. The analysis stays. `analytics/reports` used its `case_metrics` inventory as an argument for why five unshipped reports cannot be built, so each of those arguments now rests on the one specific fact that carries it — no owner dimension, no join to `crm_account`, no measure over `customer_rating`, nothing recording a reopen — instead of on the completeness of a transcribed list. The shipped report and dashboard rosters are untouched: a user sees those in the product, which is the line between a documentable navigation fact and a hand-copied semantic layer. No guard and no test change. With the inventory gone there is no drift left to pin, and gate-type mechanisms belong to the platform, not to this repo. Co-authored-by: Claude <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_018xtjdpZFjgWh4Ad9Wcx68J
|
The latest updates on your projects. Learn more about Vercel for GitHub. |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Closes #1422
Description
The maintainer ruled a fourth path on this card, rejecting all three options it offered (pin / stop enumerating / codegen). Verbatim: 「content/docs 为什么要有 cubes 清单表,文档应该是介绍业务概念」 — the thing being pinned should not exist.
So: the cubes/dataset inventory leaves
content/docs, in all three locales; the pages around it become a business-concept introduction; thereports.mdxargument that leaned on the inventory is rewritten so it stands without it; and no guard is built.Type of Change
Related Issues
Ruling: decision batch #20 item 5, recorded on the card. Drift history that motivated it: #610, #965, #977, #1228 (all closed, all history rather than blockers). Boundary precedent kept on the other side of the line: #1329 / #1326.
Changes Made
1. The inventory is gone (ruling clause 1). The nine-row
Dataset | Reads | Dimensions | Measurestable is removed fromcontent/docs/analytics/cubes.mdxand both translations.analytics/reports.mdxrepeated the same roster in prose in three places; those go too.2. The pages are rewritten as business-concept introductions (clause 2).
cubes.mdxnow says what the semantic layer is, which business questions it answers today, and where it stops — stated as questions and limits, not as declared names. A new section, Where the semantic layer lives, points readers atsrc/datasets/as the single source of truth and says in one sentence why the table is not here, so the next person who wants to add it back has the reasoning rather than a blank space. The admin tip at the foot of the page was flipped to match: document the business question, not the inventory.3. The argument was rewritten before the list was removed (clause 3). This is the part the card warned about.
reports.mdxline 66 transcribedcase_metrics's six dimensions and eight measures and then used that roster to argue five unshipped reports cannot be built. Each of those five arguments already rested on one specific fact; they now say so directly and no longer depend on the completeness of a list. Same treatment in the sales, lead and contract sections.4. No guard, no test change (clause 4). With the inventory gone there is no drift left to pin.
test/**is untouched — no file in it was edited, and none needed to be.5. Scope held (clause 6). The view/report/dashboard rosters are not touched. A user can see those in the product; a machine semantic layer they cannot. That is the boundary AGENTS.md already codifies.
Enumeration verdicts, one by one
The failure mode on this card is deleting the wrong lists and turning an analysis into empty prose. The test used on each: does the enumeration promise completeness over a source-declared set (a transcription — it drifts the day the source grows), or does it name specific facts each doing argumentative work (a business argument — falsified only if that one fact changes)? A second check on top, taken from AGENTS.md rule 5: can a reader see this in the product UI?
cubesnine-row dataset tablecubes"Reachable today" vocabulary map (17 names)src/datasets/opportunity.dataset.tsfor the names.cubesservice section's six dimensions + eight measures + the eight-bullet measure listcase_metrics.cubes"Not reachable, and why" (sales)cubesservice limits (agent, account, product, CSAT, grain)reports.mdx.cubesmarketing "name by name" listcubesretired cube names (Sales, Pipeline, Service, Marketing)cubesCopilot tool namescubesdate-dimension list (trend charts)reportsshipped-report tables (4 + 1 + 3 + 2)reportsPipeline by Stage / Stale Opportunities / Top Performing RepsreportsForecast vs Actual (5 forecast measures)reportsWin/Loss Analysis (6 measures)reportsLead Source ROI (4 dimensions)reportscase_metrics6+8 roster (line 66)reportsfive case-report bulletscrm_account, no measure overcustomer_rating, nothing recording a reopen, Origin is a dimension. They now carry the argument alone.reportsSLA first-response paragraphreports"nine objects" contract listcrm_contract".reportsproduct_metricsparentheticalreports"Working with reports" controls tableOne consequential edit outside the two named pages
content/docs/analytics/index.mdx(and both translations) promised that the cubes page "lists the gaps one by one" and describes "what each dataset can and cannot answer". After this change those promises are overstated, so two phrases were adjusted. Nothing else on that page moved; every string its pin test asserts is intact.Testing
pnpm verifygreen end-to-end (EXIT=0): validate, typecheck, lint,lint:i18n-gate(0 i18n/missing-* issues), hygiene (source hygiene clean),hygiene:tokens(source token ratchet clean), build (Artifact: dist/objectstack.json), test.Test Files 161 passed (161)/Tests 3402 passed | 1 skipped (3403)— the whole suite, on the committed tree.docs-analytics-vocabulary,docs-dashboard-tiles,docs-conversion-rate-spelling. So isheading-labeland its helper. No assertion was touched, and none needed to be..changeset/analytics-docs-drop-the-dataset-inventory.md, patch).os lint --strictfirst, then retire the local re-implementations by family #1579 step 6.Two near-misses worth naming, both checked rather than assumed:
docs-conversion-rate-spellingrequires the conversion-rate metric to survive by name onanalytics/cubesandanalytics/reportsin both Chinese scripts — a negative-only sweep would have passed on deletion, and that pin is what stops it. The phrase is preserved in all four files.heading-labeland its helper only read theanalytics/dashboards*pages, so the two heading changes here (The nine datasetstoWhere the semantic layer lives, andService — case_metricstoService) cannot reach it. Recorded because the dispatch flagged that test as at risk; measured, it is not. No inbound anchor links to either heading exist anywhere undercontent/.Additional Notes
Locale parity: all three
cubesfaces are the same length and carry the same section structure; blockquote-callout counts are equal (0 in each), which is whatdocs-locale-calloutscompares.Generated by Claude Code