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
Commit a31ae8a
Browse filesBrowse the repository at this point in the historyBrowse files
fix(verify, plugin-dev, plugin-hono-server): runtime strings state each decision in words instead of a tracker number (stage 4)
The verify RLS runner's report, persona provisioning errors and probe
metadata, the verify harness's organizations remedy, the dev plugin's
tenancy refusals and no-auth warning, and the Hono server's no-API warning
pointed at tracker numbers. The numbers go; where a sentence leaned on one,
it now says the decision in words. Two pins that asserted a number now
assert the decision sentence. The prose-id ledger is recomputed with
--census-ledger: the four rows leave, nothing else moves.
Claude-Session: https://claude.ai/code/session_01VvcEokUG1tvVxkceYfR5XB
Co-authored-by: Claude <noreply@anthropic.com>
@@ -550,7 +550,7 @@ export async function provisionRlsPositionPersona(
550
550
thrownewError(
551
551
`verify: cannot provision the RLS position persona for '${position}' — no ObjectQL engine on `+
552
552
'this stack. Without the position assignment the app\'s position-gated policies are not '+
553
-
'applicable to the persona, so the app-authored narrowing is unreachable (#7978).',
553
+
'applicable to the persona, so the app-authored narrowing is unreachable.',
554
554
);
555
555
}
556
556
constsysCtx={context: {isSystem: true}};
@@ -572,7 +572,7 @@ export async function provisionRlsPositionPersona(
572
572
business_unit_id: null,
573
573
organization_id: null,
574
574
granted_by: null,
575
-
reason: `Ephemeral persona minted by \`objectstack verify --rls\`: holds '${position}' and nothing else, so the app's own position-gated RLS narrowing is exercised (#7978).`,
575
+
reason: `Ephemeral persona minted by \`objectstack verify --rls\`: holds '${position}' and nothing else, so the app's own position-gated RLS narrowing is exercised.`,
576
576
},
577
577
sysCtx,
578
578
);
@@ -765,7 +765,7 @@ async function probeAsPersona(
765
765
object,
766
766
status: 'rls-hole',
767
767
target: origin,
768
-
detail: `the probe cannot read it (GET ${bRead.status}) yet MUTATED it by id (PATCH ${bWrite.status}) — by-id write bypassed RLS (#1994 class)${via}`,
768
+
detail: `the probe cannot read it (GET ${bRead.status}) yet MUTATED it by id (PATCH ${bWrite.status}) — by-id write bypassed RLS, and a caller that cannot read a record must not be able to write it${via}`,
769
769
});
770
770
}else{
771
771
results.push({
@@ -905,7 +905,7 @@ function summaryLine(s: RlsSummary): string {
@@ -940,7 +940,7 @@ export function formatRlsReport(report: RlsReport): string {
940
940
// would claim N× the reach the fan-out actually has.
941
941
constcov=report.positionCoverage;
942
942
lines.push(
943
-
`\n ── position personas (#7978) — ${cov.ran.length} of ${cov.declared.length} declared position(s) probed`,
943
+
`\n ── position personas (each holds one declared position and nothing else) — ${cov.ran.length} of ${cov.declared.length} declared position(s) probed`,
0 commit comments