@@ -49,8 +49,8 @@ import type {
4949 ResumeFailureReport ,
5050} from '@objectstack/spec/contracts' ;
5151// [#7135] The full `resolveAuthzContext` envelope — what `IApprovalService`
52- // declares for every one of these context parameters since #6523 (the #6206
53- // ruling: enforcement adjudicates on the whole envelope, never a per-site
52+ // declares for every one of these context parameters since commit aa4b90d9a (the
53+ // full-envelope ruling: enforcement adjudicates on the whole envelope, never a per-site
5454// subset). Annotating the implementation with the retired six-field shape is
5555// what forced this file to cast its way out of its own contract to read
5656// fields the caller had already supplied.
@@ -60,7 +60,7 @@ import { isFileIdToken, referenceTargetOf } from '@objectstack/spec/data';
6060// [#11993] The SANCTIONED renderer for OPERATION-level refusal copy. The
6161// Operation Message Catalog is the ONE seat for these sentences — its own
6262// header bars both a package-local string table and a second rendering
63- // mechanism for a second producer, and #12493 landed this service's key
63+ // mechanism for a second producer, and commit aa5994e17 landed this service's key
6464// (`approval_recall_not_submitter`) into it ahead of this consumer half.
6565import { renderOperationMessage , type ValidationMessageTranslator } from '@objectstack/spec/system' ;
6666import { isGrantActive } from '@objectstack/core' ;
@@ -218,7 +218,7 @@ export interface ApprovalResumeSurface {
218218 * evidence of anything. Rejects when a store cannot be read; the inspection
219219 * counts such a row `undetermined` — but ⛔ unlike a thrown
220220 * {@link hasSuspendedRun} it does NOT drop the row, because this oracle is
221- * asked only WHICH shape a row already known to be stranded is (#16709 ).
221+ * asked only WHICH shape a row already known to be stranded is (commit 8c7cca1ce ).
222222 * A host that resolves a malformed verdict is treated the same way, and
223223 * costs no OTHER row its answer.
224224 */
@@ -657,7 +657,7 @@ function refineFailedRunState(verdict: ConsumedSuspensionVerdict): StrandedRunSt
657657 * was asked and could not answer. Three ways in: the attached surface has
658658 * no `inspectConsumedSuspension` (an engine build older than this plugin,
659659 * or a test double); the read THREW (a store outage); or the host resolved
660- * a malformed verdict, violating its own declared surface (#16709 ). Today's
660+ * a malformed verdict, violating its own declared surface (commit 8c7cca1ce ). Today's
661661 * undifferentiated label, kept on purpose as the fail-closed fallback
662662 * (#15358 ruling, item 1): a failure to differentiate is not evidence, so
663663 * the row is reported and its repairability left unstated — ⛔ never
@@ -1378,7 +1378,7 @@ export class ApprovalService implements IApprovalService {
13781378 const perms = Array . isArray ( context . permissions ) ? context . permissions : [ ] ;
13791379 // [#7135] A DECLARED read. `posture` (ADR-0095 D2) is resolved by
13801380 // `resolveAuthzContext` and is a field of the envelope the contract has
1381- // named here since #6523 — the doc block above already says it is the
1381+ // named here since commit aa4b90d9a — the doc block above already says it is the
13821382 // intended signal. Until this parameter widened, reading it meant an
13831383 // unchecked `as any` on an enforcement input: a typo (`postures`,
13841384 // `'PLATFORM-ADMIN'`) would have compiled and silently denied every
@@ -2292,7 +2292,7 @@ export class ApprovalService implements IApprovalService {
22922292 * `plugin-sharing`, whatever the shared method name suggests. Both answer
22932293 * "who holds position P"; this one reads the directory RAW — neither the
22942294 * ADR-0091 D2 validity window nor the `sys_position.active` catalogue flag is
2295- * applied. Maintainer ruling, 2026-08-15 (#8710 , inheriting #8613), verbatim:
2295+ * applied. Maintainer ruling, 2026-08-15 (commit 04d03c3a0 , inheriting #8613), verbatim:
22962296 *
22972297 * > Access-conferring paths filter deactivated positions; addressing paths
22982298 * > do not.
@@ -2315,7 +2315,7 @@ export class ApprovalService implements IApprovalService {
23152315 * projects `user_id` too). The table carries no window columns at all and
23162316 * `isGrantActive` reads an absent bound as unbounded, so there is nothing
23172317 * a filter could do here; membership tier names have no `sys_position`
2318- * row either (#8710 's "a name with no row is untouched" fallback), so no
2318+ * row either (commit 04d03c3a0 's "a name with no row is untouched" fallback), so no
23192319 * catalogue flag either. This limb cannot be brought into parity by
23202320 * adding a filter — see {@link expandMembershipTierUsers}.
23212321 * 3. `sys_position.active` — the sharing engine's gate for it lives at the
@@ -2326,7 +2326,7 @@ export class ApprovalService implements IApprovalService {
23262326 * The omission is per-READ, not a missing dependency: `isGrantActive` is
23272327 * imported in this file and IS applied to `sys_approval_delegation` in
23282328 * {@link lookupActiveDelegation}. ⛔ So do not "fix" this by adding the window
2329- * filter here — that is the option #8710 rejected, on the reasoning above.
2329+ * filter here — that is the option the ruling (commit 04d03c3a0) rejected, on the reasoning above.
23302330 */
23312331 private async expandPositionUsers ( positionName : string , organizationId ?: string | null ) : Promise < string [ ] > {
23322332 if ( ! positionName ) return [ ] ;
@@ -2360,7 +2360,7 @@ export class ApprovalService implements IApprovalService {
23602360 * filter even if it were not: `sys_member` carries no ADR-0091 D2 window
23612361 * columns, and a tier name has no `sys_position` row to read `active` off.
23622362 * {@link expandPositionUsers} carries the ruling both reads inherit
2363- * (#8613 / #8710 ) — this method is also the second limb of that union, so a
2363+ * (#8613 / commit 04d03c3a0 ) — this method is also the second limb of that union, so a
23642364 * change here changes position routing too.
23652365 */
23662366 private async expandMembershipTierUsers ( tier : string , organizationId ?: string | null ) : Promise < string [ ] > {
@@ -4793,7 +4793,7 @@ export class ApprovalService implements IApprovalService {
47934793 * A surface without that member leaves the row `'failed'` — reported,
47944794 * undifferentiated — because absence of the discriminator is not evidence
47954795 * of anything. So does a read that THREW or answered a malformed verdict
4796- * (#16709 ): by the time this oracle is asked the row is already known to be
4796+ * (commit 8c7cca1ce ): by the time this oracle is asked the row is already known to be
47974797 * stranded, so a failure to differentiate it is not a reason to drop it from
47984798 * a report — it is counted `undetermined` as telemetry AND reported.
47994799 *
@@ -4820,7 +4820,7 @@ export class ApprovalService implements IApprovalService {
48204820 * outage must not be published as a lost run); a thrown or malformed THIRD
48214821 * read leaves its row in `stranded` as the undifferentiated `'failed'` and
48224822 * is counted here as well — the row is known to be stranded, only its
4823- * shape could not be told (#16709 ). So this counter and `stranded.length`
4823+ * shape could not be told (commit 8c7cca1ce ). So this counter and `stranded.length`
48244824 * overlap on purpose, and neither one alone sizes the scan's blind spot.
48254825 */
48264826 undetermined : number ;
@@ -4890,7 +4890,7 @@ export class ApprovalService implements IApprovalService {
48904890 // the other two oracles. See `refineFailedRunState` and
48914891 // `StrandedRunState` for the three answers and why none is folded.
48924892 if ( runState === 'failed' && typeof this . automation . inspectConsumedSuspension === 'function' ) {
4893- // ⚠️ [#16709 item 3] The REFINEMENT runs inside this `try`, with the
4893+ // ⚠️ [commit 8c7cca1ce, item 3] The REFINEMENT runs inside this `try`, with the
48944894 // read it refines. `refineFailedRunState` dereferences the verdict, so
48954895 // a host that violates the declared surface — resolving `undefined`
48964896 // where a verdict is declared — used to throw a `TypeError` out of
@@ -4903,7 +4903,7 @@ export class ApprovalService implements IApprovalService {
49034903 try {
49044904 refined = refineFailedRunState ( await this . automation . inspectConsumedSuspension ( runId ) ) ;
49054905 } catch ( err : any ) {
4906- // [#16709 item 2 — PM ruling, 2026-09-08] The row STAYS in the
4906+ // [commit 8c7cca1ce, item 2 — PM ruling, 2026-09-08] The row STAYS in the
49074907 // report, as the undifferentiated `'failed'`. This oracle is not
49084908 // asked WHETHER the row is stranded: the first two already answered
49094909 // that (no live pause, terminal `failed`). It is asked only WHICH of
0 commit comments