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
A package with no protocol range installs with the compatibility check skipped, and only the server log says so #30326
Filing gate: ③ the maintainer's direct order, verbatim: 「你发现的问题都立卡,安全问题总专用的安全密卡通道,需要进一步分析的进一步测试,还是没有把握的用决策卡。」 (2026-11-05). Found in a real-user browser walkthrough of Setup on main04f36b63f8, with a test app and a local test deployment.
Business reason. The compatibility check exists so an app written for another platform version does not break a customer's deployment. When it is skipped, the administrator clicking Install is the person who needs to know, and they do not read server logs.
Reader. The server lane dev for the install answer in packages/cloud-connection/src/marketplace-install-local-plugin.ts, and the UI lane for showing it.
Duplicates. Searched engines.protocol package marketplace warning admin (19 hits). #21727, closed, is a different case: an incompatible package answered with a 500. The rest are QA run anchors.
Measured
Installing HotCRM v6.0.0 from the marketplace, the server log says:
WARN [MarketplaceInstallLocal] [protocol] package 'app.objectstack.hotcrm' declares no engines.protocol range; loading under protocol 18.0.0 without a compatibility check (ADR-0087).
The page says only that the install succeeded. The detail page shows no platform version information.
Expected
The install answer carries this, and the page shows it in plain words, for example that the app did not state which platform version it supports and was not checked for compatibility. Whether publishing should also warn or refuse such a package is a separate choice. If the dev finds it needs a contract change, report it rather than deciding in the PR.
Read fresh. A package with no protocol range installs with the compatibility check skipped, and only the server log says so (marketplace-install-local-plugin.ts). p2. The install dialog's wording is the domain:ui half.
Claim: PM loop round 1
Session: session_01Utp6CYVV6fcAQrNTDQRvPb (seat) · dev = project card thread session_01Utp6CZ35sjTKgyrvdkytCz
Account: os-bill
Branch: claude/project-thread-fqxfr0 (harness-pinned thread branch; platform exception to claude/issue-<n>-<slug>)
Worktree: objectstack-issue-30326
Domain: domain:server
Seat: domain:server#5
File surface: packages/cloud-connection/src/** (the install answer and its tests); packages/metadata-core/src/protocol-handshake.ts only to expose the existing verdict; packages/services/service-package/src/** only if the same install path answers there; content/docs/** only for sentences this PR makes false (not releases/**); one changeset. ⛔ packages/spec/** (a needed schema change stops as needs_decision), ui/**, skills/**, docs/adr/**, .claude/**, AGENTS.md (stop on breach; explain in the report)
Container & model: M, mode:thread, model: default tier (opus), effort: high
Clause-②: yes (widening) provisional — an optional notice on the install answer; no if nothing answered changes shape
Metadata-protocol: none (provisional) — an install answer, not what an author writes
Responsibility: cloud-connection's marketplace install loads a package with no engines.protocol range without the compatibility check and says so only in a server warn line (measured installing HotCRM v6.0.0, card body) | none: the administrator clicking Install never reads server logs | every administrator installing a package that declares no protocol range
Thread-read: 6652014530
Premise: holds per the card's measurement; server half only (the install dialog's wording is the ui half, lane off duty) — the PR carries Refs #30326 and the seat releases the card at landing
Serial constraints cleared: seat 3's PR #30351 (#30217) edits marketplace-install-local-plugin.ts and is in the merge queue: the dev branches code from origin/main after it merges. Seat 4's PR #30346 (same file) merged at 8589756a.
Order: project file server-seat5/dispatch-30326.md, delivered to the card thread.
{
"issue": 30326,
"status": "done",
"branch": "claude/project-thread-fqxfr0",
"pr": "https://github.com/objectstack-ai/objectstack/pull/30409",
"session": "session_01Utp6CZ35sjTKgyrvdkytCz",
"premise_still_valid": true,
"summary": "Premise held on fdad1786 and 870ebce3: install-local admitted a package with no engines.protocol through assertProtocolCompat, which only warned and returned void, and all three success answers (managed, unmanaged, paired customization) said nothing. assertProtocolCompat now returns the verdict checkProtocolCompat gave (new type ProtocolCompatAdmitted) and the no-range / unparsed-range verdicts carry protocolVersion; step 1c keeps it and every success answer carries optional data.protocolCheckSkipped { reason (the handshake's own status), packageId, protocolVersion, message, + requiredRange / rangeSource for unparsed-range }, omitted when the range was checked. The warn line is unchanged. Contract stop measured and not reached: no packages/spec schema describes the install-local success answer. Card assignee untouched; PR opened as draft with no assignee, labels or review request (Part of #30326: the UI half remains).",
"tests": "Red first on fdad1786 (fix reverted, pins in): 5 notice cases red (200 with no protocolCheckSkipped), 2 controls green; with the fix 43/43 in the two files. Head 4d926a74 (os-verify-lock VERDICT command-exit 0): metadata-core typecheck exit 0, cloud-connection typecheck exit 0; metadata-core test Test Files 23/23 Tests 911/911; cloud-connection test Test Files 70/70 Tests 877/877. One existing pin moved: marketplace-install-local-jobs.test.ts fixture now declares engines.protocol ^CURRENT_MAJOR (its jobs-free case pins the exact answer key set). Ablation via scripts/ablation-replace.mjs on 4d926a74: deleting the protocolCheckSkipped assignation (anchor 1 -> 0, blob 8e7fdb92 -> 5f6c1432) turns the 5 notice cases red, 38 green; restored blob == HEAD 8e7fdb92, git diff HEAD empty; no dist leg (metadata-core aliased to src in the cloud-connection vitest config, plugin imported from src).",
"gates": "dispatch-gates --commands on 6c1d2ef22 (after merging origin/main 8fad7b193): 60 families, identical to the list on 4d926a74; 60 run, exit codes captured before any pipe, 60 x exit 0; --ran: 60 derived / 60 run / 0 NOT-MEASURED / 0 UNRUN. On 4d926a74: 60 x exit 0 after git fetch of fixture commit 621a4876 for check-plugin-teardown-shape --self-test (exit 3 on the shallow clone before). pnpm lint exit 0 on 4d926a74. CI check-runs on #30409: not read at report time.",
"dogfood_battery": "n/a — no `!` in the PR title and no (narrowing) arm",
"line_budget": "7 files, +242 / -14 vs origin/main merge base 8fad7b193; under the 3000-line class (c) threshold",
"deviations": [
"The order names `Refs #30326`; os-dev.md's Definition of done names `Part of #N` for a PR that should not close its card, and the file wins on conflict, so the body says `Part of #30326` (neither closes the card).",
"The order asks for `pnpm lint`; os-dev.md says the repo-wide lint is CI's run. Ran it anyway: exit 0 on 4d926a74.",
"packages/cloud-connection/src/marketplace-install-local-jobs.test.ts: an existing fixture gained engines.protocol (inside the dispatched surface, tests of the install answer).",
"The merge of origin/main (#30380, #30368) touched metadata-protocol, cli and spec only, so suites and typecheck were not re-run on 6c1d2ef22; gates were.",
"Thread-designated branch: commits carry the model-free trailer pair per AGENTS.md."
],
"files_changed": [
".changeset/30326-install-answer-protocol-check-skipped.md",
"packages/cloud-connection/src/marketplace-install-local-customization-pair-install.test.ts",
"packages/cloud-connection/src/marketplace-install-local-jobs.test.ts",
"packages/cloud-connection/src/marketplace-install-local-plugin.ts",
"packages/cloud-connection/src/marketplace-install-local-protocol-handshake.test.ts",
"packages/metadata-core/src/protocol-handshake.test.ts",
"packages/metadata-core/src/protocol-handshake.ts"
],
"mcp_calls": "0 — no GitHub MCP call; reads went through gh api",
"api_writes": "2 — relay pr_create (POST /repos/objectstack-ai/objectstack/dispatches, run 42007198845 success, read-back 9571/9571 bytes identical, PR #30409 draft, no assignees, no labels); this os-dev-report comment via post-stamped (POST /repos/objectstack-ai/objectstack/issues/30326/comments). Plus git push of the designated branch (not REST).",
"open_questions": [],
"security_findings": "none",
"out_of_scope_findings": [
"carrier: seat 5 · noted, not filed — POST /api/v1/packages (packages/runtime/src/domains/packages.ts, assertProtocolCompat(manifest)) still answers success with no notice for a package with no range; outside this order's surface; with the verdict now returned, the same spread there is small. Dedupe words: engines.protocol packages door notice, protocolCheckSkipped runtime packages",
"carrier: seat 5 · noted, not filed — os package install prints the answer's note but not protocolCheckSkipped; the CLI's call"
]
}
Landing · 2026-11-05T10:10Z: server half → PR #30409 (head 6c1d2ef2), seat ACCEPT posted, ready + auto-merge enabled. Part of #30326: the card stays open for its ui half; the seat releases it at merge.
Release: 2026-11-05T10:55Z — server half landed, PR #30409 merged as 60fe44fdc (seat ACCEPT 6655279987), Part of #30326. The card goes back to the queue for its remaining half, re-laned domain:server → domain:ui; assignee cleared.
Resume-from: the ui half — the install dialog shows data.protocolCheckSkipped.message in plain words when POST /api/v1/marketplace/install-local answers it (present only when the ADR-0087 handshake admitted the package unchecked: reasonno-range / unparsed-range, packageId, protocolVersion; requiredRange / rangeSource for unparsed-range), and the package detail page may show the same. Nothing is owed on the server for this card. The other install door, POST /api/v1/packages, is #30412 (server, p3).
Claim: PM loop round 2
Session: session_01L6bhgVwQZbHRRM9CaXeKif
Account: os-sales
Branch: claude/project-thread-sukiom (card thread of this project; a thread can push only its designated branch — measured platform exception to claude/issue-<n>-<slug>)
Worktree: objectstack-issue-30326
Domain: domain:ui
Seat: domain:ui#5
File surface: ui/packages/app-shell/src/console/marketplace/** (install result types in marketplaceApi.ts, the detail page's Install note, the catalog's org install message, their tests) + ui/packages/app-shell/src/views/metadata-admin/PackagesPage.tsx (Setup → Packages → Import) + ui/packages/i18n/src/locales/*.ts (marketplace.*) + ui/packages/i18n/src/namespaces/studio/{en,zh}.ts (engine.packages.*) + one root .changeset/. ⛔ packages/** (server lane).
Container & model: M, mode:thread, model: default — dispatch-gates --tier: no path-derived mandate, effort: high
Clause-②: yes
Metadata-protocol: none
Responsibility: POST /api/v1/marketplace/install-local already answers data.protocolCheckSkipped when the ADR-0087 handshake admitted a package unchecked (PR #30409), and the Console's three install result surfaces read only the success fields, so the notice is dropped | none: the administrator does not see server logs and no client draws the field | every administrator who installs, from the Console, a package that declares no engines.protocol or a range the server cannot parse
Thread-read: 6656206176
Premise: holds
Serial constraints cleared: PR #30443 (this seat, #30311) edits imports and the Open app button in MarketplacePackagePage.tsx / MarketplacePage.tsx, not the install handlers or notes: merge main if it lands first. PR #30426 (#30330) merged. #30325 and #30323 (queue, unclaimed) share these pages and serialise after this card. No in-flight domain:ui claim covers console/marketplace/** or PackagesPage.tsx.
Scope: the ui half named in Release 6656206176, at the three install result surfaces. A standing protocol display on the package detail page is out (no field to read back after install); the dev reports it. Clause-② yes (widening) for new i18n keys: the seat's TIER_DEFAULT review before the queue. Dispatch order lives in the card thread's opening message.
{
"issue": 30326,
"status": "done",
"branch": "claude/project-thread-sukiom",
"pr": "https://github.com/objectstack-ai/objectstack/pull/30460",
"session": "session_01L6bhgWZ1wrAZ2ocZovnByy",
"premise_still_valid": true,
"summary": "Premise held on b6caa141: the install door answers data.protocolCheckSkipped (measured live on app-showcase: no-range and unparsed-range shapes exactly as the dispatch's mechanism section states), and the Console's three install result surfaces read only the success fields. New console/marketplace/protocolCheckSkipped.ts (modelled on dependencyMissing.ts) draws marketplace.install.protocolCheckSkipped.noRange / .unparsedRange from the notice's facts, the server message for an unknown reason, nothing when absent; ProtocolCheckSkippedNote.tsx renders it as an amber line inside the existing result note on the package page Install (all four success branches), the catalog org install and Setup > Packages > Import. Result types gain the optional field; 2 keys in all 10 locale packs.",
"tests": "On a58846c5 (head 1a72f696 is tree-identical): 4 new files Test Files 4/4, Tests 14/14 (lock VERDICT command-exit 0). pnpm --dir ui exec vitest run packages/app-shell/src/console/marketplace/ packages/app-shell/src/views/metadata-admin/PackagesPage packages/i18n/: Test Files 163/163, Tests 2016 passed 13 skipped. Ablation via scripts/ablation-replace.mjs: reader guard replaced by an unconditional return null (anchor 1 -> 0, blob 1700af14 -> 8e4eb802): 10 failed / 4 passed (the 4 CONTROL cases green); restored blob == HEAD 1700af14, git diff HEAD empty; no dist leg (tests import app-shell src). type-check @object-ui/app-shell and @object-ui/i18n exit 0.",
"gates": "dispatch-gates --commands on a58846c5: 35 families, 35 x exit 0 (codes captured before any pipe); --ran: 35 derived / 35 run / 0 NOT-MEASURED / 0 UNRUN. pnpm --dir ui run check:spec-symbols exit 0. ui checks i18n-keys, i18n-drift, i18n-dead-keys, control-bytes, new-line-citations, icon-record-names, phantom-deps: exit 0 each; check:eager-locale-catalogues exit 2 PREREQUISITE NOT MET (needs a built console bundle): NOT MEASURED locally, CI's reading. eslint on 6 changed sources: 0 errors. CI check-runs on #30460: not read at report time.",
"dogfood_battery": "n/a — no `!` in the PR title and no (narrowing) arm",
"line_budget": "21 files, +637 / -4 vs merge base b6caa141 (393 of the added lines are the 4 test files); under the 3000-line threshold",
"deviations": [
"Suggested route named engine.packages.* rows in studio en/zh for Import; PackagesPage already draws DEPENDENCY_MISSING through the shared marketplace hook (marketplace.* keys, 10 locales, same language source as useMetadataLocale), so Import reuses useProtocolCheckSkippedText and no engine.packages.* row is added.",
"Before/after zh 1440 shots cover Setup > Packages > Import only: the rig has no cloud marketplace (cloudUrl empty), so the package page and the org catalog cannot install from a catalog; both are pinned by tests on the wire shape the live server answered. Before = reader held to null via ablation-replace --hold, restored, blob == HEAD.",
"Evidence commit 136df32a holds the PNGs, removed by 1a72f696; the PR body links blob URLs at 136df32a.",
"Thread-designated branch: commits carry the model-free trailer pair per AGENTS.md."
],
"files_changed": [
".changeset/30326-install-result-protocol-check-skipped.md",
"ui/packages/app-shell/src/console/marketplace/MarketplacePackagePage.tsx",
"ui/packages/app-shell/src/console/marketplace/MarketplacePage.tsx",
"ui/packages/app-shell/src/console/marketplace/ProtocolCheckSkippedNote.tsx",
"ui/packages/app-shell/src/console/marketplace/__tests__/MarketplacePackagePage.protocolCheckSkipped-30326.test.tsx",
"ui/packages/app-shell/src/console/marketplace/__tests__/MarketplacePage.orgInstallProtocolCheckSkipped-30326.test.tsx",
"ui/packages/app-shell/src/console/marketplace/__tests__/protocolCheckSkipped-30326.test.ts",
"ui/packages/app-shell/src/console/marketplace/marketplaceApi.ts",
"ui/packages/app-shell/src/console/marketplace/protocolCheckSkipped.ts",
"ui/packages/app-shell/src/views/metadata-admin/PackagesPage.importProtocolCheckSkipped-30326.test.tsx",
"ui/packages/app-shell/src/views/metadata-admin/PackagesPage.tsx",
"ui/packages/i18n/src/locales/{ar,de,en,es,fr,ja,ko,pt,ru,zh}.ts"
],
"mcp_calls": "2 — mcp__github__issue_read (get_comments on #30326), mcp__github__pull_request_read (get on #30442, body format); reads only, no MCP write",
"api_writes": "2 — relay pr_create (POST /repos/objectstack-ai/objectstack/dispatches, run 42026770457 success, read-back 9378/9378 bytes identical, PR #30460 draft, no assignees, no labels); this os-dev-report comment via post-stamped (POST /repos/objectstack-ai/objectstack/issues/30326/comments). Plus git push of the designated branch (not REST).",
"open_questions": [],
"security_findings": "none",
"out_of_scope_findings": [
"carrier: claim (seat 5) · noted, not filed — a standing protocol display on the package detail page: no read serves protocolCheckSkipped back after install (GET install-local listing carries no such field), so it would need a server field first. Dedupe words: package detail protocol range display, installed package protocolCheckSkipped listing",
"carrier: #30412 · noted, not filed — POST /api/v1/packages answers no notice; when it does, PackagesPage has no caller of that door for install, nothing owed here"
]
}
Activity
objectstack-fleet commentedon Nov 5, 2026
triage#1 · os-zhuang · session_01AavokzJ5DndAwitDXvKy4U
Path: none
Triage: first-touch audit · p2 ·
domain:server·pm:queue· 2026-11-05T07:08Z⛔ Not a claim.
marketplace-install-local-plugin.ts). p2. The install dialog's wording is thedomain:uihalf.Generated by Claude Code
objectstack-fleet commentedon Nov 5, 2026
domain:server#5 · os-bill · session_01Utp6CYVV6fcAQrNTDQRvPb
Claim: PM loop round 1
Session:
session_01Utp6CYVV6fcAQrNTDQRvPb(seat) · dev = project card threadsession_01Utp6CZ35sjTKgyrvdkytCzAccount:
os-billBranch:
claude/project-thread-fqxfr0(harness-pinned thread branch; platform exception toclaude/issue-<n>-<slug>)Worktree:
objectstack-issue-30326Domain:
domain:serverSeat:
domain:server#5File surface:
packages/cloud-connection/src/**(the install answer and its tests);packages/metadata-core/src/protocol-handshake.tsonly to expose the existing verdict;packages/services/service-package/src/**only if the same install path answers there;content/docs/**only for sentences this PR makes false (notreleases/**); one changeset. ⛔packages/spec/**(a needed schema change stops as needs_decision),ui/**,skills/**,docs/adr/**,.claude/**,AGENTS.md(stop on breach; explain in the report)Container & model:
M,mode:thread,model: default tier (opus),effort: highClause-②: yes (widening) provisional — an optional notice on the install answer;
noif nothing answered changes shapeMetadata-protocol: none (provisional) — an install answer, not what an author writes
Responsibility:
cloud-connection's marketplace install loads a package with no engines.protocol range without the compatibility check and says so only in a server warn line (measured installing HotCRM v6.0.0, card body) | none: the administrator clicking Install never reads server logs | every administrator installing a package that declares no protocol rangeThread-read: 6652014530
Premise: holds per the card's measurement; server half only (the install dialog's wording is the ui half, lane off duty) — the PR carries
Refs #30326and the seat releases the card at landingSerial constraints cleared:
seat 3's PR #30351 (#30217) edits marketplace-install-local-plugin.ts and is in the merge queue: the dev branches code from origin/main after it merges. Seat 4's PR #30346 (same file) merged at 8589756a.Order: project file
server-seat5/dispatch-30326.md, delivered to the card thread.objectstack-fleet commentedon Nov 5, 2026
domain:server#5 · os-bill · session_01Utp6CYVV6fcAQrNTDQRvPb
os-dev-report
Card thread
session_01Utp6CZ35sjTKgyrvdkytCz· branchclaude/project-thread-fqxfr0· draft PR #30409 · head6c1d2ef22{ "issue": 30326, "status": "done", "branch": "claude/project-thread-fqxfr0", "pr": "https://github.com/objectstack-ai/objectstack/pull/30409", "session": "session_01Utp6CZ35sjTKgyrvdkytCz", "premise_still_valid": true, "summary": "Premise held on fdad1786 and 870ebce3: install-local admitted a package with no engines.protocol through assertProtocolCompat, which only warned and returned void, and all three success answers (managed, unmanaged, paired customization) said nothing. assertProtocolCompat now returns the verdict checkProtocolCompat gave (new type ProtocolCompatAdmitted) and the no-range / unparsed-range verdicts carry protocolVersion; step 1c keeps it and every success answer carries optional data.protocolCheckSkipped { reason (the handshake's own status), packageId, protocolVersion, message, + requiredRange / rangeSource for unparsed-range }, omitted when the range was checked. The warn line is unchanged. Contract stop measured and not reached: no packages/spec schema describes the install-local success answer. Card assignee untouched; PR opened as draft with no assignee, labels or review request (Part of #30326: the UI half remains).", "tests": "Red first on fdad1786 (fix reverted, pins in): 5 notice cases red (200 with no protocolCheckSkipped), 2 controls green; with the fix 43/43 in the two files. Head 4d926a74 (os-verify-lock VERDICT command-exit 0): metadata-core typecheck exit 0, cloud-connection typecheck exit 0; metadata-core test Test Files 23/23 Tests 911/911; cloud-connection test Test Files 70/70 Tests 877/877. One existing pin moved: marketplace-install-local-jobs.test.ts fixture now declares engines.protocol ^CURRENT_MAJOR (its jobs-free case pins the exact answer key set). Ablation via scripts/ablation-replace.mjs on 4d926a74: deleting the protocolCheckSkipped assignation (anchor 1 -> 0, blob 8e7fdb92 -> 5f6c1432) turns the 5 notice cases red, 38 green; restored blob == HEAD 8e7fdb92, git diff HEAD empty; no dist leg (metadata-core aliased to src in the cloud-connection vitest config, plugin imported from src).", "gates": "dispatch-gates --commands on 6c1d2ef22 (after merging origin/main 8fad7b193): 60 families, identical to the list on 4d926a74; 60 run, exit codes captured before any pipe, 60 x exit 0; --ran: 60 derived / 60 run / 0 NOT-MEASURED / 0 UNRUN. On 4d926a74: 60 x exit 0 after git fetch of fixture commit 621a4876 for check-plugin-teardown-shape --self-test (exit 3 on the shallow clone before). pnpm lint exit 0 on 4d926a74. CI check-runs on #30409: not read at report time.", "dogfood_battery": "n/a — no `!` in the PR title and no (narrowing) arm", "line_budget": "7 files, +242 / -14 vs origin/main merge base 8fad7b193; under the 3000-line class (c) threshold", "deviations": [ "The order names `Refs #30326`; os-dev.md's Definition of done names `Part of #N` for a PR that should not close its card, and the file wins on conflict, so the body says `Part of #30326` (neither closes the card).", "The order asks for `pnpm lint`; os-dev.md says the repo-wide lint is CI's run. Ran it anyway: exit 0 on 4d926a74.", "packages/cloud-connection/src/marketplace-install-local-jobs.test.ts: an existing fixture gained engines.protocol (inside the dispatched surface, tests of the install answer).", "The merge of origin/main (#30380, #30368) touched metadata-protocol, cli and spec only, so suites and typecheck were not re-run on 6c1d2ef22; gates were.", "Thread-designated branch: commits carry the model-free trailer pair per AGENTS.md." ], "files_changed": [ ".changeset/30326-install-answer-protocol-check-skipped.md", "packages/cloud-connection/src/marketplace-install-local-customization-pair-install.test.ts", "packages/cloud-connection/src/marketplace-install-local-jobs.test.ts", "packages/cloud-connection/src/marketplace-install-local-plugin.ts", "packages/cloud-connection/src/marketplace-install-local-protocol-handshake.test.ts", "packages/metadata-core/src/protocol-handshake.test.ts", "packages/metadata-core/src/protocol-handshake.ts" ], "mcp_calls": "0 — no GitHub MCP call; reads went through gh api", "api_writes": "2 — relay pr_create (POST /repos/objectstack-ai/objectstack/dispatches, run 42007198845 success, read-back 9571/9571 bytes identical, PR #30409 draft, no assignees, no labels); this os-dev-report comment via post-stamped (POST /repos/objectstack-ai/objectstack/issues/30326/comments). Plus git push of the designated branch (not REST).", "open_questions": [], "security_findings": "none", "out_of_scope_findings": [ "carrier: seat 5 · noted, not filed — POST /api/v1/packages (packages/runtime/src/domains/packages.ts, assertProtocolCompat(manifest)) still answers success with no notice for a package with no range; outside this order's surface; with the verdict now returned, the same spread there is small. Dedupe words: engines.protocol packages door notice, protocolCheckSkipped runtime packages", "carrier: seat 5 · noted, not filed — os package install prints the answer's note but not protocolCheckSkipped; the CLI's call" ] }Report taken 2026-11-05T10:02Z.
objectstack-fleet commentedon Nov 5, 2026
domain:server#5 · os-bill · session_01Utp6CYVV6fcAQrNTDQRvPb
Landing · 2026-11-05T10:10Z: server half → PR #30409 (head
6c1d2ef2), seat ACCEPT posted, ready + auto-merge enabled.Part of #30326: the card stays open for its ui half; the seat releases it at merge.objectstack-fleet commentedon Nov 5, 2026
domain:server#5 · os-bill · session_01Utp6CYVV6fcAQrNTDQRvPb
Release: 2026-11-05T10:55Z — server half landed, PR #30409 merged as
60fe44fdc(seat ACCEPT 6655279987),Part of #30326. The card goes back to the queue for its remaining half, re-laneddomain:server→domain:ui; assignee cleared.Resume-from: the ui half — the install dialog shows
data.protocolCheckSkipped.messagein plain words whenPOST /api/v1/marketplace/install-localanswers it (present only when the ADR-0087 handshake admitted the package unchecked:reasonno-range/unparsed-range,packageId,protocolVersion;requiredRange/rangeSourceforunparsed-range), and the package detail page may show the same. Nothing is owed on the server for this card. The other install door,POST /api/v1/packages, is #30412 (server, p3).objectstack-fleet commentedon Nov 5, 2026
domain:ui#5 · os-sales · session_01L6bhgVwQZbHRRM9CaXeKif
Claim: PM loop round 2
Session:
session_01L6bhgVwQZbHRRM9CaXeKifAccount:
os-salesBranch:
claude/project-thread-sukiom(card thread of this project; a thread can push only its designated branch — measured platform exception toclaude/issue-<n>-<slug>)Worktree:
objectstack-issue-30326Domain:
domain:uiSeat:
domain:ui#5File surface:
ui/packages/app-shell/src/console/marketplace/**(install result types inmarketplaceApi.ts, the detail page's Install note, the catalog's org install message, their tests) +ui/packages/app-shell/src/views/metadata-admin/PackagesPage.tsx(Setup → Packages → Import) +ui/packages/i18n/src/locales/*.ts(marketplace.*) +ui/packages/i18n/src/namespaces/studio/{en,zh}.ts(engine.packages.*) + one root.changeset/. ⛔packages/**(server lane).Container & model:
M,mode:thread,model: default — dispatch-gates --tier: no path-derived mandate,effort: highClause-②: yes
Metadata-protocol: none
Responsibility:
POST /api/v1/marketplace/install-localalready answersdata.protocolCheckSkippedwhen the ADR-0087 handshake admitted a package unchecked (PR #30409), and the Console's three install result surfaces read only the success fields, so the notice is dropped | none: the administrator does not see server logs and no client draws the field | every administrator who installs, from the Console, a package that declares noengines.protocolor a range the server cannot parseThread-read: 6656206176
Premise: holds
Serial constraints cleared: PR #30443 (this seat, #30311) edits imports and the Open app button in
MarketplacePackagePage.tsx/MarketplacePage.tsx, not the install handlers or notes: merge main if it lands first. PR #30426 (#30330) merged. #30325 and #30323 (queue, unclaimed) share these pages and serialise after this card. No in-flightdomain:uiclaim coversconsole/marketplace/**orPackagesPage.tsx.Scope: the ui half named in Release 6656206176, at the three install result surfaces. A standing protocol display on the package detail page is out (no field to read back after install); the dev reports it. Clause-②
yes (widening)for new i18n keys: the seat's TIER_DEFAULT review before the queue. Dispatch order lives in the card thread's opening message.objectstack-fleet commentedon Nov 5, 2026
domain:ui#5 · os-sales · session_01L6bhgWZ1wrAZ2ocZovnByy
os-dev-report
Card thread
session_01L6bhgWZ1wrAZ2ocZovnByy· branchclaude/project-thread-sukiom· draft PR #30460 · head1a72f696{ "issue": 30326, "status": "done", "branch": "claude/project-thread-sukiom", "pr": "https://github.com/objectstack-ai/objectstack/pull/30460", "session": "session_01L6bhgWZ1wrAZ2ocZovnByy", "premise_still_valid": true, "summary": "Premise held on b6caa141: the install door answers data.protocolCheckSkipped (measured live on app-showcase: no-range and unparsed-range shapes exactly as the dispatch's mechanism section states), and the Console's three install result surfaces read only the success fields. New console/marketplace/protocolCheckSkipped.ts (modelled on dependencyMissing.ts) draws marketplace.install.protocolCheckSkipped.noRange / .unparsedRange from the notice's facts, the server message for an unknown reason, nothing when absent; ProtocolCheckSkippedNote.tsx renders it as an amber line inside the existing result note on the package page Install (all four success branches), the catalog org install and Setup > Packages > Import. Result types gain the optional field; 2 keys in all 10 locale packs.", "tests": "On a58846c5 (head 1a72f696 is tree-identical): 4 new files Test Files 4/4, Tests 14/14 (lock VERDICT command-exit 0). pnpm --dir ui exec vitest run packages/app-shell/src/console/marketplace/ packages/app-shell/src/views/metadata-admin/PackagesPage packages/i18n/: Test Files 163/163, Tests 2016 passed 13 skipped. Ablation via scripts/ablation-replace.mjs: reader guard replaced by an unconditional return null (anchor 1 -> 0, blob 1700af14 -> 8e4eb802): 10 failed / 4 passed (the 4 CONTROL cases green); restored blob == HEAD 1700af14, git diff HEAD empty; no dist leg (tests import app-shell src). type-check @object-ui/app-shell and @object-ui/i18n exit 0.", "gates": "dispatch-gates --commands on a58846c5: 35 families, 35 x exit 0 (codes captured before any pipe); --ran: 35 derived / 35 run / 0 NOT-MEASURED / 0 UNRUN. pnpm --dir ui run check:spec-symbols exit 0. ui checks i18n-keys, i18n-drift, i18n-dead-keys, control-bytes, new-line-citations, icon-record-names, phantom-deps: exit 0 each; check:eager-locale-catalogues exit 2 PREREQUISITE NOT MET (needs a built console bundle): NOT MEASURED locally, CI's reading. eslint on 6 changed sources: 0 errors. CI check-runs on #30460: not read at report time.", "dogfood_battery": "n/a — no `!` in the PR title and no (narrowing) arm", "line_budget": "21 files, +637 / -4 vs merge base b6caa141 (393 of the added lines are the 4 test files); under the 3000-line threshold", "deviations": [ "Suggested route named engine.packages.* rows in studio en/zh for Import; PackagesPage already draws DEPENDENCY_MISSING through the shared marketplace hook (marketplace.* keys, 10 locales, same language source as useMetadataLocale), so Import reuses useProtocolCheckSkippedText and no engine.packages.* row is added.", "Before/after zh 1440 shots cover Setup > Packages > Import only: the rig has no cloud marketplace (cloudUrl empty), so the package page and the org catalog cannot install from a catalog; both are pinned by tests on the wire shape the live server answered. Before = reader held to null via ablation-replace --hold, restored, blob == HEAD.", "Evidence commit 136df32a holds the PNGs, removed by 1a72f696; the PR body links blob URLs at 136df32a.", "Thread-designated branch: commits carry the model-free trailer pair per AGENTS.md." ], "files_changed": [ ".changeset/30326-install-result-protocol-check-skipped.md", "ui/packages/app-shell/src/console/marketplace/MarketplacePackagePage.tsx", "ui/packages/app-shell/src/console/marketplace/MarketplacePage.tsx", "ui/packages/app-shell/src/console/marketplace/ProtocolCheckSkippedNote.tsx", "ui/packages/app-shell/src/console/marketplace/__tests__/MarketplacePackagePage.protocolCheckSkipped-30326.test.tsx", "ui/packages/app-shell/src/console/marketplace/__tests__/MarketplacePage.orgInstallProtocolCheckSkipped-30326.test.tsx", "ui/packages/app-shell/src/console/marketplace/__tests__/protocolCheckSkipped-30326.test.ts", "ui/packages/app-shell/src/console/marketplace/marketplaceApi.ts", "ui/packages/app-shell/src/console/marketplace/protocolCheckSkipped.ts", "ui/packages/app-shell/src/views/metadata-admin/PackagesPage.importProtocolCheckSkipped-30326.test.tsx", "ui/packages/app-shell/src/views/metadata-admin/PackagesPage.tsx", "ui/packages/i18n/src/locales/{ar,de,en,es,fr,ja,ko,pt,ru,zh}.ts" ], "mcp_calls": "2 — mcp__github__issue_read (get_comments on #30326), mcp__github__pull_request_read (get on #30442, body format); reads only, no MCP write", "api_writes": "2 — relay pr_create (POST /repos/objectstack-ai/objectstack/dispatches, run 42026770457 success, read-back 9378/9378 bytes identical, PR #30460 draft, no assignees, no labels); this os-dev-report comment via post-stamped (POST /repos/objectstack-ai/objectstack/issues/30326/comments). Plus git push of the designated branch (not REST).", "open_questions": [], "security_findings": "none", "out_of_scope_findings": [ "carrier: claim (seat 5) · noted, not filed — a standing protocol display on the package detail page: no read serves protocolCheckSkipped back after install (GET install-local listing carries no such field), so it would need a server field first. Dedupe words: package detail protocol range display, installed package protocolCheckSkipped listing", "carrier: #30412 · noted, not filed — POST /api/v1/packages answers no notice; when it does, PackagesPage has no caller of that door for install, nothing owed here" ] }Report taken 2026-11-05T12:25Z.