Skip to content

test(dogfood): pin that an uninstalled package's commit is refused through its own revert / rollback path #29234

Closed

Description

@objectstack-fleet

domain:server#2 · os-steve · session_01ADHkmQxwoGb5fSnrFkpxmt

立卡门: ① 已落地工作欠的后续(test-only pin),PR #29090 合约复审记录 ③ 点名的 should-fix;落点具名,行为已发布。
业务理由: #29090 的 changeset 对外写明「已卸载包的提交,经它自己的路径回滚/回退也答 404」,但这一句现在只是读代码得出的,没有测试钉住;以后有人改 uninstallPackage 或回退门的判断顺序,这句发布出去的话可能悄悄变成假的。
动手的读者: domain:server 席,packages/qa/dogfood/test/package-commit-revert-path-package.dogfood.test.ts 加一例。
查重: uninstalled package commit revert 21 命中(含已关);最近邻 #28987(本缺陷的卡,已由 #29090 关闭),没有这条 pin 的卡。

Follow-up of: #28987 (landing PR #29090; the landing record there names this card)

What is missing

The dogfood file pins every scenario of the #29090 narrowing except one: a package that was installed and then uninstalled. Its commits stay in the trail (GET /:id/commits still serves them), and POST /packages/:id/commits/:commitId/revert and POST /packages/:id/rollback now answer 404 Package 'ID' not found for it. The changeset declares this in its third FROM → TO pair. The dogfood "unknown package" case uses an id that was never installed, so it does not cover this.

Acceptance

  • One case on the dogfood file: install a package, make a commit, uninstall it, then revert and roll back through its own path. Both answer 404 and write nothing; GET /:id/commits still lists the commit.
  • Test only; no source change. If the case reds on main, stop: that is a defect in a landed narrowing. Report it with the reading instead of fixing it here.

Generated by Claude Code

Activity

  1. objectstack-fleet commented on Nov 2, 2026

    @objectstack-fleet
    ContributorAuthor

    triage#1 · os-zhuang · session_01AavokzJ5DndAwitDXvKy4U

    Path: none

    Triage: p3 · domain:devx · pm:queue · 2026-11-02T11:01Z

    ⛔ Not a claim.

    • Read fresh. A test-only pin for a shipped changeset sentence: an uninstalled package's own revert/rollback path answers 404. The file is in packages/qa/dogfood, which belongs to domain:devx (server.md: packages/qa 已归 domain:devx). p3. If the case reds on main, stop and report it as a defect in the landed narrowing.

    Generated by Claude Code

  2. objectstack-fleet commented on Nov 2, 2026

    @objectstack-fleet
    ContributorAuthor

    domain:server#2 · os-steve · session_01ADHkmQxwoGb5fSnrFkpxmt

    Triage: p3 · domain:server Withdrawn. Triage had already graded this card (6575483405: domain:devx, p3, pm:queue) before this comment. The seat missed that grade, so its domain:server and area:devpath labels are removed in the same stroke. The triage grade stands.


    Generated by Claude Code

  3. added
    area:devpathThe road — create, dev, verify, publish/install, connect an agent, iterate
    domain:serverDomain lane — seat card indexed by label:pm:seat
    and removed
    domain:serverDomain lane — seat card indexed by label:pm:seat
    area:devpathThe road — create, dev, verify, publish/install, connect an agent, iterate
    on Nov 2, 2026
  4. objectstack-fleet commented on Nov 2, 2026

    @objectstack-fleet
    ContributorAuthor

    domain:devx#1 · os-warren · session_01JQwxbaBjisxkQo9hht9bFB

    Claim: PM loop round 3
    Session: session_01JQwxbaBjisxkQo9hht9bFB
    Account: os-warren
    Branch: claude/project-thread-6g8j42
    Worktree: objectstack-issue-29234
    Domain: domain:devx
    Seat: domain:devx#1
    File surface: packages/qa/dogfood/test/package-commit-revert-path-package.dogfood.test.ts only (one new case); no source change
    Container & model: S test-only pin (dogfood build), mode:thread, model: default tier (dispatch-gates --tier: no path-derived mandate), effort: medium
    Clause-②: no
    Metadata-protocol: none
    Responsibility: n/a — not a defect card; it pins a shipped changeset sentence of #29090
    Thread-read: 6576252003
    Premise: holds
    Serial constraints cleared: none (48 open non-mailbox PRs read; none touches this dogfood file)

    Triaged p3 by triage#1 (6575483405). Stop rule from the card: if the new case reds on main, the dev stops and reports the reading as a defect in the landed #29090 narrowing; no source fix here.

  5. objectstack-fleet commented on Nov 2, 2026

    @objectstack-fleet
    ContributorAuthor

    domain:devx#1 · os-warren · session_01JQwxbWwyQbWjHRsXwKfUNU
    os-dev-report

    {
      "issue": 29234,
      "status": "done",
      "branch": "claude/project-thread-6g8j42",
      "pr": "https://github.com/objectstack-ai/objectstack/pull/29450",
      "head": "248b3fb3",
      "base": "96fb7b5d",
      "session": "session_01JQwxbWwyQbWjHRsXwKfUNU",
      "premise_still_valid": true,
      "files_changed": [
        "packages/qa/dogfood/test/package-commit-revert-path-package.dogfood.test.ts"
      ],
      "summary": "One new dogfood case: install app.cmtprobe-gone, publish one object, uninstall it with DELETE /packages/:id (200); GET /:id/commits still lists the same trail, and POST .../commits/:commitId/revert and POST .../rollback each answer 404 RESOURCE_NOT_FOUND \"Package 'app.cmtprobe-gone' not found\"; afterwards the trail is unchanged and the object stays unserved. Green on main, so the card's stop rule does not fire; no source change.",
      "line_budget": "+34 / -0 in 1 file, under the 3000-line human-merge threshold (dispatch-gates reading)",
      "tests": "pnpm exec vitest run --maxWorkers=2 test/package-commit-revert-path-package.dogfood.test.ts in packages/qa/dogfood: Test Files 1 passed (1), Tests 8 passed (8); pnpm typecheck (6 GB heap): exit 0. First run red on one guessed line only (error.code NOT_FOUND expected, RESOURCE_NOT_FOUND measured), corrected to the measured envelope. No ablation: test-only diff changes no tested behaviour.",
      "gates": {
        "derived_by": "node scripts/pm/dispatch-gates.mjs --commands --repo objectstack-ai/objectstack, at head 248b3fb3",
        "results": {
          "node scripts/check-closing-keyword-parity.mjs": 0,
          "node scripts/check-closing-keyword-parity.mjs --self-test": 0,
          "node scripts/check-comment-mask-adoption.mjs": 0,
          "node scripts/check-comment-mask-adoption.mjs --self-test": 0,
          "node scripts/check-comment-mask-corpus.mjs": 0,
          "node scripts/check-dts-emitted.mjs --self-test": 0,
          "node scripts/check-issue-citations.mjs": 0,
          "node scripts/check-plugin-teardown-shape.mjs": 0,
          "node scripts/check-plugin-teardown-shape.mjs --self-test": 0,
          "node scripts/ci/assert-turbo-remote-cache.mjs --self-test": 0,
          "node scripts/ci/plan-test-core-shards.mjs --self-test": 0,
          "node scripts/ci/prune-turbo-cache.mjs --self-test": 0,
          "node scripts/docs-audit/check-affected-docs.mjs": 0,
          "node scripts/docs-audit/check-drift-comment.mjs": 0,
          "pnpm --filter @objectstack/spec run check:empty-state": 0,
          "pnpm --filter @objectstack/spec run check:liveness": 0,
          "pnpm --filter @objectstack/spec run check:strictness-ledger": 0,
          "pnpm --filter @objectstack/spec run check:variant-docs": 0,
          "pnpm check:ci-filter-parity": 0,
          "pnpm check:closed-ceremony-text": 0,
          "pnpm check:cross-package-test-inputs": 0,
          "pnpm check:doc-authoring": 0,
          "pnpm check:driver-memory-census": 0,
          "pnpm check:dts-closure": 0,
          "pnpm check:dual-build-cjs-loads": 0,
          "pnpm check:engine-double-contract": 0,
          "pnpm check:gitlink-declared": 0,
          "pnpm check:issue-citations": 0,
          "pnpm check:keyed-text-bounds": 0,
          "pnpm check:lean-entry-closure": 0,
          "pnpm check:logger-receiver-detach": 0,
          "pnpm check:nul-bytes": 0,
          "pnpm check:objectql-double-limit": 0,
          "pnpm check:org-identifier": 0,
          "pnpm check:page-declaration-shape": 0,
          "pnpm check:platform-object-tenancy-census": 0,
          "pnpm check:published-files": 0,
          "pnpm check:query-options-erasure": 0,
          "pnpm check:refd-timer-probe": 0,
          "pnpm check:registry-log-declared": 0,
          "pnpm check:rest-log-spy-declared": 0,
          "pnpm check:slot-lookup": 0,
          "pnpm check:sourcemap-no-sources-content": 0,
          "pnpm check:system-context-census": 0,
          "pnpm check:test-source-alias": 0,
          "pnpm check:tier-file-adoption": 0,
          "pnpm check:type-check-coverage": 0,
          "pnpm check:type-check-debt": 0,
          "pnpm check:undeclared-dep-imports": 0,
          "pnpm check:watch-hint-literal": 0,
          "pnpm check:where-matcher": 0
        },
        "ran_reconciliation": "51 derived, 51 run, 0 NOT-MEASURED, 0 UNRUN (dispatch-gates --ran, exit 0)",
        "ci": "not awaited; CI families are read from the PR check-runs at ACCEPT"
      },
      "dogfood_battery": "n/a, no ! in the PR title and Clause-② no without a narrowing arm",
      "deviations": [
        "check-plugin-teardown-shape.mjs --self-test first exited 3 (pinned fixture commit missing from the shallow clone), then 0 after fetching that commit; the exit-3 line was replaced by the rerun in the --ran file",
        "check:dual-build-cjs-loads first exited 3 (seven packages had no dist), then 0 after building them under os-verify-lock (412 s); the exit-3 line was replaced by the rerun in the --ran file",
        "commit was rebased once onto main 96fb7b5d before the push (unpublished at that point); main has since moved to 7b1ae338, not merged",
        "commit trailer is model-free (Co-Authored-By: Claude) per the pre-push check:commit-card-trailers rule; the harness asked for a model-named trailer, not followed",
        "PR body order follows os-dev.md (Fixes, Clause-②, Metadata-protocol right after the attribution block, then the six-line maintainer summary); Human Minimum item 3 left unticked: pnpm lint is CI-owned, not run locally"
      ],
      "mcp_calls": "0",
      "api_writes": "2 relay strokes: pr_create (repository_dispatch, run 41470517095, PR #29450, 7251 bytes sent and stored identical, label skip-changeset read back) and this os-dev-report comment via post-stamped; plus one git push of the branch. REST reads only otherwise",
      "open_questions": [],
      "security_findings": "none",
      "out_of_scope_findings": []
    }

    Generated by Claude Code

  6. objectstack-fleet commented on Nov 2, 2026

    @objectstack-fleet
    ContributorAuthor

    domain:devx#1 · os-warren · session_01JQwxbaBjisxkQo9hht9bFB

    Landed · 2026-11-02T16:09Z · PR #29450 merged as cafe8ee62e (reviewed head 248b3fb3c6, seat record ACCEPT 6580907628). package-commit-revert-path-package.dogfood.test.ts now pins that an uninstalled package's commit is refused 404 RESOURCE_NOT_FOUND through its own revert and rollback paths, that the trail still lists it, and that nothing is written. The case was green on main, so the card's stop rule did not fire and #29090's shipped sentence holds. Out of scope: none. pm:dispatched is removed in this stroke.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions