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
Publish accepts an activityMilestones[].field or displayNameField that names no field; both are served and do nothing #33101
Row: publish accepts activityMilestones[].field and displayNameField naming no field. Both are inert (the milestone never fires, and the record label falls back to the id). These are minor author errors with no data loss, p3.
Owner: packages/lintvalidate-object-field-refs.ts (the lint is anchored to the spec lane, per SKILL.md).
Claim: PM loop round 1 · 2026-11-14T16:34Z
Session: session_01FEkQ5mswnWm181XgYcCUag (seat); card thread session_01FEkQ5oaMukqihPa4PYwzvH is the dev
Account: os-project-manager
Branch: claude/project-thread-9r10fs (the card thread's designated branch; the platform lets a thread push only that branch, so not claude/issue-33101-*)
Worktree: objectstack-issue-33101
Domain: domain:spec
Seat: domain:spec#1
File surface: packages/lint/src/validate-object-field-refs.ts (or the owning rule if measured, e.g. validate-record-title.ts), their tests, rule-explanations.ts if the rule id set changes; packages/metadata-protocol/src/build-probes.ts only if the probe must call another rule; the activityMilestones[].field / displayNameField describe in packages/spec/src/data/object.zod.ts only to state the refusal; examples/** fixtures only if measured to name a missing field (reported first); root .changeset/ (stop on breach; explain in the report)
Container & model: M, mode:thread, model: default tier (narrowing built at the judgment tier; contract review at CONTRACT_REVIEW_TIER before enqueue, MANDATORY path: narrowing face), effort: high
Clause-②: no (narrowing)
Metadata-protocol: narrowed
Responsibility: the lint rule owner (packages/lint, objectstack) leaves these pointers unjudged by a code-comment deferral | the platform path that covers the family is validateObjectFieldRefs under the #19332 ruling ("a misspelling is refused loudly at authoring") | any author of an object at the publish door or os build; QA run #33096 reached it
Thread-read: 6852874653
Premise: holds at origin/main24f2f401: validate-object-field-refs.ts ~:172–195 lists displayNameField and activityMilestones[].field as NOT owned. Taken under the maintainer's standing order 「p1 p2 处理完了,就可以处理 p3」 (2026-10-26; Ruling-ref), no spec p1/p2 dispatchable. Order: /mnt/project-files/pm-orders/spec/order-33101.md (project share).
Serial constraints cleared: OPENPRS
The claim's last line went out with a placeholder. The reading it stands for:
Serial constraints cleared: no open PR touches validate-object-field-refs.ts, validate-record-title.ts or build-probes.ts. PR #33205 (seat 2, #33154) edits packages/lint/src/authoring-rules.ts and validate-expressions.ts; if this card must register a rule in authoring-rules.ts, it merges main once after #33205 lands.
Dropped as measured:validate-record-title.ts and build-probes.ts stay untouched (the title rule never reports a dangling pointer, so validateObjectFieldRefs is the one owner).
os-dev-report
{
"issue": 33101,
"status": "done",
"branch": "claude/project-thread-9r10fs",
"pr": "#33370",
"session": "session_01FEkQ5oaMukqihPa4PYwzvH",
"premise_still_valid": true,
"summary": "validateObjectFieldRefs (object-field-ref-unknown, error; os build/validate/lint and the runtime object door via runtimeTypes ['flow','object']) now judges nameField, displayNameField and activityMilestones[N].field verbatim against the authored field map plus the registry-injected columns; a name the title pair shares is reported once, at displayNameField. Mechanism hypothesis measured: validateRecordTitle never reaches the publish door (CLI_ONLY advisory) and never reports a dangling pointer even on the CLI (objectTitleCompleteness grades it 'synthesized', the rule reports only 'none'), and validateSemanticRoles skips an unresolved title pointer, so no rule owned the position: one owner, validate-record-title.ts and build-probes.ts untouched (the probe already runs this rule). Header owned/NOT-owned lists and os explain updated. ADR-0087: new semantic entry object-field-pointer-unknown-refused (the gate refuses no-migration-prescription on narrowed; surface amended in 6880909508); changesets lint minor (fix(lint)!, BREAKING) + spec patch.",
"tests": "HEAD 8e1531c. validate-object-field-refs.test.ts 103/103 (3 new describes: title pair, milestones, runtime door with the card's repro body; it.each over 7 injected columns per position; coverage controls + os explain facts widened). pnpm --filter @objectstack/lint test 208 files/8914 passed + typecheck exit 0; @objectstack/spec test 840 files/26832 passed (1 todo); spec src/migrations 198/198; @objectstack/metadata-protocol test 339 files passed (9 skipped)/22844 passed. Ablation via scripts/ablation-replace.mjs on committed head, each restore proven blob==HEAD and git diff HEAD empty: (1) title judge off -> 9 failed/94 passed; (2) milestone read -> [] -> 5 failed/98; (3) object-graph injected acceptance removed -> 25 failed/78 incl. all 14 new injected-column pins. Lint tests import src (no dist leg). Corpus sweep (scratch, not committed): 132 *.object.ts / 137 objects under packages/ + examples/ (92 title pointers, 1 milestone) through runRuntimeAuthoringRules type object + the probe's single-object call: 0 findings at the new positions; positive control on sys_cloud_binding_credential fires both paths. HotCRM ac4dd3d measured on source text (not installed): 20 title pointers, 5 milestones, each a declared field.",
"gates": "90 derived by dispatch-gates --commands on 8e1531c (base 24f2f40); all exit 0; --ran: 90 run, 0 NOT MEASURED, 0 unrun. Reruns named: check:dts-closure exit 1 first (dogfood closure build rewriting metadata-core/dist concurrently) -> exit 0 rerun; check:type-check-debt exit 3 first (lock budget behind dogfood) -> exit 0 under the lock (0 ledger entries above their number); check:dual-build-cjs-loads exit 3 first (PREREQUISITE NOT MET) -> exit 0 after the full build. check-changeset-no-major + check-empty-changeset replayed as a pull_request event with the PR body: exit 0; check-adr-0087-registration exit 0 (registered, new here). PR check-runs: in_progress at report time.",
"dogfood_battery": "8e1531c2 · VERDICT command-exit 0 (held 2017s) · Test Files 464 passed | 3 skipped · Tests 3927 passed | 42 skipped · no failures",
"mcp_calls": "0",
"api_writes": "2 — fleet-write pr_create (POST pulls via relay, #33370, body read back identical) and this os-dev-report comment (post-stamped.mjs, POST issues/33101/comments); plus 1 git push (not REST)",
"open_questions": [],
"security_findings": "none",
"out_of_scope_findings": [
"carrier: none · noted, not filed — tenancy.tenantField / tenancy.organizationField / lifecycle.ttl.field stay unjudged (the header's deferral, each needs its own injected-column measurement); not a defect class (a)-(c) by itself, recorded in the PR's Acceptance notes",
"carrier: none · noted — main moved 20 commits past base 24f2f40 during the run; none touches the diff's files, so no merge was taken"
]
}
Activity
objectstack-fleet commentedon Nov 13, 2026
triage#1 · hotlong · session_01Q4EjjMnyLqJdzuktEmRPXH
Path: none
Triage: first touch →
domain:spec· p3 ·pm:queue· 2026-11-13T12:26Z⛔ Not a claim.
activityMilestones[].fieldanddisplayNameFieldnaming no field. Both are inert (the milestone never fires, and the record label falls back to the id). These are minor author errors with no data loss, p3.packages/lintvalidate-object-field-refs.ts(the lint is anchored to the spec lane, per SKILL.md).objectstack-fleet commentedon Nov 14, 2026
domain:spec#1 · os-project-manager · session_01FEkQ5mswnWm181XgYcCUag
Claim: PM loop round 1 · 2026-11-14T16:34Z
Session:
session_01FEkQ5mswnWm181XgYcCUag(seat); card threadsession_01FEkQ5oaMukqihPa4PYwzvHis the devAccount:
os-project-managerBranch:
claude/project-thread-9r10fs(the card thread's designated branch; the platform lets a thread push only that branch, so notclaude/issue-33101-*)Worktree:
objectstack-issue-33101Domain:
domain:specSeat:
domain:spec#1File surface:
packages/lint/src/validate-object-field-refs.ts(or the owning rule if measured, e.g.validate-record-title.ts), their tests,rule-explanations.tsif the rule id set changes;packages/metadata-protocol/src/build-probes.tsonly if the probe must call another rule; theactivityMilestones[].field/displayNameFielddescribe inpackages/spec/src/data/object.zod.tsonly to state the refusal;examples/**fixtures only if measured to name a missing field (reported first); root.changeset/(stop on breach; explain in the report)Container & model:
M,mode:thread,model: default tier(narrowing built at the judgment tier; contract review at CONTRACT_REVIEW_TIER before enqueue, MANDATORY path: narrowing face),effort: highClause-②: no (narrowing)
Metadata-protocol: narrowed
Responsibility: the lint rule owner (
packages/lint, objectstack) leaves these pointers unjudged by a code-comment deferral | the platform path that covers the family isvalidateObjectFieldRefsunder the #19332 ruling ("a misspelling is refused loudly at authoring") | any author of an object at the publish door oros build; QA run #33096 reached itThread-read: 6852874653
Premise: holds at
origin/main24f2f401:validate-object-field-refs.ts~:172–195 listsdisplayNameFieldandactivityMilestones[].fieldas NOT owned. Taken under the maintainer's standing order 「p1 p2 处理完了,就可以处理 p3」 (2026-10-26; Ruling-ref), no spec p1/p2 dispatchable. Order:/mnt/project-files/pm-orders/spec/order-33101.md(project share).Serial constraints cleared: OPENPRS
objectstack-fleet commentedon Nov 14, 2026
domain:spec#1 · os-project-manager · session_01FEkQ5mswnWm181XgYcCUag
Claim correction (claim 6880767436) · 2026-11-14T16:37Z
The claim's last line went out with a placeholder. The reading it stands for:
Serial constraints cleared: no open PR touches
validate-object-field-refs.ts,validate-record-title.tsorbuild-probes.ts. PR #33205 (seat 2, #33154) editspackages/lint/src/authoring-rules.tsandvalidate-expressions.ts; if this card must register a rule inauthoring-rules.ts, it merges main once after #33205 lands.objectstack-fleet commentedon Nov 14, 2026
domain:spec#1 · os-project-manager · session_01FEkQ5mswnWm181XgYcCUag
File surface amended (claim 6880767436) · 2026-11-14T16:45Z
packages/spec/src/migrations/entries/semantic/18.object-field-pointer-unknown-refused.ts(the ADR-0087 semantic ledger entry aMetadata-protocol: narrowedchangeset owes, ascheck-adr-0087-registrationrefusesnot-required (no-migration-prescription)on it; same shape as cli: os validate / os build resolve a dataset reader through the reader's declared closure, as the runtime does (authoring half of #32929, 18.4.1) #32967 / lint: the object_extension publish door runs no field-formula judgment, so a computed field os build refuses still publishes through PUT /meta/object_extension #33072 / An object extension's validations are judged at neither the publish door nor os build, yet the registry registers them on the target object #33154), and@objectstack/specpatch in the changeset frontmatter. Requested by the card thread.validate-record-title.tsandbuild-probes.tsstay untouched (the title rule never reports a dangling pointer, sovalidateObjectFieldRefsis the one owner).objectstack-fleet commentedon Nov 14, 2026
domain:spec#1 · os-project-manager · session_01FEkQ5oaMukqihPa4PYwzvH
os-dev-report
{
"issue": 33101,
"status": "done",
"branch": "claude/project-thread-9r10fs",
"pr": "#33370",
"session": "session_01FEkQ5oaMukqihPa4PYwzvH",
"premise_still_valid": true,
"summary": "validateObjectFieldRefs (object-field-ref-unknown, error; os build/validate/lint and the runtime object door via runtimeTypes ['flow','object']) now judges nameField, displayNameField and activityMilestones[N].field verbatim against the authored field map plus the registry-injected columns; a name the title pair shares is reported once, at displayNameField. Mechanism hypothesis measured: validateRecordTitle never reaches the publish door (CLI_ONLY advisory) and never reports a dangling pointer even on the CLI (objectTitleCompleteness grades it 'synthesized', the rule reports only 'none'), and validateSemanticRoles skips an unresolved title pointer, so no rule owned the position: one owner, validate-record-title.ts and build-probes.ts untouched (the probe already runs this rule). Header owned/NOT-owned lists and os explain updated. ADR-0087: new semantic entry object-field-pointer-unknown-refused (the gate refuses no-migration-prescription on narrowed; surface amended in 6880909508); changesets lint minor (fix(lint)!, BREAKING) + spec patch.",
"tests": "HEAD 8e1531c. validate-object-field-refs.test.ts 103/103 (3 new describes: title pair, milestones, runtime door with the card's repro body; it.each over 7 injected columns per position; coverage controls + os explain facts widened). pnpm --filter @objectstack/lint test 208 files/8914 passed + typecheck exit 0; @objectstack/spec test 840 files/26832 passed (1 todo); spec src/migrations 198/198; @objectstack/metadata-protocol test 339 files passed (9 skipped)/22844 passed. Ablation via scripts/ablation-replace.mjs on committed head, each restore proven blob==HEAD and git diff HEAD empty: (1) title judge off -> 9 failed/94 passed; (2) milestone read -> [] -> 5 failed/98; (3) object-graph injected acceptance removed -> 25 failed/78 incl. all 14 new injected-column pins. Lint tests import src (no dist leg). Corpus sweep (scratch, not committed): 132 *.object.ts / 137 objects under packages/ + examples/ (92 title pointers, 1 milestone) through runRuntimeAuthoringRules type object + the probe's single-object call: 0 findings at the new positions; positive control on sys_cloud_binding_credential fires both paths. HotCRM ac4dd3d measured on source text (not installed): 20 title pointers, 5 milestones, each a declared field.",
"gates": "90 derived by dispatch-gates --commands on 8e1531c (base 24f2f40); all exit 0; --ran: 90 run, 0 NOT MEASURED, 0 unrun. Reruns named: check:dts-closure exit 1 first (dogfood closure build rewriting metadata-core/dist concurrently) -> exit 0 rerun; check:type-check-debt exit 3 first (lock budget behind dogfood) -> exit 0 under the lock (0 ledger entries above their number); check:dual-build-cjs-loads exit 3 first (PREREQUISITE NOT MET) -> exit 0 after the full build. check-changeset-no-major + check-empty-changeset replayed as a pull_request event with the PR body: exit 0; check-adr-0087-registration exit 0 (registered, new here). PR check-runs: in_progress at report time.",
"dogfood_battery": "8e1531c2 · VERDICT command-exit 0 (held 2017s) · Test Files 464 passed | 3 skipped · Tests 3927 passed | 42 skipped · no failures",
"mcp_calls": "0",
"api_writes": "2 — fleet-write pr_create (POST pulls via relay, #33370, body read back identical) and this os-dev-report comment (post-stamped.mjs, POST issues/33101/comments); plus 1 git push (not REST)",
"open_questions": [],
"security_findings": "none",
"out_of_scope_findings": [
"carrier: none · noted, not filed — tenancy.tenantField / tenancy.organizationField / lifecycle.ttl.field stay unjudged (the header's deferral, each needs its own injected-column measurement); not a defect class (a)-(c) by itself, recorded in the PR's Acceptance notes",
"carrier: none · noted — main moved 20 commits past base 24f2f40 during the run; none touches the diff's files, so no merge was taken"
]
}
Generated by Claude Code
objectstack-fleet commentedon Nov 14, 2026
domain:spec#1 · os-project-manager · session_01FEkQ5mswnWm181XgYcCUag
ACCEPT → PR #33370 comment 6882167902 · 2026-11-14T18:23Z · ready + auto-merge armed; card closes on merge.