Skip to content

security(plugin-audit): a sys_secret confidentiality gap, observed beside the 18.2.0 wave-2 clauses — detail withheld pending maintainer #26640

Closed

Description

@objectstack-fleet
  • Area: the compliance ledger (sys_audit_log, plugin-audit) and the secret store (sys_secret).
  • Observed beside the 18.2.0 wave-2 clauses, as observation 3 of the wave's unfiled list on [sweep] v18.2.0 release test sweep #25807. It was re-verified twice, on two fresh showcase boots at fb91e979.
  • Class: authorization. ⛔ The reproduction and the mechanism are not published (RUNNER rule 2, the maintainer disclosure ruling). Detail withheld pending maintainer. The full report went to the dispatching session privately.
  • reach: withheld, same class.

QA-source: #26639 · observation 3


Generated by Claude Code

Activity

  1. objectstack-fleet commented on Oct 27, 2026

    @objectstack-fleet
    ContributorAuthor

    Claim: PM loop round 2 · 2026-10-27T11:22Z
    Session: session_012YjcDon6BvR9MN93ZsFq3U
    Account: os-justin
    Branch: claude/issue-26640-audit-secret-rows
    Worktree: objectstack-issue-26640
    Domain: domain:server
    File surface: packages/plugins/plugin-audit/src/** and its tests; packages/platform-objects/src/system/sys-secret.object.ts (comments only) (stop on breach; explain in the report)
    Container & model: M, mode:subagent (disclosure-discipline card: the detail stays in-seat), model: default (dispatch-gates --tier: no path-derived mandate), effort: xhigh
    Clause-②: no
    Metadata-protocol: none
    Responsibility: the platform's own compliance-ledger writer | none — the ledger writer is the one door | any holder of the finding's precondition; stock deployments today
    Thread-read: none
    Premise: holds
    Serial constraints cleared: none

    Dispatched directly on the maintainer's word in the wave-2 session (2026-10-27), verbatim: 「如果有安全问题不能写issue的,直接派卡修复」 and 「使用 pm-dispatch 技能 派卡修复」 — recorded on #25807, and carried into the checklist-test skill by #26567. Detail stays withheld pending maintainer: the card, the PR and every comment carry no reproduction.


    Generated by Claude Code

  2. objectstack-fleet commented on Oct 27, 2026

    @objectstack-fleet
    ContributorAuthor

    os-dev-report

    {
      "issue": 26640,
      "status": "done",
      "branch": "claude/issue-26640-audit-secret-rows",
      "pr": "https://github.com/objectstack-ai/objectstack/pull/26683",
      "session": "session_012YjcDon6BvR9MN93ZsFq3U",
      "premise_still_valid": true,
      "summary": "The audit writer's ledger view now omits a closed, writer-held list of encrypted key-material columns (secret store and both settings holders) from every sys_audit_log / sys_activity copy, as an internal field is omitted; each create/update/delete row is still written. An at-rest rewrite of copies already written ships as exported planners and runners (hot tables and archive driver) driving the mail-log rewrite's shared runner and stores, so no new write call site is added. The CLI entry point for that rewrite is outside this card's file surface and is named below as the remaining half. Disclosure-level detail is returned to the dispatching seat, not posted.",
      "files_changed": [
        ".changeset/26640-ledger-key-material-copies.md",
        "packages/platform-objects/src/system/sys-secret.object.ts (comment only)",
        "packages/plugins/plugin-audit/src/key-material-copy.ts (new)",
        "packages/plugins/plugin-audit/src/key-material-copy-migration.ts (new)",
        "packages/plugins/plugin-audit/src/key-material-copy-migration.test.ts (new)",
        "packages/plugins/plugin-audit/src/audit-writers.ts",
        "packages/plugins/plugin-audit/src/audit-internal-field-omission.test.ts",
        "packages/plugins/plugin-audit/src/mail-log-body-migration.ts (runner lifted into exported functions, behaviour unchanged)",
        "packages/plugins/plugin-audit/src/index.ts",
        "packages/plugins/plugin-audit/vitest.config.ts (one anchored alias)"
      ],
      "tests": "head c38dcc7257: pnpm --filter @objectstack/plugin-audit test -> Test Files 65 passed (65), Tests 1047 passed (1047), lock VERDICT command-exit 0; typecheck exit 0 (test layer: check:test-typecheck OK, 0 errors). platform-objects typecheck + test exit 0, Test Files 96/96, Tests 1361/1361 (read at cd0e7a5d7d, comment-only edit). Regression pin: the new census block in audit-internal-field-omission.test.ts plus key-material-copy-migration.test.ts, 54/54 on the fix (21dca99112). Ablation through scripts/ablation-replace.mjs (the writer's new call replaced by a no-op; anchor 1->0; blob ad8f76be13d4->6ee8dfd95a08) gives 6 failed / 37 passed (43), exactly the 6 new census cases; restored, blob == HEAD, git diff HEAD empty. Source-resolved import, so no build stood between the mutation and the run. One-off composition check (real settings producer + crypto provider + engine + writer; temporary file, deleted, never committed): 0 minted encrypted values at rest on the fix vs all at rest with the call ablated.",
      "gates": "dispatch-gates --repo objectstack-ai/objectstack --commands at c38dcc7257: 64 commands, all run, every one exit 0 (recorded as CMD :: exit N); --ran: 64 derived, 64 run, 0 NOT-MEASURED, 0 UNRUN (DERIVED zero). An earlier pass before the final commit was red on check-tenant-audit-census (exit 1, the first runner added 2 write sites) and check:test-source-alias (exit 1, missing /system alias); both fixed by c38dcc7257. CI on PR head c38dcc7257 at report time: Governed Surface Queue Guard success; 18.x upgrade harness and Packed-tarball smoke skipped; Check Changeset, Check PR Size, Lint (7 lanes), Type Check (4 lanes), PR-body guards, filter, Flag docs: in_progress.",
      "dogfood_battery": "n/a: no ! in the PR title and Clause-2 is no with no (narrowing) arm",
      "mcp_calls": "0",
      "api_writes": "2: relay dispatches (POST /repos/objectstack-ai/objectstack/dispatches): pr_create (PR 26683 plus its assignees leg) and this os-dev-report comment on 26640. git push is not counted.",
      "deviations": [
        "vitest.config.ts sits at the package root, outside src/**: one anchored alias, the fix check:test-source-alias prescribes.",
        "mail-log-body-migration.ts was restructured (within src/**) so the new rewrite adds no write call site. Adding one would move the tenant-audit census, whose committed pages live outside the file surface.",
        "The os migrate entry point for the at-rest rewrite is not delivered: it lives in packages/cli, outside the file surface.",
        "origin/main was 2 commits ahead (skills evals and PM scripts only). The two stale gate scripts are not in this card's 64 commands, so no merge was made.",
        "The PR body footer uses the AGENTS.md session-URL form, not the harness's attribution line (AGENTS.md takes precedence).",
        "The PR body says Fixes 26640 as dispatched, although the entry-point half remains (see open questions).",
        "test:repo was not run locally (CI owns it). check-platform-checklist --changed-from was not run: no export was renamed or deleted.",
        "The composition check ran as a temporary test file under packages/services/service-settings/src. It was deleted and never committed.",
        "A kill of my own detached verification chain was refused by the permission classifier. The chain ran to completion instead; no reading was affected."
      ],
      "open_questions": [
        "Two, at disclosure level, returned to the dispatching seat in-seat (the maintainer's disclosure ruling)."
      ],
      "out_of_scope_findings": [
        "carrier: PM seat. Remaining half of this card, filed as its sub-issue: an os migrate entry point in packages/cli driving migrateKeyMaterialCopies / migrateArchivedKeyMaterialCopies, plus the one-shot family pin and a dogfood case, as the mail-log rewrite's entry point does. Dedupe words: key-material, ledger copy, at-rest rewrite, os migrate."
      ]
    }

    Generated by Claude Code

  3. objectstack-fleet commented on Oct 27, 2026

    @objectstack-fleet
    ContributorAuthor

    ACCEPT → PR #26683 comment 6442701981 · 2026-10-27T13:10Z · landing armed (ready + auto-merge via the relay). The PR is Part of this card: it delivers the writer half; the remaining half is #26687, and this card stays open with pm:dispatched until that lands.


    Generated by Claude Code

  4. objectstack-fleet commented on Oct 27, 2026

    @objectstack-fleet
    ContributorAuthor

    Landed (writer half) · session_012YjcDon6BvR9MN93ZsFq3U · 2026-10-27T14:17Z

    probe reading
    PR #26683 merged through the merge queue, merge commit e744244598
    origin/main contains e744244598
    queue branch no gh-readonly-queue/main/* ref left for #26683
    this card stays OPEN with pm:dispatched: #26683 was Part of; the remaining half (the run entry point for the at-rest rewrite) is #26687

    Detail stays withheld pending maintainer. A read-side scope question is with the maintainer in-seat.


    Generated by Claude Code

  5. objectstack-fleet commented on Oct 27, 2026

    @objectstack-fleet
    ContributorAuthor

    Landed (both halves) · session_012YjcDon6BvR9MN93ZsFq3U · 2026-10-27T15:56Z

    half PR merge commit on main
    the ledger writer keeps no copy of the listed columns #26683 e744244598
    os migrate audit-key-material rewrites the copies written before #26772 (closed #26687) a5df0942e1

    Closing completed; pm:dispatched removed. Operators upgrading from 18.2.0 or earlier run os migrate audit-key-material once (dry run, then --apply), as content/docs/upgrading.mdx now says. The read-side scope question is a separate maintainer decision, #26750. Detail stays withheld pending maintainer.


    Generated by Claude Code

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

Metadata

Metadata

Assignees

Labels

bugSomething isn't workingdomain:serverDomain lane — seat card indexed by label:pm:seatpriority:p1High: required for production / M2security

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions