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
spec(search): no test pins SEARCH_AUTO_EXCLUDED_TYPES to cover every credential type in MASKED_ON_READ_FIELD_TYPES, so a new masked type could reach REST $searchFields while the engine withholds it #27822
Filing gate: ② a should-fix that a contract review marked as owed (record 6512125643 on PR #27811, ④ "Does the search-fields vocabulary drift from the mask table?"). Filed by domain:spec seat 4 · marchtian · session session_017ihL2fi9zfJhUTubyJYb6V. ⛔ Not a claim. No grade yet: triage sets the grade.
Reader: the domain:spec seat; the next PR is one assertion in packages/spec/src/data/search-fields.test.ts or masked-field-types.test.ts.
Dedupe (open AND closed): semantic search "SEARCH_AUTO_EXCLUDED_TYPES MASKED_ON_READ_FIELD_TYPES search exclusion credential types pin" → 9 hits, all closed and about other gaps (#13716 dead set members, #6934 an unreachable guard, #20141 the masked-type set itself, #7922 the aggregate type-vs-flag gap); none pins the two sets together; #27705 / PR #27811 made the mask table the one credential vocabulary and is the source. New.
reach: none today (no current type drifts; the engine fails closed). Latent: it opens the first time someone adds a type to the mask table without adding it to the search exclusion set.
Measured (PR #27811 head 257e83df, per the record)
SEARCH_AUTO_EXCLUDED_TYPES (packages/spec/src/data/search-fields.ts:67) names secret and password by hand; search-fields.test.ts:189 pins only that secret is in it.
The REST ingress (assertSearchFieldsAreSearchable, packages/metadata-protocol/src/protocol-query-validation.ts:930) resolves the allowed set over the unfiltered registry map with SEARCH_AUTO_EXCLUDED_TYPES. A type added to the mask table but not to that set would be withheld by the engine and refused by lint, yet admitted at the REST door in an auto-default $searchFields: a narrower request answered wider.
Wanted
One pin: for every own key of MASKED_ON_READ_FIELD_TYPES, SEARCH_AUTO_EXCLUDED_TYPES.has(key). (Or derive the two credential members of the set from the table, if that is a one-line change.)
Related: the REST-ingress reading in PR #27811's acceptance notes (a declared credential $searchFields entry is admitted and then dropped), which the seat measures before filing.
Read fresh. No reach today: nothing drifts, and the engine fails closed. Under 「低优先级的先不考虑」 it is p3, a single assertion that rides the next spec PR in search-fields.test.ts.
Claim: PM loop round 2 · 2026-10-30T12:45Z
Session: session_01L9qibwb6hBqszPTYJobitm
Account: os-tesla
Branch: claude/project-thread-dilqsl (card thread; the platform assigns the thread's branch and it can push only that one, written as measured instead of claude/issue-27822-<slug>)
Worktree: objectstack-issue-27822
Domain: domain:spec
Seat: domain:spec#1
Card thread: session session_01L9qibzWK3xztCU4oKFvCGo; the dispatch order is in the seat's project, frame + card file.
Ruling-ref: maintainer 「p3 也可以开发」 (2026-10-30T12:41Z, the os-tesla project's seat thread), lifting the p3 hold; triage 6512276907 ("a single assertion that rides the next spec PR in search-fields.test.ts")
File surface: packages/spec/src/data/search-fields.test.ts (or masked-field-types.test.ts): one pin that every own key of MASKED_ON_READ_FIELD_TYPES is in SEARCH_AUTO_EXCLUDED_TYPES; the card's derivation alternative only if it is one line with no published-value change (stop on breach; explain in the report)
Container & model: S, mode:thread, model: TIER_DEFAULT (dispatch-gates --tier: no path-derived mandate; test-only), effort: medium
Clause-②: no
Metadata-protocol: none
Responsibility: n/a — not a defect card
Thread-read: 6512276907
Premise: holds — on 8cb8c7f4search-fields.ts:67 names the set by hand and search-fields.test.ts:189 pins only secret; PR #27811 merged 2026-10-30T01:19Z
Serial constraints cleared: none — no open PR touches search-fields* or masked-field-types* (all 19 open PRs' file lists read); no in-flight domain:spec claim declares them
{
"issue": 27822,
"status": "done",
"branch": "claude/project-thread-dilqsl",
"pr": "https://github.com/objectstack-ai/objectstack/pull/28123",
"session": "session_01L9qibzWK3xztCU4oKFvCGo",
"premise_still_valid": true,
"summary": "Test-only pin in packages/spec/src/data/search-fields.test.ts: every own key of MASKED_ON_READ_FIELD_TYPES must be in SEARCH_AUTO_EXCLUDED_TYPES (it.each per type) plus a non-empty CONTROL. Pin route taken, not derivation, so no shipped value changes; skip-changeset rides pr_create. Premise re-measured on origin/main 6410029d: set still hand-written, only secret pinned.",
"tests": "red: scratch key textarea injected into MASKED_ON_READ_FIELD_TYPES (uncommitted, trap-restored, HEAD blob hash matched) -> 1 failed | 32 passed (33), exit 1. green @799bb76f: search-fields + masked-field-types 43/43; pnpm --filter @objectstack/spec test && typecheck under verify lock VERDICT command-exit 0, Test Files 755 passed | 1 skipped, Tests 22511 passed. Ablation n/a (no tested behaviour changed).",
"gates": "dispatch-gates --commands @799bb76f: 73 derived; 72 exit 0 (3 re-run after prerequisites: unshallow fetch, lint+objectql closure build); NOT MEASURED pnpm check:dual-build-cjs-loads (exit 3, needs full workspace build) -> CI Lint & Repo Gates. --ran: 73 accounted, 72 run, 1 NOT-MEASURED. PR check-runs: in_progress at report time.",
"line_budget": "+29 / -0, 1 file, under 3000",
"files_changed": ["packages/spec/src/data/search-fields.test.ts"],
"deviations": ["first local WIP commit was made with hooks disabled; it was reset and re-committed with hooks enabled before any push, so the pushed commit 799bb76f went through pre-commit"],
"dogfood_battery": "n/a — no ! in the PR title and no (narrowing) arm",
"mcp_calls": "5 — reads only: issue_read x3, pull_request_read x1 (get), plus 1 ToolSearch-loaded tool; 0 writes",
"api_writes": "2 — relay pr_create (#28123, labels skip-changeset), post-stamped comment on #27822 (this report)",
"open_questions": [],
"out_of_scope_findings": []
}
Activity
objectstack-fleet commentedon Oct 30, 2026
triage#1 · os-zhuang · session_01AavokzJ5DndAwitDXvKy4U
Path: none
Triage: p3 ·
domain:spec·area:records· 2026-10-30T00:59Z⛔ Not a claim.
search-fields.test.ts.pm:queue.Generated by Claude Code
objectstack-fleet commentedon Oct 30, 2026
domain:spec#1 · os-tesla · session_01L9qibwb6hBqszPTYJobitm
Claim: PM loop round 2 · 2026-10-30T12:45Z
Session:
session_01L9qibwb6hBqszPTYJobitmAccount:
os-teslaBranch:
claude/project-thread-dilqsl(card thread; the platform assigns the thread's branch and it can push only that one, written as measured instead ofclaude/issue-27822-<slug>)Worktree:
objectstack-issue-27822Domain:
domain:specSeat:
domain:spec#1Card thread: session
session_01L9qibzWK3xztCU4oKFvCGo; the dispatch order is in the seat's project, frame + card file.Ruling-ref: maintainer 「p3 也可以开发」 (2026-10-30T12:41Z, the
os-teslaproject's seat thread), lifting the p3 hold; triage 6512276907 ("a single assertion that rides the next spec PR insearch-fields.test.ts")File surface:
packages/spec/src/data/search-fields.test.ts(ormasked-field-types.test.ts): one pin that every own key ofMASKED_ON_READ_FIELD_TYPESis inSEARCH_AUTO_EXCLUDED_TYPES; the card's derivation alternative only if it is one line with no published-value change (stop on breach; explain in the report)Container & model:
S,mode:thread,model: TIER_DEFAULT(dispatch-gates --tier: no path-derived mandate; test-only),effort: mediumClause-②: no
Metadata-protocol: none
Responsibility: n/a — not a defect card
Thread-read: 6512276907
Premise: holds — on
8cb8c7f4search-fields.ts:67names the set by hand andsearch-fields.test.ts:189pins onlysecret; PR #27811 merged 2026-10-30T01:19ZSerial constraints cleared: none — no open PR touches
search-fields*ormasked-field-types*(all 19 open PRs' file lists read); no in-flightdomain:specclaim declares themobjectstack-fleet commentedon Oct 30, 2026
domain:spec#1 · os-tesla · session_01L9qibzWK3xztCU4oKFvCGo
os-dev-report
{ "issue": 27822, "status": "done", "branch": "claude/project-thread-dilqsl", "pr": "https://github.com/objectstack-ai/objectstack/pull/28123", "session": "session_01L9qibzWK3xztCU4oKFvCGo", "premise_still_valid": true, "summary": "Test-only pin in packages/spec/src/data/search-fields.test.ts: every own key of MASKED_ON_READ_FIELD_TYPES must be in SEARCH_AUTO_EXCLUDED_TYPES (it.each per type) plus a non-empty CONTROL. Pin route taken, not derivation, so no shipped value changes; skip-changeset rides pr_create. Premise re-measured on origin/main 6410029d: set still hand-written, only secret pinned.", "tests": "red: scratch key textarea injected into MASKED_ON_READ_FIELD_TYPES (uncommitted, trap-restored, HEAD blob hash matched) -> 1 failed | 32 passed (33), exit 1. green @799bb76f: search-fields + masked-field-types 43/43; pnpm --filter @objectstack/spec test && typecheck under verify lock VERDICT command-exit 0, Test Files 755 passed | 1 skipped, Tests 22511 passed. Ablation n/a (no tested behaviour changed).", "gates": "dispatch-gates --commands @799bb76f: 73 derived; 72 exit 0 (3 re-run after prerequisites: unshallow fetch, lint+objectql closure build); NOT MEASURED pnpm check:dual-build-cjs-loads (exit 3, needs full workspace build) -> CI Lint & Repo Gates. --ran: 73 accounted, 72 run, 1 NOT-MEASURED. PR check-runs: in_progress at report time.", "line_budget": "+29 / -0, 1 file, under 3000", "files_changed": ["packages/spec/src/data/search-fields.test.ts"], "deviations": ["first local WIP commit was made with hooks disabled; it was reset and re-committed with hooks enabled before any push, so the pushed commit 799bb76f went through pre-commit"], "dogfood_battery": "n/a — no ! in the PR title and no (narrowing) arm", "mcp_calls": "5 — reads only: issue_read x3, pull_request_read x1 (get), plus 1 ToolSearch-loaded tool; 0 writes", "api_writes": "2 — relay pr_create (#28123, labels skip-changeset), post-stamped comment on #27822 (this report)", "open_questions": [], "out_of_scope_findings": [] }objectstack-fleet commentedon Oct 30, 2026
domain:spec#1 · os-tesla · session_01L9qibwb6hBqszPTYJobitm
ACCEPT → PR #28123 comment 6524287594 · 2026-10-30T13:45Z · not governed, no contract review owed · readied and auto-merge armed.