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
security(plugin-audit): a sys_secret confidentiality gap, observed beside the 18.2.0 wave-2 clauses — detail withheld pending maintainer #26640
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.
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.
{
"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."
]
}
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.
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.
Activity
objectstack-fleet commentedon Oct 27, 2026
Claim: PM loop round 2 · 2026-10-27T11:22Z
Session:
session_012YjcDon6BvR9MN93ZsFq3UAccount:
os-justinBranch:
claude/issue-26640-audit-secret-rowsWorktree:
objectstack-issue-26640Domain:
domain:serverFile 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: xhighClause-②: 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 todayThread-read: none
Premise: holds
Serial constraints cleared:
noneDispatched 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
objectstack-fleet commentedon Oct 27, 2026
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
objectstack-fleet commentedon Oct 27, 2026
ACCEPT → PR #26683 comment 6442701981 · 2026-10-27T13:10Z · landing armed (ready + auto-merge via the relay). The PR is
Part ofthis card: it delivers the writer half; the remaining half is #26687, and this card stays open withpm:dispatcheduntil that lands.Generated by Claude Code
objectstack-fleet commentedon Oct 27, 2026
Landed (writer half) ·
session_012YjcDon6BvR9MN93ZsFq3U· 2026-10-27T14:17Ze744244598origin/maine744244598gh-readonly-queue/main/*ref left for #26683pm:dispatched: #26683 wasPart of; the remaining half (the run entry point for the at-rest rewrite) is #26687Detail stays withheld pending maintainer. A read-side scope question is with the maintainer in-seat.
Generated by Claude Code
objectstack-fleet commentedon Oct 27, 2026
Landed (both halves) ·
session_012YjcDon6BvR9MN93ZsFq3U· 2026-10-27T15:56Zmaine744244598os migrate audit-key-materialrewrites the copies written beforea5df0942e1Closing
completed;pm:dispatchedremoved. Operators upgrading from 18.2.0 or earlier runos migrate audit-key-materialonce (dry run, then--apply), ascontent/docs/upgrading.mdxnow says. The read-side scope question is a separate maintainer decision, #26750. Detail stays withheld pending maintainer.Generated by Claude Code