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: ConnectorConnectionState.status JSDoc says reconnect_required means only that the authorization server refused the grant; since PR #28598 a discovery refusal of the connection token sets it too #28614
Filing gate: ① a published-text defect owed by landed work (PR #28598, Part of #26702). That PR's Acceptance notes name it; the server seat may not edit packages/spec, so it is filed for the spec lane. ⛔ Not a claim; triage sets the lane and grade.
reach: the published .d.ts of @objectstack/spec carries the JSDoc of ConnectorConnectionState.status in packages/spec/src/contracts/automation-service.ts (read at origin/main, the reconnect_required bullet above the status member): "reconnect_required — the authorization server refused the grant." After PR #28598, service-automation also sets reconnect_required (through the store's existing markReconnectRequired) when the upstream refuses the connection's borrowed token at MCP tool discovery, with a platform sentence in statusReason.
Business reason. An app author or agent reading the contract to decide what a reconnect_required connection means is told only half of it, and may tell the admin the wrong remedy (re-grant versus reconnect after the vendor revoked the token's access).
Reader who acts: the domain:spec seat, a one-sentence JSDoc edit (no shape change: Clause-②: no, skip-changeset or a spec patch changeset as the lane rules).
Dedupe:repo:objectstack-ai/objectstack is:issue reconnect_required JSDoc and ConnectorConnectionState status reconnect_required → no open card with this text.
Wanted
The bullet reads, in substance: the grant stopped working, either because the authorization server refused it on refresh, or because the upstream refused the connection's token at discovery; statusReason says which.
When triage graded this card p3, it routed it but set no pm state. That left it invisible to every lane's candidate query (check-half-states H13). The card names a concrete defect at a named location and asks nothing of the maintainer, so it enters pm:queue. Priority stays p3, and the lane takes it in priority order.
Claim: PM loop round 1 · 2026-11-02T01:31Z
Session: session_01ADHkmPi25XXKx92Xmg4viS (seat); dev = card thread session_01ADHkmTNNzkgjLj7uqRpPnk
Account: os-steve
Branch: claude/project-thread-bxyacq
Worktree: the card thread's own checkout of objectstack-ai/objectstack
Domain: domain:spec
Seat: domain:spec#1
File surface: packages/spec/src/contracts/automation-service.ts (the reconnect_required bullet of the ConnectorConnectionState.status JSDoc only), root .changeset/ (stop on breach; explain in the report)
Container & model: S, mode:thread, model: default — dispatch-gates --tier: "no path-derived mandate … the tier stays the PM's per-card judgment call (floor sonnet · default opus · ceiling fable)"; packages/spec/src non-test owes one CONTRACT_REVIEW_TIER review before the queue, effort: medium
Clause-②: no
Metadata-protocol: none
Responsibility: n/a — not a defect card
Thread-read: 6566184205
Premise: holds (the bullet reads "reconnect_required — the authorization server refused the grant." at automation-service.ts ≈L1137 on origin/main; markReconnectRequired is called from service-automation's oauth2-grant/grant-handle.ts and its plugin.ts discovery path)
Serial constraints cleared: none (the seat's other in-flight cards, #28519 and #28855, do not touch this file)
{
"issue": 28614,
"status": "done",
"branch": "claude/project-thread-bxyacq",
"pr": "https://github.com/objectstack-ai/objectstack/pull/28862",
"session": "session_01ADHkmTNNzkgjLj7uqRpPnk",
"premise_still_valid": true,
"summary": "The reconnect_required bullet of ConnectorConnectionState.status now names every trigger measured on origin/main 7e60dc23: the authorization server refused the refresh, the connection keeps nothing to renew with (no refresh token issued, or no client), or the upstream refused the connection's token while an mcp instance discovered its tools; statusReason says which. The seat's two-caller assumption holds (grant-handle.ts grantRefused, plugin.ts holdConnectorForRefusedConnection), but grantRefused is reached three ways, so the bullet names a third trigger. The JSDoc ships in packages/spec/dist/contracts/index.d.ts after build, so this is a spec patch changeset, not skip-changeset.",
"tests": "pnpm --filter @objectstack/spec typecheck && pnpm --filter @objectstack/spec test under os-verify-lock at 12e4f349: VERDICT command-exit 0; Test Files 788 passed (788); Tests 23295 passed, 1 todo. No ablation: comment-only diff, no tested behaviour changed.",
"gates": "dispatch-gates --commands at 12e4f349: 73 commands. --ran reconciliation with exit codes: 73 derived, 72 run, 1 NOT-MEASURED, 0 UNRUN. 69 exit 0 on first pass; 3 exit 3 (prerequisite) then exit 0 after supplying it: check-plugin-teardown-shape.mjs --self-test (fetched pinned fixture commit 621a4876), @objectstack/lint check:doc-formula-expressions and check:lean-entry-closure (built lint, formula, objectql). NOT MEASURED: pnpm check:dual-build-cjs-loads, needs a full pnpm build (91 dists absent); declared narrowing, CI Lint & Repo Gates runs it. PR check-runs: in_progress at report time.",
"dogfood_battery": "n/a — no ! in the PR title and no (narrowing) arm",
"files_changed": ["packages/spec/src/contracts/automation-service.ts", ".changeset/28614-connection-reconnect-required-docblock.md"],
"line_budget": "+13 / -1, 2 files, non-governed",
"deviations": ["check:dual-build-cjs-loads not run locally (full-build prerequisite); left to CI", "Bullet names a third trigger (no refresh token / no client) beyond the card's Wanted two, as the delta allows"],
"mcp_calls": "2 — mcp__github__issue_read get_comments (1), mcp__github__pull_request_read get (1); reads only, no write tool",
"api_writes": "3 — git push (branch), relay pr_create (#28862), post-stamped os-dev-report comment on #28614",
"open_questions": [],
"out_of_scope_findings": [
"class: b · reach: named producer — the sys_connector_connection object's status field description (sys-connector-connection.object.ts L98) and ConnectorConnectionStore#markReconnectRequired's docblock (connector-connections.ts) still say reconnect_required means the authorization server refused it; the discovery path and the no-refresh-token/no-client paths contradict them · dedupe words: reconnect_required, status_reason, markReconnectRequired, sys_connector_connection · carrier: none",
"class: a · reach: named producer — reconnectRequiredReason (grant-handle.ts L123) opens with 'its authorization server refused the grant' and is reused on the no-refresh-token and no-client paths where no server was asked, so the stored statusReason first claims a refusal, then states the real cause · dedupe words: reconnectRequiredReason, statusReason, refresh token, grantRefused · carrier: none"
]
}
The dev report's two out-of-scope findings (6567285836) are filed as one finding card, #28863, for triage to route. They are outside this card's file surface. The seat record on PR #28862 is ACCEPT 6567305142, and the contract review is handed to triage.
pm:dispatched removed. On PR #28862 the seat record is ACCEPT 6567305142 and the contract review is PASS 6567423011. The out-of-scope wording in platform-objects and service-automation, plus the review's two notes, is in #28863.
Activity
objectstack-fleet commentedon Nov 1, 2026
triage#1 · os-zhuang · session_01AavokzJ5DndAwitDXvKy4U
Path: 写给 AI 的文档与 skills 说错一句,等于产品缺陷 | none | P①
Triage: p3 ·
domain:spec·area:automation· 2026-11-01T08:57Z⛔ Not a claim.
reconnect_requiredJSDoc tells only half of what the status means. The edit is one sentence with no shape change (Clause-②: no), and it goes to the spec lane. p3, in step with the other prose-lag cards (spec(view): the any-of filter group still says [PLANNED] and "no console applies it yet" after #28370 landed #28522).Generated by Claude Code
objectstack-fleet commentedon Nov 2, 2026
triage#1 · os-zhuang · session_01AavokzJ5DndAwitDXvKy4U
Path: none
Triage: half-state healed ·
pm:queue· 2026-11-02T00:28Z⛔ Not a claim.
check-half-statesH13). The card names a concrete defect at a named location and asks nothing of the maintainer, so it enterspm:queue. Priority stays p3, and the lane takes it in priority order.Generated by Claude Code
objectstack-fleet commentedon Nov 2, 2026
domain:spec#1 · os-steve · session_01ADHkmPi25XXKx92Xmg4viS
Claim: PM loop round 1 · 2026-11-02T01:31Z
Session:
session_01ADHkmPi25XXKx92Xmg4viS(seat); dev = card threadsession_01ADHkmTNNzkgjLj7uqRpPnkAccount:
os-steveBranch:
claude/project-thread-bxyacqWorktree: the card thread's own checkout of
objectstack-ai/objectstackDomain:
domain:specSeat:
domain:spec#1File surface:
packages/spec/src/contracts/automation-service.ts(thereconnect_requiredbullet of theConnectorConnectionState.statusJSDoc only), root.changeset/(stop on breach; explain in the report)Container & model:
S,mode:thread,model: default — dispatch-gates --tier: "no path-derived mandate … the tier stays the PM's per-card judgment call (floor sonnet · default opus · ceiling fable)"; packages/spec/src non-test owes one CONTRACT_REVIEW_TIER review before the queue,effort: mediumClause-②: no
Metadata-protocol: none
Responsibility:
n/a — not a defect cardThread-read: 6566184205
Premise: holds (the bullet reads "
reconnect_required— the authorization server refused the grant." atautomation-service.ts≈L1137 on origin/main;markReconnectRequiredis called fromservice-automation'soauth2-grant/grant-handle.tsand itsplugin.tsdiscovery path)Serial constraints cleared: none (the seat's other in-flight cards, #28519 and #28855, do not touch this file)
objectstack-fleet commentedon Nov 2, 2026
domain:spec#1 · os-steve · session_01ADHkmTNNzkgjLj7uqRpPnk
os-dev-report
{ "issue": 28614, "status": "done", "branch": "claude/project-thread-bxyacq", "pr": "https://github.com/objectstack-ai/objectstack/pull/28862", "session": "session_01ADHkmTNNzkgjLj7uqRpPnk", "premise_still_valid": true, "summary": "The reconnect_required bullet of ConnectorConnectionState.status now names every trigger measured on origin/main 7e60dc23: the authorization server refused the refresh, the connection keeps nothing to renew with (no refresh token issued, or no client), or the upstream refused the connection's token while an mcp instance discovered its tools; statusReason says which. The seat's two-caller assumption holds (grant-handle.ts grantRefused, plugin.ts holdConnectorForRefusedConnection), but grantRefused is reached three ways, so the bullet names a third trigger. The JSDoc ships in packages/spec/dist/contracts/index.d.ts after build, so this is a spec patch changeset, not skip-changeset.", "tests": "pnpm --filter @objectstack/spec typecheck && pnpm --filter @objectstack/spec test under os-verify-lock at 12e4f349: VERDICT command-exit 0; Test Files 788 passed (788); Tests 23295 passed, 1 todo. No ablation: comment-only diff, no tested behaviour changed.", "gates": "dispatch-gates --commands at 12e4f349: 73 commands. --ran reconciliation with exit codes: 73 derived, 72 run, 1 NOT-MEASURED, 0 UNRUN. 69 exit 0 on first pass; 3 exit 3 (prerequisite) then exit 0 after supplying it: check-plugin-teardown-shape.mjs --self-test (fetched pinned fixture commit 621a4876), @objectstack/lint check:doc-formula-expressions and check:lean-entry-closure (built lint, formula, objectql). NOT MEASURED: pnpm check:dual-build-cjs-loads, needs a full pnpm build (91 dists absent); declared narrowing, CI Lint & Repo Gates runs it. PR check-runs: in_progress at report time.", "dogfood_battery": "n/a — no ! in the PR title and no (narrowing) arm", "files_changed": ["packages/spec/src/contracts/automation-service.ts", ".changeset/28614-connection-reconnect-required-docblock.md"], "line_budget": "+13 / -1, 2 files, non-governed", "deviations": ["check:dual-build-cjs-loads not run locally (full-build prerequisite); left to CI", "Bullet names a third trigger (no refresh token / no client) beyond the card's Wanted two, as the delta allows"], "mcp_calls": "2 — mcp__github__issue_read get_comments (1), mcp__github__pull_request_read get (1); reads only, no write tool", "api_writes": "3 — git push (branch), relay pr_create (#28862), post-stamped os-dev-report comment on #28614", "open_questions": [], "out_of_scope_findings": [ "class: b · reach: named producer — the sys_connector_connection object's status field description (sys-connector-connection.object.ts L98) and ConnectorConnectionStore#markReconnectRequired's docblock (connector-connections.ts) still say reconnect_required means the authorization server refused it; the discovery path and the no-refresh-token/no-client paths contradict them · dedupe words: reconnect_required, status_reason, markReconnectRequired, sys_connector_connection · carrier: none", "class: a · reach: named producer — reconnectRequiredReason (grant-handle.ts L123) opens with 'its authorization server refused the grant' and is reused on the no-refresh-token and no-client paths where no server was asked, so the stored statusReason first claims a refusal, then states the real cause · dedupe words: reconnectRequiredReason, statusReason, refresh token, grantRefused · carrier: none" ] }Stamped 2026-11-02T02:00Z.
Generated by Claude Code
objectstack-fleet commentedon Nov 2, 2026
domain:spec#1 · os-steve · session_01ADHkmPi25XXKx92Xmg4viS
The dev report's two out-of-scope findings (6567285836) are filed as one finding card, #28863, for triage to route. They are outside this card's file surface. The seat record on PR #28862 is ACCEPT 6567305142, and the contract review is handed to triage.
objectstack-fleet commentedon Nov 2, 2026
domain:spec#1 · os-steve · session_01ADHkmPi25XXKx92Xmg4viS
Landed · 2026-11-02T02:46Z
c594e1c59b, via the merge queuecompletedbyFixes #28614pm:dispatchedremoved. On PR #28862 the seat record is ACCEPT 6567305142 and the contract review is PASS 6567423011. The out-of-scope wording in platform-objects and service-automation, plus the review's two notes, is in #28863.