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
An object extension's format and json_schema validation rules skip the regex and JSON-schema checks the object's own rules get #33217
Filing gate: ③ a follow-up the #33154 implementer reported out of scope and its contract review confirmed by reading (record 6870963898 ③ on PR #33205).
Business reason: after #33154 an extension's expression-bearing validation rules are judged like the object's own, but a format rule's regex and a json_schema rule's schema carried by an extension are still not checked at os build or the publish door. An invalid pattern or schema is accepted in Studio and fails only when an end user saves a record.
Reader who acts: the owner of the regex and JSON-schema validation-rule checks in packages/lint.
维护者速读
对象扩展里 format(正则)和 json_schema 类型的校验规则,在发布门和 os build 都不检查正则或 schema 是否合法;对象自身的同类规则会检查。写错要到最终用户保存记录时才暴露。
Expected
The regex and JSON-schema checks reach the validations an extension carries, with the same rule ids and locators the object's own rules get.
Dedupe
repo:objectstack-ai/objectstack is:issue is:open extension format json_schema validation checked at filing. Related: #33154.
Serial behind #33154's PR #33205 (draft at 9d07ffa069, contract review claimed 6878678135). That PR adds the extension walk this card extends: it changes packages/lint/src/validate-expressions.ts and authoring-rules.ts, and this card's fix reads the extension's rules through that walk. Fold-or-serial: serial, not folded. #33205 is past implementation and in review, so folding would move its reviewed head. #33216 and #33217 can then share one PR, as triage suggested (6871985110, 6871996425). Back to pm:queue when #33205 merges. ⛔ Not a claim.
The Blocked-by: #33205 target merged at 2026-11-14T15:57Z (27d042f4e5). Re-derived: no other open blocker. Back to pm:queue, unclaimed. This seat is winding down on the maintainer's 「当前任务处理完,合并后下班」 and does not take it. Order for the next spec seat: #33216 and #33217 together in one PR (the same extension walk, as triage suggested), and #33246 on its own. All three touch packages/lint/src/validate-expressions.ts, so run them serially or resolve the conflict at landing. ⛔ Not a claim.
Claim: PM loop round 1 · 2026-11-14T16:44Z
Session: session_01FEkQ5mswnWm181XgYcCUag (seat); card thread session_01FEkQ5ny58hH1bcw97uPpgu is the dev
Account: os-project-manager
Branch: claude/project-thread-0m40gx (the card thread's designated branch; family dispatch of #33216 + #33217 on one PR, member; chain head #33216)
Worktree: objectstack-issue-33216
Domain: domain:spec
Seat: domain:spec#1
File surface: packages/lint/src/validate-expressions.ts (hop-index / served-fold region only; ⛔ not buildNullableFieldIndex or the extensionWrite strip, which are #33246's), packages/lint/src/validate-rule-schema-formats.ts, validate-rule-compilability.ts, authoring-rules.ts only if a rule's scope must widen, their tests; packages/runtime/src/domains/meta-object-extension-item.test.ts; 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: packages/lint (objectstack): the extension walk #33205 added does not route an extension's rules and added lookups through the hop and regex/JSON-schema checks | the object's own rules already take those checks, the path to extend | any author publishing an object extension; end users then fail every save
Thread-read: 6880225651
Premise: holds at origin/main87330e89: refuseUndeclaredHopField / storedMetadataBodyReferencesFor (validate-expressions.ts ~:2402, ~:2463) iterate the declared objects; PR #33205 merged 2026-11-14T15:57Z, unblocking both cards. Fold gates ①–⑤ answered in the order: /mnt/project-files/pm-orders/spec/order-33216.md (project share); #33246 runs serially after this PR, #33153 and #33101 excluded.
Serial constraints cleared: PR #33321 (server area A2) edits packages/lint/src/authoring-rules.ts, and PR #33300 (area A5) edits meta-object-extension-item.test.ts; this card touches the first only if a rule's scope must widen, and adds door pins to the second, so it merges main once after whichever lands first. No open PR touches validate-expressions.ts, validate-rule-schema-formats.ts or validate-rule-compilability.ts.
File surface amended for this member: see the chain head #33216 (two semantic ledger entries, @objectstack/spec in the changeset). The 18.object-extension-validation-rule-artifacts-judged.ts entry is this card's commit.
Activity
objectstack-fleet commentedon Nov 14, 2026
triage#1 · hotlong · session_01Q4EjjMnyLqJdzuktEmRPXH
Path: none
Triage: first touch →
domain:spec· p2 ·pm:queue· 2026-11-14T04:51Z⛔ Not a claim.
formatregex andjson_schemarules skip the checks the object's own rules get, so an invalid pattern or schema surfaces only when an end user saves: p2, the same class as 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 A one-hop read through a lookup an object extension adds is accepted with a misspelt target field, then refuses every save #33216.packages/lint).objectstack-fleet commentedon Nov 14, 2026
domain:spec#2 · sunhaolin · session_017xRBcSbLCxEmyHf9upz3pz
Blocked-by: #33205
Serial behind #33154's PR #33205 (draft at
9d07ffa069, contract review claimed 6878678135). That PR adds the extension walk this card extends: it changespackages/lint/src/validate-expressions.tsandauthoring-rules.ts, and this card's fix reads the extension's rules through that walk. Fold-or-serial: serial, not folded. #33205 is past implementation and in review, so folding would move its reviewed head. #33216 and #33217 can then share one PR, as triage suggested (6871985110, 6871996425). Back topm:queuewhen #33205 merges. ⛔ Not a claim.objectstack-fleet commentedon Nov 14, 2026
domain:spec#2 · sunhaolin · session_017xRBcSbLCxEmyHf9upz3pz
Unblocked · 2026-11-14T15:59Z
The
Blocked-by: #33205target merged at 2026-11-14T15:57Z (27d042f4e5). Re-derived: no other open blocker. Back topm:queue, unclaimed. This seat is winding down on the maintainer's 「当前任务处理完,合并后下班」 and does not take it. Order for the next spec seat: #33216 and #33217 together in one PR (the same extension walk, as triage suggested), and #33246 on its own. All three touchpackages/lint/src/validate-expressions.ts, so run them serially or resolve the conflict at landing. ⛔ Not a claim.objectstack-fleet commentedon Nov 14, 2026
domain:spec#1 · os-project-manager · session_01FEkQ5mswnWm181XgYcCUag
Claim: PM loop round 1 · 2026-11-14T16:44Z
Session:
session_01FEkQ5mswnWm181XgYcCUag(seat); card threadsession_01FEkQ5ny58hH1bcw97uPpguis the devAccount:
os-project-managerBranch:
claude/project-thread-0m40gx(the card thread's designated branch; family dispatch of #33216 + #33217 on one PR, member; chain head #33216)Worktree:
objectstack-issue-33216Domain:
domain:specSeat:
domain:spec#1File surface:
packages/lint/src/validate-expressions.ts(hop-index / served-fold region only; ⛔ notbuildNullableFieldIndexor theextensionWritestrip, which are #33246's),packages/lint/src/validate-rule-schema-formats.ts,validate-rule-compilability.ts,authoring-rules.tsonly if a rule's scope must widen, their tests;packages/runtime/src/domains/meta-object-extension-item.test.ts; 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:
packages/lint(objectstack): the extension walk #33205 added does not route an extension's rules and added lookups through the hop and regex/JSON-schema checks | the object's own rules already take those checks, the path to extend | any author publishing an object extension; end users then fail every saveThread-read: 6880225651
Premise: holds at
origin/main87330e89:refuseUndeclaredHopField/storedMetadataBodyReferencesFor(validate-expressions.ts~:2402, ~:2463) iterate the declaredobjects; PR #33205 merged 2026-11-14T15:57Z, unblocking both cards. Fold gates ①–⑤ answered in the order:/mnt/project-files/pm-orders/spec/order-33216.md(project share); #33246 runs serially after this PR, #33153 and #33101 excluded.Serial constraints cleared: PR #33321 (server area A2) edits
packages/lint/src/authoring-rules.ts, and PR #33300 (area A5) editsmeta-object-extension-item.test.ts; this card touches the first only if a rule's scope must widen, and adds door pins to the second, so it merges main once after whichever lands first. No open PR touchesvalidate-expressions.ts,validate-rule-schema-formats.tsorvalidate-rule-compilability.ts.objectstack-fleet commentedon Nov 14, 2026
domain:spec#1 · os-project-manager · session_01FEkQ5mswnWm181XgYcCUag
File surface amended for this member: see the chain head #33216 (two semantic ledger entries,
@objectstack/specin the changeset). The18.object-extension-validation-rule-artifacts-judged.tsentry is this card's commit.objectstack-fleet commentedon Nov 14, 2026
domain:spec#1 · os-project-manager · session_01FEkQ5mswnWm181XgYcCUag
File surface amended (claim 6880893838 on #33217) · 2026-11-14T17:06Z
packages/lint/src/validate-security-posture.runtime-surface.test.ts(two lines). Its security-role-word lint skips fields declared through objectExtensions, so a field named role passes validate, build and verify #31998 case pins theobject_extensiondoor's rule roster exactly; An object extension's format and json_schema validation rules skip the regex and JSON-schema checks the object's own rules get #33217 addsvalidateRuleCompilabilityandvalidateRuleSchemaFormatsto that door, so the pin moves with the change (same edit as the two roster pins inruntime-gate.object-formula-writes.test.ts). Requested by the card thread; branchclaude/project-thread-0m40gxatd190a7f0.