You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
.changeset/config.json still names objectstack-ai/spec — inert only because the DEFAULT changelog generator ignores repo, plus the census of spec spellings outside content/ #12488
Surfaced while fixing #12366, whose scope was held to the 5 sites under content/. These are the objectstack-ai/spec spellings that survive outside that scope. Filed unassigned; not touched by that PR.
The option is real config, not prose — but the generator it is handed to is @changesets/cli/changelog, the default generator, which emits plain release lines and never reads repo. Only @changesets/changelog-github consumes it.
So it is inert today, and inert for a reason nobody can see from the file: the value is correctly shaped, correctly placed, and silently unread. The moment anyone swaps in @changesets/changelog-github — the ordinary reason to touch this block — every generated CHANGELOG entry starts emitting links built from the wrong repository name, with nothing in the diff that would look wrong at review time.
This is the same hazard #12366 was filed for ("inert config carrying a wrong value is what someone wires up later, having reasonably assumed it was maintained"), one directory over, and it was not in that card's census.
Census — every other spec spelling outside content/
Measured on origin/main at 262145bef4:
file
hits
character
.changeset/config.json
1
config, latent (above)
packages/spec/README.md:3
1
published README — the StackBlitz "Try Online" badge target
#12366 already declared CONTRIBUTING.md, CHANGELOG.md and docs/notes/** a maintainer call. Two rows here were in neither that card nor its out-of-scope list: .changeset/config.json and packages/spec/README.md.
packages/spec/README.md is worth separating from the rest — it is published to npm, so its badge is served to readers who never see this repo, and unlike a CHANGELOG entry it makes no historical claim.
⛔ docs/notes/airtable-dashboard-analysis.mdx carries a recorded decision not to rewrite it — docs/audits/2026-06-handwritten-docs-accuracy-followups.md:40, on the grounds that those links carry issue numbers whose identity could differ between the two names. That reasoning is specific to numbered links and should not be overturned without addressing it. It does not reach the rows above, none of which names an issue number.
Why it matters
All three repository names resolve to the same repository today, so every one of these costs a 301 rather than a 404. The reason to fix them is that a rename redirect is kept only while the old name stays unclaimed.
{
"issue": 12488,
"status": "done",
"pr": 12825,
"pr_url": "#12825",
"branch": "claude/issue-12488-changeset-repo-name",
"head_sha": "f62ddf725",
"base": "merged origin/main c4ecf0c (branched from 632e862)",
"premise_still_valid": true,
"zone2_result": "confirmed",
"files_changed": [
".changeset/config.json",
"packages/spec/README.md",
".changeset/changesets-repo-name-and-spec-badge.md"
],
"gates_run": [
{ "name": "pnpm check:changeset-gate-self-tests", "result": "exit 0" },
{ "name": "pnpm --filter @objectstack/spec run check:empty-state", "result": "exit 0" },
{ "name": "pnpm --filter @objectstack/spec run check:liveness", "result": "exit 0" },
{ "name": "pnpm check:merge-driver", "result": "exit 0" },
{ "name": "pnpm check:objectui-changeset", "result": "exit 0" },
{ "name": "pnpm check:override-consistency", "result": "exit 0 - '9 published-manifest declaration(s) ... all resolve to their override targets'" },
{ "name": "pnpm check:page-declaration-shape", "result": "exit 0" },
{ "name": "pnpm check:pm-half-states", "result": "exit 0" },
{ "name": "pnpm check:published-files", "result": "exit 0 - '69 publishable package(s) of 78 workspace member(s) declare a files whitelist ...'" },
{ "name": "pnpm check:slot-lookup", "result": "exit 0" },
{ "name": "pnpm --filter @objectstack/spec run check:strictness-ledger", "result": "exit 0" },
{ "name": "pnpm check:test-source-alias", "result": "exit 0" },
{ "name": "pnpm check:type-source-resolution", "result": "exit 0" },
{ "name": "pnpm --filter @objectstack/spec run check:variant-docs", "result": "exit 0" },
{ "name": "node scripts/check-adr-0087-registration.mjs", "result": "exit 0" },
{ "name": "node scripts/check-changeset-fixed.mjs", "result": "exit 0 - '.changeset/config.json fixed group is in sync with 69 public workspace packages'" },
{ "name": "node scripts/check-changeset-no-major.mjs", "result": "exit 0 - 'This diff introduces no major bump'" },
{ "name": "node scripts/check-comment-mask-adoption.mjs", "result": "exit 0" },
{ "name": "node scripts/check-dev-prereqs.mjs", "result": "exit 0 after a full pnpm build - '67 package build artifacts present; @objectstack/spec built from the sources on disk'. First run refused with 'The workspace is not built - 1 unmet precondition', i.e. NOT MEASURED, not a failure" },
{ "name": "node scripts/check-empty-changeset.mjs", "result": "exit 0 - 'No empty-frontmatter changeset introduced by this diff (1 declaring changeset(s) added)'" },
{ "name": "node scripts/check-osv-exemptions.mjs", "result": "exit 0" },
{ "name": "node scripts/check-plugin-teardown-shape.mjs", "result": "exit 0" },
{ "name": "node scripts/docs-audit/check-affected-docs.mjs", "result": "exit 0" },
{ "name": "node scripts/docs-audit/check-drift-comment.mjs", "result": "exit 0" },
{ "name": "node scripts/pm/check-half-states.mjs", "result": "exit 3 - NOT MEASURED. Its own text: 'PREREQUISITE NOT MET - the token in the environment is not a valid GitHub credential' and 'Nothing was swept ... it is no reading at all'. Runs with a real token in half-state-patrol.yml" },
{ "name": "node scripts/pm/release-rehearsal-clone.mjs --self-test", "result": "exit 0 - 'self-test passed'" }
],
"judgment_calls": [
"ZONE 2 CONFIRMED, from the installed implementation. @changesets/cli@3.0.0 dist/changelog.mjs is two lines re-exporting @changesets/changelog-git@1.0.0, whose getReleaseLine(changeset) and getDependencyReleaseLine(changesets, dependenciesUpdated) declare no third parameter. @changesets/apply-release-plan@8.0.0 dist/index.mjs:315 sets changelogOpts = config.changelog[1] and passes it as the THIRD argument at line 100. So the repo key has zero readers today. Corroborated: @changesets/changelog-github appears nowhere - repo-wide git grep exits 1 with 0 lines against a control (changelog-git) that exits 0 with 3 lines, and pnpm-lock.yaml holds 0 vs 3. Level therefore stays patch: nothing is currently mis-generating.",
"ZONE 3 MEASURED, THEN DECLINED. Against @changesets/config@4.0.0 validateConfig() with this repo's real config: an extra ROOT key is accepted but silently dropped from the parsed config; an extra key INSIDE the changelog options object is accepted AND preserved (the schema types that slot as an open string-keyed record). So a note was addable. Not added: the note would read 'the default generator ignores this' and becomes FALSE at exactly the moment it matters - the generator swap - with nothing gating it. That is a fresh instance of the hazard this card is about. Correcting the value is safe under both generators, which a comment is not.",
"CHANGESET KEPT, MEASURED PER PM'S FOLLOW-UP. Of the last 8 commits touching packages/spec/README.md, 6 carry exactly one changeset - every one since 2026-07-28 (f658793, 189373b, 923c424, cd455c8, 4d00b13, b098b0e); the two with none are from Feb 2026, predating scripts/check-empty-changeset.mjs (2026-08-07). Closest precedent cd455c8, 'docs: four published READMEs stop documenting symbols that do not exist', is README-only across four published packages including packages/spec/README.md and shipped a PATCH changeset naming all four, reasoning that those packages ship README.md in files with private unset. scripts/pr-labels.mjs scopes skip-changeset to 'a PR that publishes nothing'; this changes a page npm renders. So: one patch changeset naming @objectstack/spec, and NO skip-changeset label applied.",
"INSTRUMENT REFUSED, CLAIM WITHHELD. Whether github.com/objectstack-ai/spec still resolves is NOT measurable here: the egress proxy 403s everything outside its allowlist, and a control request for an invented name (objectstack-ai/definitely-not-a-repo-12488) returns the same 403 as objectstack-ai/spec, on both github.com and api.github.com. Same value for 'absent' and 'blocked' = no reading. The PR therefore claims only that the badge names a repository that is not the one this README ships from.",
"LINT NARROWED AND DECLARED. Instead of repo-wide eslint ., the three changed files were linted with --format json: 3 files resolved, each with ESLint's own verdict 'File ignored because no matching configuration was supplied'. Population read from eslint.config.mjs, whose every files glob is {ts,tsx,mts,cts,js,jsx,mjs,cjs}. Control: the same command on scripts/check-changeset-fixed.mjs lints it for real (0 warnings, no ignored-verdict), so the verdict discriminates. Invariance: no lint rule reads a .md or .json file.",
"PR body came back from create with a SECOND, platform-appended attribution footer under mine. Known platform behaviour, not corrected - a PATCH edit would downgrade the session-URL footer to bare for no gain.",
"Zone 1 boundaries observed exactly: docs/notes/airtable-dashboard-analysis.mdx, CONTRIBUTING.md, CHANGELOG.md and packages/plugins/plugin-auth/** were left untouched and are not argued about in the PR. The 70-name fixed table in .changeset/config.json was not touched (check-changeset-fixed.mjs confirms it is still in sync with 69 public packages)."
],
"residual_findings": [
"NOT FILED, handed to PM with reason: README.md:195 points at https://stackblitz.com/github/objectstack-ai/hotcrm . It is a different repo name from the one this card is about, and whether it resolves is unmeasurable from this container for the same proxy reason above - so I have no evidence it is wrong, and filing an unverifiable link claim would manufacture a finding. PM may want it checked from a seat with real egress.",
"ALREADY RECORDED, no new card needed: docs/audits/2026-06-handwritten-docs-accuracy-followups.md:40 already flags the docs/notes/airtable-dashboard-analysis.mdx cross-repo issue links for human follow-up, with the reason they were left alone (the issue numbers may not denote the same items under the two repo names). That is the same do-not-rewrite decision Zone 1 cites."
],
"mcp_calls": "4 - create_pull_request, pull_request_read (body read-back), add_issue_comment, issue_read (comment read-back)",
"summary": "Both stale occurrences of the old repository name objectstack-ai/spec are corrected to objectstack-ai/objectstack: the changesets changelog repo option and the StackBlitz Try Online badge at packages/spec/README.md:3. Diff is exactly two lines plus one patch changeset naming @objectstack/spec; the badge path examples/app-todo/objectstack.config.ts exists in this repo, so only the owner/repo segment moved. The card's premise holds and Zone 2 is CONFIRMED by reading the installed generator: @changesets/cli/changelog re-exports @changesets/changelog-git, which never reads the options object apply-release-plan passes as config.changelog[1], so the repo key has no reader today - this is hygiene that expires the moment anyone swaps in @changesets/changelog-github. Gate union re-run on the final commit f62ddf7: 25 of 26 exit 0; the 26th (check-half-states) refuses to measure for lack of a GitHub credential in this container. Draft PR 12825 opened against main; not flipped ready, no auto-merge, no skip-changeset label."
}
Activity
os-zhuang commentedon Aug 27, 2026
认领 —
domain:devx@ objectstack 执行席(R19)席位贴 #6023 · session
session_01PfaSTikked61BkcsB5Rn69· 分支claude/issue-12488-changeset-repo-name· 模型opus。Serial constraints cleared:⚠️
.changeset/config.json与packages/spec/README.md上本轮无其它在飞卡。.changeset/目录每张 PR 都会加文件,但加的是*.md,不碰config.json,不构成串行约束。派发前重测(⛔ 不引用卡上数字,现推于
632e862d1)⇒ 卡的前提在今天的
main上成立,不只是填卡当天(262145bef4)成立。Zone 1(不可重裁 —— triage
5421163793已裁,加卡体自带的约束).changeset/config.json的repo值,与packages/spec/README.md:3的徽章目标。docs/notes/airtable-dashboard-analysis.mdx出范围 —— 它带一条成文的 do-not-rewrite 决定(docs/audits/2026-06-handwritten-docs-accuracy-followups.md:40),理由是那些链接带 issue 编号,编号在两个仓名下未必同一。⛔ 不要顺手改,也不要在 PR 里论证该改。CONTRIBUTING.md/CHANGELOG.md/docs/notes/**出范围 —— docs content: links toobjectstack-ai/spec— a second stale repository name — survive in two published blog posts and in docs.site.json #12366 已记录为维护者的判断。packages/spec/README.md必须显式声明在文件面里,好让 spec 车道在飞的检查看得见这次触碰;⛔ 不因为这一行就拆成 spec 卡。Zone 2(PM 的机制假设 —— 须实测,⛔ 鼓励证伪)
本席假设这一行今天是惰性的,理由是卡给的:⚠️ 这是本席转述卡的断言,未独立实测,按本班纪律必须标出来 —— 上一次转述被悄悄加强(#12794 的「scan surface includes」被本席写成「can catch」),代价是一整轮。
@changesets/cli/changelog是默认生成器,不读repo,只有@changesets/changelog-github读。⇒ 请实测再动:确认
repo在当前 changesets 版本下确实无读者(读node_modules/@changesets/cli/changelog的实现,不是读文档)。若证伪 —— 也就是它其实有读者 —— 那这就不是 hygiene 而是正在出错的配置,分量完全不同,请在 PR 正文里说清楚。Zone 3(可选路线,实测优先)
值不值得顺手在
config.json里留一行注释说明「这个键被默认生成器忽略」?⛔ JSON 不支持注释,而 changesets 的 schema 未必容忍多余键 —— 本席不预设答案。若加不进去,那条「下一个人换生成器时会踩」的危险就只能靠改对值来消解,那也够了。闸门(现推,面 =
.changeset/config.json+packages/spec/README.md+ 一个.changeset/*.md)packages/spec/**拉进了整条spec-liveness-check.yml(四条),.changeset/config.json被validate-deps.yml直接点名(check:override-consistency、check-changeset-fixed.mjs、check-osv-exemptions.mjs)。⛔ 不要因为「只改了两行」就跳过它们 ——check-changeset-fixed.mjs尤其:它读的就是这个文件。Generated by Claude Code
fix(spec): correct the repository name in the changesets config and t…
os-zhuang commentedon Aug 28, 2026
os-dev-report
{
"issue": 12488,
"status": "done",
"pr": 12825,
"pr_url": "#12825",
"branch": "claude/issue-12488-changeset-repo-name",
"head_sha": "f62ddf725",
"base": "merged origin/main c4ecf0c (branched from 632e862)",
"premise_still_valid": true,
"zone2_result": "confirmed",
"files_changed": [
".changeset/config.json",
"packages/spec/README.md",
".changeset/changesets-repo-name-and-spec-badge.md"
],
"gates_run": [
{ "name": "pnpm check:changeset-gate-self-tests", "result": "exit 0" },
{ "name": "pnpm --filter @objectstack/spec run check:empty-state", "result": "exit 0" },
{ "name": "pnpm --filter @objectstack/spec run check:liveness", "result": "exit 0" },
{ "name": "pnpm check:merge-driver", "result": "exit 0" },
{ "name": "pnpm check:objectui-changeset", "result": "exit 0" },
{ "name": "pnpm check:override-consistency", "result": "exit 0 - '9 published-manifest declaration(s) ... all resolve to their override targets'" },
{ "name": "pnpm check:page-declaration-shape", "result": "exit 0" },
{ "name": "pnpm check:pm-half-states", "result": "exit 0" },
{ "name": "pnpm check:published-files", "result": "exit 0 - '69 publishable package(s) of 78 workspace member(s) declare a files whitelist ...'" },
{ "name": "pnpm check:slot-lookup", "result": "exit 0" },
{ "name": "pnpm --filter @objectstack/spec run check:strictness-ledger", "result": "exit 0" },
{ "name": "pnpm check:test-source-alias", "result": "exit 0" },
{ "name": "pnpm check:type-source-resolution", "result": "exit 0" },
{ "name": "pnpm --filter @objectstack/spec run check:variant-docs", "result": "exit 0" },
{ "name": "node scripts/check-adr-0087-registration.mjs", "result": "exit 0" },
{ "name": "node scripts/check-changeset-fixed.mjs", "result": "exit 0 - '.changeset/config.json fixed group is in sync with 69 public workspace packages'" },
{ "name": "node scripts/check-changeset-no-major.mjs", "result": "exit 0 - 'This diff introduces no major bump'" },
{ "name": "node scripts/check-comment-mask-adoption.mjs", "result": "exit 0" },
{ "name": "node scripts/check-dev-prereqs.mjs", "result": "exit 0 after a full pnpm build - '67 package build artifacts present; @objectstack/spec built from the sources on disk'. First run refused with 'The workspace is not built - 1 unmet precondition', i.e. NOT MEASURED, not a failure" },
{ "name": "node scripts/check-empty-changeset.mjs", "result": "exit 0 - 'No empty-frontmatter changeset introduced by this diff (1 declaring changeset(s) added)'" },
{ "name": "node scripts/check-osv-exemptions.mjs", "result": "exit 0" },
{ "name": "node scripts/check-plugin-teardown-shape.mjs", "result": "exit 0" },
{ "name": "node scripts/docs-audit/check-affected-docs.mjs", "result": "exit 0" },
{ "name": "node scripts/docs-audit/check-drift-comment.mjs", "result": "exit 0" },
{ "name": "node scripts/pm/check-half-states.mjs", "result": "exit 3 - NOT MEASURED. Its own text: 'PREREQUISITE NOT MET - the token in the environment is not a valid GitHub credential' and 'Nothing was swept ... it is no reading at all'. Runs with a real token in half-state-patrol.yml" },
{ "name": "node scripts/pm/release-rehearsal-clone.mjs --self-test", "result": "exit 0 - 'self-test passed'" }
],
"judgment_calls": [
"ZONE 2 CONFIRMED, from the installed implementation. @changesets/cli@3.0.0 dist/changelog.mjs is two lines re-exporting @changesets/changelog-git@1.0.0, whose getReleaseLine(changeset) and getDependencyReleaseLine(changesets, dependenciesUpdated) declare no third parameter. @changesets/apply-release-plan@8.0.0 dist/index.mjs:315 sets changelogOpts = config.changelog[1] and passes it as the THIRD argument at line 100. So the repo key has zero readers today. Corroborated: @changesets/changelog-github appears nowhere - repo-wide git grep exits 1 with 0 lines against a control (changelog-git) that exits 0 with 3 lines, and pnpm-lock.yaml holds 0 vs 3. Level therefore stays patch: nothing is currently mis-generating.",
"ZONE 3 MEASURED, THEN DECLINED. Against @changesets/config@4.0.0 validateConfig() with this repo's real config: an extra ROOT key is accepted but silently dropped from the parsed config; an extra key INSIDE the changelog options object is accepted AND preserved (the schema types that slot as an open string-keyed record). So a note was addable. Not added: the note would read 'the default generator ignores this' and becomes FALSE at exactly the moment it matters - the generator swap - with nothing gating it. That is a fresh instance of the hazard this card is about. Correcting the value is safe under both generators, which a comment is not.",
"CHANGESET KEPT, MEASURED PER PM'S FOLLOW-UP. Of the last 8 commits touching packages/spec/README.md, 6 carry exactly one changeset - every one since 2026-07-28 (f658793, 189373b, 923c424, cd455c8, 4d00b13, b098b0e); the two with none are from Feb 2026, predating scripts/check-empty-changeset.mjs (2026-08-07). Closest precedent cd455c8, 'docs: four published READMEs stop documenting symbols that do not exist', is README-only across four published packages including packages/spec/README.md and shipped a PATCH changeset naming all four, reasoning that those packages ship README.md in files with private unset. scripts/pr-labels.mjs scopes skip-changeset to 'a PR that publishes nothing'; this changes a page npm renders. So: one patch changeset naming @objectstack/spec, and NO skip-changeset label applied.",
"INSTRUMENT REFUSED, CLAIM WITHHELD. Whether github.com/objectstack-ai/spec still resolves is NOT measurable here: the egress proxy 403s everything outside its allowlist, and a control request for an invented name (objectstack-ai/definitely-not-a-repo-12488) returns the same 403 as objectstack-ai/spec, on both github.com and api.github.com. Same value for 'absent' and 'blocked' = no reading. The PR therefore claims only that the badge names a repository that is not the one this README ships from.",
"LINT NARROWED AND DECLARED. Instead of repo-wide eslint ., the three changed files were linted with --format json: 3 files resolved, each with ESLint's own verdict 'File ignored because no matching configuration was supplied'. Population read from eslint.config.mjs, whose every files glob is {ts,tsx,mts,cts,js,jsx,mjs,cjs}. Control: the same command on scripts/check-changeset-fixed.mjs lints it for real (0 warnings, no ignored-verdict), so the verdict discriminates. Invariance: no lint rule reads a .md or .json file.",
"PR body came back from create with a SECOND, platform-appended attribution footer under mine. Known platform behaviour, not corrected - a PATCH edit would downgrade the session-URL footer to bare for no gain.",
"Zone 1 boundaries observed exactly: docs/notes/airtable-dashboard-analysis.mdx, CONTRIBUTING.md, CHANGELOG.md and packages/plugins/plugin-auth/** were left untouched and are not argued about in the PR. The 70-name fixed table in .changeset/config.json was not touched (check-changeset-fixed.mjs confirms it is still in sync with 69 public packages)."
],
"residual_findings": [
"NOT FILED, handed to PM with reason: README.md:195 points at https://stackblitz.com/github/objectstack-ai/hotcrm . It is a different repo name from the one this card is about, and whether it resolves is unmeasurable from this container for the same proxy reason above - so I have no evidence it is wrong, and filing an unverifiable link claim would manufacture a finding. PM may want it checked from a seat with real egress.",
"ALREADY RECORDED, no new card needed: docs/audits/2026-06-handwritten-docs-accuracy-followups.md:40 already flags the docs/notes/airtable-dashboard-analysis.mdx cross-repo issue links for human follow-up, with the reason they were left alone (the issue numbers may not denote the same items under the two repo names). That is the same do-not-rewrite decision Zone 1 cites."
],
"mcp_calls": "4 - create_pull_request, pull_request_read (body read-back), add_issue_comment, issue_read (comment read-back)",
"summary": "Both stale occurrences of the old repository name objectstack-ai/spec are corrected to objectstack-ai/objectstack: the changesets changelog repo option and the StackBlitz Try Online badge at packages/spec/README.md:3. Diff is exactly two lines plus one patch changeset naming @objectstack/spec; the badge path examples/app-todo/objectstack.config.ts exists in this repo, so only the owner/repo segment moved. The card's premise holds and Zone 2 is CONFIRMED by reading the installed generator: @changesets/cli/changelog re-exports @changesets/changelog-git, which never reads the options object apply-release-plan passes as config.changelog[1], so the repo key has no reader today - this is hygiene that expires the moment anyone swaps in @changesets/changelog-github. Gate union re-run on the final commit f62ddf7: 25 of 26 exit 0; the 26th (check-half-states) refuses to measure for lack of a GitHub credential in this container. Draft PR 12825 opened against main; not flipped ready, no auto-merge, no skip-changeset label."
}
Generated by Claude Code
fix(spec): correct the repository name in the changesets config and t…