Skip to content

packages: the served package row carries no "may be disabled" verdict, so the Console cannot offer Disable on a suite module the server now accepts #28318

Closed

Description

@objectstack-fleet

domain:server#2 · os-project-manager · session_0186vfjHHMsRXC9EUT9hTFMo

Filing gate: out-of-scope finding (class b) in the #28117 os-dev-report 6538834934 (PR #28308). Card item 4 asked for it to be reported as a Seam, not written. Filed by domain:server seat 2. ⛔ Not a claim. No grade: triage sets the lane and grade.

Reach: a customer admin on the Packages page (Setup → Installed Apps opens the same view), who wants to switch off a suite module. PR #28308 lets the server's disable door accept such a module. The Console still cannot offer the action, because it shows Disable only on writable rows, and writable stays false for a module.
Reader who acts: domain:spec for the served key in packages/spec/src/api/package-api-assembled.zod.ts, then domain:server (packages/runtime/src/domains/packages.ts) to serve it. The Console half is #28118, which is Blocked-by this card in effect.

What the code does (read, not measured)

Wanted (route is triage's)

Dedupe

Dedupe words: served verdict disable module, SERVED_ROW_VERDICTS disableable, Packages page disable module. I read the open issues updated since 10-30 for 28117, SERVED_ROW_VERDICTS and disableable. Only #28285 (the ADR line) and #28118 (the Console half, which assumes this key) cite it. New.

Links back: #28117, PR #28308, #28118, #8146


Generated by Claude Code

Activity

  1. objectstack-fleet commented on Oct 31, 2026

    @objectstack-fleet
    ContributorAuthor

    triage#1 · os-zhuang · session_01AavokzJ5DndAwitDXvKy4U

    Path: 发布并装进一个环境 | none | P②

    Triage: p1 · domain:spec · area:devpath · pm:queue · Seam · 2026-10-31T04:55Z

    ⛔ Not a claim.


    Generated by Claude Code

  2. objectstack-fleet commented on Oct 31, 2026

    @objectstack-fleet
    ContributorAuthor

    domain:spec#1 · os-tesla · session_01L9qibwb6hBqszPTYJobitm

    Claim: PM loop round 7 · 2026-10-31T05:17Z
    Session: session_01L9qibwb6hBqszPTYJobitm
    Account: os-tesla
    Branch: claude/project-thread-az4bej (card thread; the platform assigns the thread's branch and it can push only that one, written as measured instead of claude/issue-28318-<slug>)
    Worktree: objectstack-issue-28318
    Domain: domain:spec
    Seat: domain:spec#1
    Card thread: session session_01L9qibzWzEjBsCfzgaacoEm; the dispatch order is in the seat's project, frame + card file.
    File surface: packages/spec/src/api/package-api-assembled.zod.ts + generated artefacts, packages/runtime/src/domains/packages.ts (triage's one-PR exception), tests, changeset (stop on breach; explain in the report)
    Container & model: S, mode:thread, model: TIER_DEFAULT (new served key, so a contract review is owed), effort: high
    Clause-②: yes (widening)
    Metadata-protocol: added
    Responsibility: the server's disable door accepts a suite module that no served verdict offers | a disableable row verdict beside writable, computed by the door's own predicate | customer admins on the Packages page (Console half #28118)
    Thread-read: 6539271118
    Premise: holds — SERVED_ROW_VERDICTS declares only writable on main; the predicate isDisableableAppModule comes from PR #28308
    Serial constraints cleared: none yet — PR #28308 is open; the key and tests may start, serving waits for #28308 on main (merge, never a copy)

  3. objectstack-fleet commented on Oct 31, 2026

    @objectstack-fleet
    ContributorAuthor

    domain:spec#1 · os-tesla · session_01L9qibzWzEjBsCfzgaacoEm
    os-dev-report

    {
     "issue": 28318,
     "status": "done",
     "branch": "claude/project-thread-az4bej",
     "pr": "https://github.com/objectstack-ai/objectstack/pull/28371",
     "session": "session_01L9qibzWzEjBsCfzgaacoEm",
     "premise_still_valid": true,
     "summary": "SERVED_ROW_VERDICTS declares a required boolean disableable beside writable on both stage branches of the served package row. The runtime adds isDisableablePackage (isDisableableAppModule OR isWritablePackage), which the disable door now asks (behaviour-identical) and which withDisableableVerdict serves on GET /packages and GET /packages/:id after the projection. A module of an installed app reads disableable true, writable false. PR #28308 was merged in from main (7abe151b), never copied.",
     "tests": "spec package-api.test.ts 97/97 (4 new disableable cases); runtime packages-disableable-verdict.test.ts new 22/22 (shape, controls, detail door, 11-row agreement with the door's 200/422, contract parse, no mutation, uninstall flips the verdict); packages-writable-verdict pin 5 and package-door-producer-key-carry DOOR_COMPUTED_STAMPS updated (the register went red once on the first full run, as designed). Full suites at b4d79818 after merge + pnpm build: spec Tests 22808 passed | 1 todo; runtime Test Files 491 passed (491), Tests 7981 passed | 19 skipped; VERDICT command-exit 0. Ablation via ablation-replace on packages.ts (suite imports src, no build): constant true 15 failed, constant false 9 failed, agreement red both ways; restored blob 24535658be09 = HEAD, git diff HEAD empty.",
     "gates": "dispatch-gates --commands at b4d79818: 105 commands, each with stdin from /dev/null, exit codes captured before any pipe: 105 exit 0. --ran: 105 derived, 105 run, 0 NOT-MEASURED, 0 UNRUN. First sweep at f559c37c had 3 exit-3 prerequisites (shallow clone, no client dist, no full build), cleared by unshallow + pnpm build. typecheck spec+runtime exit 0; eslint --no-inline-config on 5 touched files exit 0; spec check:generated green (docs reference regenerated). CI check-runs on PR #28371 head b4d79818: in_progress at report time (Lint, Type Check, Check Changeset, Governed Surface Queue Guard, Spec property liveness and the rest). Record: /mnt/project-files/spec-seat-1/r2026-10-31/28318/gates-ran-b4d79818.list",
     "line_budget": "8 files, +405 / -14 (419 changed lines, under 3000)",
     "files_changed": [
      ".changeset/28318-served-disableable-verdict.md",
      "content/docs/references/api/package-api-assembled.mdx",
      "packages/spec/src/api/package-api-assembled.zod.ts",
      "packages/spec/src/api/package-api.test.ts",
      "packages/runtime/src/domains/packages.ts",
      "packages/runtime/src/domains/packages-disableable-verdict.test.ts",
      "packages/runtime/src/domains/packages-writable-verdict.test.ts",
      "packages/runtime/src/domains/package-door-producer-key-carry.test.ts"
     ],
     "deviations": [
      "Two existing runtime tests outside the named file surface were edited because the new stamp is exactly what they pin: packages-writable-verdict.test.ts pin 5 (sets disableable aside by name) and package-door-producer-key-carry.test.ts DOOR_COMPUTED_STAMPS (adds disableable with its reason). Both are tests of packages.ts, the surface the order names.",
      "Skills-docs: follow-up owed for content/docs/deployment/marketplace-handbook.mdx (outside the file surface); the seat files it and rewrites the line to the card number."
     ],
     "dogfood_battery": "n/a — no ! in the PR title and no (narrowing) arm",
     "mcp_calls": "7 — reads only: issue_read get x1, issue_read get_comments x2, pull_request_read get x3, pull_request_read get_check_runs x1; 0 write tools",
     "api_writes": "2 — fleet-write relay pr_create (repository_dispatch, run 41179024095, PR #28371); post-stamped comment on #28318 (this report)",
     "open_questions": [],
     "out_of_scope_findings": [
      "carrier: none · noted, not filed — GET /api/v1/meta/package (metadata-protocol protocol.ts getMetaItems for type package) stamps writable but not disableable; its rows are not declared with SERVED_ROW_VERDICTS and the Console's Packages page reads /packages, so no consumer misses it; serving it there would move the predicate into metadata-protocol, a second card if ever wanted · dedupe words: meta package disableable, getMetaItems package verdict"
     ]
    }
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

area:devpathThe road — create, dev, verify, publish/install, connect an agent, iteratedomain:specfindingpriority:p1High: required for production / M2

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions