Skip to content

Commit c5d3fd5

Browse files
committed
docs(plugin-sharing): re-anchor the dead tracker citations to the commits that decided them
Comment and docblock prose under packages/plugins/plugin-sharing/src that cited a tracker number answering 404 now cites the commit in this repository's history that decided what the line describes, in ruling C+D's form C. 87 sites on 86 lines in 23 files, 13 numbers, 13 distinct commits; one more line re-points a referent the removed number left behind. Comments only: every file keeps its line count, no code token moves, and no citation number is added. Claude-Session: https://claude.ai/code/session_01XY5uCwTjZj7884yYtyur4H Co-authored-by: Claude <noreply@anthropic.com>
1 parent 422db78 commit c5d3fd5

23 files changed

Lines changed: 87 additions & 87 deletions

‎packages/plugins/plugin-sharing/src/backfill-sys-record-share-organizations.test.ts‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
// Copyright (c) 2026 ObjectStack. Licensed under the Apache-2.0 license.
22
//
3-
// #14484 — the backfill half of "A: tenant-scoped, writer-repaired, backfilled".
3+
// commit 3f64fe6c6 — the backfill half of "A: tenant-scoped, writer-repaired, backfilled".
44
//
55
// These pin the properties the maintainer ruling names, as behaviour rather
66
// than as prose:

‎packages/plugins/plugin-sharing/src/backfill-sys-record-share-organizations.ts‎

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,16 +2,16 @@
22

33
/**
44
* backfill-sys-record-share-organizations — the ONE-OFF repair sweep for the
5-
* `sys_record_share` rows the pre-#14484 `SharingService.grant` stranded with
5+
* `sys_record_share` rows that `SharingService.grant`, before commit 3f64fe6c6, stranded with
66
* no organization.
77
*
88
* ## What this repairs, and why it is not optional
99
*
10-
* #14484 fixed the WRITER: `SharingService.grant` now stamps
10+
* Commit 3f64fe6c6 fixed the WRITER: `SharingService.grant` now stamps
1111
* `organization_id` on every insert and update of `sys_record_share` — a
1212
* rule-materialised grant carries the granting rule's organization, a direct
1313
* grant the shared record's. It wrote nothing to existing rows, and on a WALLED
14-
* deployment that asymmetry is the cliff the card names:
14+
* deployment that asymmetry is the cliff that commit pins:
1515
*
1616
* - the SQL driver's own tenant predicate is NULL-TOLERANT —
1717
* `(organization_id = :tenantId OR organization_id IS NULL)` — so an
@@ -33,7 +33,7 @@
3333
* The tree's precedents for this shape are
3434
* `plugin-approvals/src/backfill-platform-row-organizations.ts` and
3535
* `service-storage/src/backfill-sys-file-organizations.ts`, and both require a
36-
* MAINTAINER ORDER PER TABLE. The 2026-09-02 ruling on #14484 (decision batch
36+
* MAINTAINER ORDER PER TABLE. The 2026-09-02 ruling commit 3f64fe6c6 applies (decision batch
3737
* #11 item 3, maintainer verbatim 「#13564 转维护者处理;其他同意」 — "其他同意"
3838
* adopts A: tenant-scoped, writer-repaired, existing rows backfilled from the
3939
* record they grant access to) IS that order, and it is the order for
@@ -121,7 +121,7 @@ import { resolveTenantFieldName } from '@objectstack/objectql';
121121

122122
/**
123123
* The ONE object this sweep repairs. ⛔ Scope-pinned by the 2026-09-02 ruling
124-
* on #14484 — a second table needs its own maintainer order (see the module
124+
* applied by commit 3f64fe6c6 — a second table needs its own maintainer order (see the module
125125
* doc).
126126
*/
127127
export const SYS_RECORD_SHARE_BACKFILL_OBJECT = 'sys_record_share';

‎packages/plugins/plugin-sharing/src/exec-context-annotation.pin.ts‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,8 @@
44
* #7136 — compile-time pin for the CONTEXT type this plugin's enforcement
55
* methods accept.
66
*
7-
* #6523 converged 36 contract signatures onto the full `ExecutionContext` (the
8-
* #6206 ruling: enforcement adjudicates on the whole `resolveAuthzContext`
7+
* Commit aa4b90d9a converged 36 contract signatures onto the full `ExecutionContext` (the
8+
* full-envelope ruling: enforcement adjudicates on the whole `resolveAuthzContext`
99
* envelope, never a per-site subset). #7136 is the consumer half — the
1010
* implementations here now annotate their own parameters with that same
1111
* envelope instead of the six-field shape they used to name.

‎packages/plugins/plugin-sharing/src/objects/sys-record-share.object.ts‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -153,15 +153,15 @@ export const SysRecordShare = ObjectSchema.create({
153153
//
154154
// ⚠️ ORDERING CONSTRAINT — this id half is `required: true`, and that
155155
// makes it ORDER-DEPENDENT in seeds even though a pointer pair
156-
// contributes no static ordering edge (#11674, measured against the real
156+
// contributes no static ordering edge (commit 1cba33f16, measured against the real
157157
// engine in `packages/objectql/src/engine-seed-required-deferral.test.ts`):
158158
// the seed loader defers an unresolvable reference by DELETING the column
159159
// from the pass-1 insert, required-validation rejects that row, and pass 2
160160
// is then left with no row to back-fill. So the pass-2 healing that makes
161161
// an OPTIONAL id half order-independent (`sys_audit_log`) does not reach
162162
// this one. ⇒ SEED THE TARGET DATASET FIRST. The failure if you do not is
163163
// loud in three places — a write error naming this column, a
164-
// dropped-deferral error, and `success: false` — and since #11674 the
164+
// dropped-deferral error, and `success: false` — and since commit 1cba33f16 the
165165
// loader also WARNS at load time, before the engine rejects the row.
166166
referenceVia: 'object_name',
167167
}),

‎packages/plugins/plugin-sharing/src/objects/sys-share-link.object.ts‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -144,15 +144,15 @@ export const SysShareLink = ObjectSchema.create({
144144
//
145145
// ⚠️ ORDERING CONSTRAINT — this id half is `required: true`, and that
146146
// makes it ORDER-DEPENDENT in seeds even though a pointer pair
147-
// contributes no static ordering edge (#11674, measured against the real
147+
// contributes no static ordering edge (commit 1cba33f16, measured against the real
148148
// engine in `packages/objectql/src/engine-seed-required-deferral.test.ts`):
149149
// the seed loader defers an unresolvable reference by DELETING the column
150150
// from the pass-1 insert, required-validation rejects that row, and pass 2
151151
// is then left with no row to back-fill. So the pass-2 healing that makes
152152
// an OPTIONAL id half order-independent (`sys_audit_log`) does not reach
153153
// this one. ⇒ SEED THE TARGET DATASET FIRST. The failure if you do not is
154154
// loud in three places — a write error naming this column, a
155-
// dropped-deferral error, and `success: false` — and since #11674 the
155+
// dropped-deferral error, and `success: false` — and since commit 1cba33f16 the
156156
// loader also WARNS at load time, before the engine rejects the row.
157157
referenceVia: 'object_name',
158158
}),

‎packages/plugins/plugin-sharing/src/position-graph.ts‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ export interface PositionGraphOptions {
3939
*
4040
* ⚠️ A SECOND implementation of this question lives in `plugin-approvals`
4141
* (`ApprovalService.expandPositionUsers`), and it is deliberately NOT identical
42-
* — do not unify them without reading #8613 / #8710 first. Approval routing is
42+
* — do not unify them without reading #8613 / commit 04d03c3a0 first. Approval routing is
4343
* an ADDRESSING path, so it reads the directory raw and applies no ADR-0091 D2
4444
* window: dropping a lapsed holder there is fail-OPEN (a step routing to
4545
* nobody). Note also that the `sys_position.active` gate for THIS path is not

‎packages/plugins/plugin-sharing/src/reconcile-refused-grant-continues.test.ts‎

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
*
77
* ## The shape, and which half of it is the security half
88
*
9-
* After #14484 `sys_record_share` is `tenant-scoped` in the #13491 ledger, so
9+
* After commit 3f64fe6c6 `sys_record_share` is `tenant-scoped` in the #13491 ledger, so
1010
* on a walled install an organization-less system insert on it is refused
1111
* loudly with `ERR_SYSTEM_WRITE_ORGANIZATION_REQUIRED` (#8844).
1212
* `SharingService.grant` resolves the organization on every path that can; a
@@ -34,7 +34,7 @@
3434
* the deployment posture. A fake engine would have to imitate the very thing
3535
* whose behaviour decides the case. So these cases run a real `SqlDriver` on
3636
* better-sqlite3 `:memory:` behind a real `ObjectQL` on an `isolated` posture,
37-
* the way `record-share-organization-stamp.test.ts` does for the #14484 stamp.
37+
* the way `record-share-organization-stamp.test.ts` does for the commit 3f64fe6c6 stamp.
3838
*
3939
* ## Why the fixture's organization-less record is in the MIDDLE
4040
*
@@ -347,7 +347,7 @@ describe('[#14754] reconcile: a refused grant is counted and the pass CONTINUES'
347347
const rule = await platformGlobalRule(rules, 'os14754_update_half', 'read');
348348

349349
// A pre-existing rule grant on the organization-less record, carrying no
350-
// organization (which is how it got there before #14484). The pass wants
350+
// organization (which is how it got there before commit 3f64fe6c6). The pass wants
351351
// to raise it to `edit`.
352352
await driver.create('sys_record_share', {
353353
id: 'shr_orgless_old', object_name: OBJECT, record_id: 'rec_orgless', recipient_type: 'user',

‎packages/plugins/plugin-sharing/src/record-share-organization-stamp.test.ts‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
// Copyright (c) 2026 ObjectStack. Licensed under the Apache-2.0 license.
22

33
/**
4-
* [#14484] Every `sys_record_share` row carries `organization_id` — on a REAL
4+
* [commit 3f64fe6c6] Every `sys_record_share` row carries `organization_id` — on a REAL
55
* engine over a REAL driver, both write paths, plus the backfill and the
66
* engine rule the ledger flip switches on.
77
*

‎packages/plugins/plugin-sharing/src/rule-criteria-org-scope.test.ts‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -95,7 +95,7 @@ const DEAL_FIELDS: Record<string, Record<string, unknown>> = {
9595

9696
const SHARE_FIELDS: Record<string, Record<string, unknown>> = {
9797
id: { type: 'text', name: 'id', label: 'Id', primary: true },
98-
// [#14484] The tenant column the registry provisions on every platform
98+
// [commit 3f64fe6c6] The tenant column the registry provisions on every platform
9999
// object (`applySystemFields`); this hand-built table must declare it too,
100100
// now that the writer stamps it — the fixture was never spec-faithful
101101
// without it, the omission just had no reader.

‎packages/plugins/plugin-sharing/src/share-link-eligibility.test.ts‎

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@
3838
* the ablation meaningful: with the new predicate removed, the eligibility
3939
* cases must flip red and these five must stay green.
4040
*
41-
* ## [#13608] The second seam: the same policy, held again at REDEMPTION
41+
* ## [commit fc9ba76a5] The second seam: the same policy, held again at REDEMPTION
4242
*
4343
* Enforcing at mint alone left the adjacent half open, and the state the
4444
* predicate reads is exactly the state an editor changes: publish an article
@@ -69,7 +69,7 @@ import type { DriverQuery } from '@objectstack/spec/contracts';
6969
import { assertEngineUpdateDispatch, assertEngineFindOnePredicate } from '@objectstack/objectql';
7070
import type { IHttpServer, IHttpRequest, IHttpResponse, RouteHandler } from '@objectstack/spec/contracts';
7171
import { ShareLinkService } from './share-link-service.js';
72-
// [#13608] The PUBLIC seam an anonymous holder actually reaches. The refusal's
72+
// [commit fc9ba76a5] The PUBLIC seam an anonymous holder actually reaches. The refusal's
7373
// shape is a claim about what that caller can observe, so it is measured there
7474
// and not only on the service's return value.
7575
import { registerShareLinkRoutes } from './share-link-routes.js';
@@ -139,7 +139,7 @@ interface BootOptions {
139139
*/
140140
shapeRow?: (row: any) => any;
141141
/**
142-
* [#13608] Collect the service's server-side log. The redemption refusal is
142+
* [commit fc9ba76a5] Collect the service's server-side log. The redemption refusal is
143143
* deliberately silent on the wire, so this is where the REASON it refused
144144
* becomes assertable — and where the ruling says the reason belongs.
145145
*/
@@ -165,7 +165,7 @@ async function boot(article: any = ARTICLE, options: BootOptions = {}) {
165165

166166
const schemas: Record<string, any> = { article, sys_share_link: SysShareLink };
167167
/**
168-
* [#13608] Every read the service issues, in order. Two claims are measured
168+
* [commit fc9ba76a5] Every read the service issues, in order. Two claims are measured
169169
* off it: the `id`-only probe is UNCHANGED for an object with no predicate,
170170
* and the eligibility path widens that same read rather than adding a second.
171171
*/
@@ -595,7 +595,7 @@ describe('[#7861] publicSharing.eligibility is enforced at createLink', () => {
595595

596596

597597
/**
598-
* [#13608] The redemption seam.
598+
* [commit fc9ba76a5] The redemption seam.
599599
*
600600
* `resolveToken` checked `revoked_at`, `expires_at`, the audience gates, the
601601
* password and record EXISTENCE — and served whatever survived, under
@@ -923,7 +923,7 @@ describe('[#13608] publicSharing.eligibility is enforced again at REDEMPTION', (
923923
* `publicSharing.enabled` governed MINTING only: `getPolicy()` collapsed to an
924924
* empty policy when the block was off, and `resolveToken` read nothing off
925925
* `policy.enabled`. So the platform held this shape — the predicate INSIDE
926-
* the block was re-evaluated at every redemption (#13608, above) while turning
926+
* the block was re-evaluated at every redemption (commit fc9ba76a5, above) while turning
927927
* the ENTIRE block off did not stop a single existing link. Maintainer ruling
928928
* of 2026-09-01 (quoted verbatim in `share-link-service.test.ts`'s reversal
929929
* register): the switch is a standing policy held at every redemption,
@@ -983,7 +983,7 @@ describe('[#14033] publicSharing.enabled is a standing policy — the switch is
983983
/**
984984
* The HTTP seam, driven end-to-end on the real service through the real
985985
* route, with the route's SECURE default context — every request below is
986-
* anonymous. Same reading as the #13608 pin above, for the same reason: the
986+
* anonymous. Same reading as the commit fc9ba76a5 pin above, for the same reason: the
987987
* switched-off link lands in the generic "invalid / expired / revoked"
988988
* answer, byte-for-byte what a token that NEVER EXISTED gets — not the 410
989989
* bucket, which would confirm the token was real, and not a 422 naming the
@@ -1268,7 +1268,7 @@ describe('[#14637] the route probe reads the standing policy before it answers f
12681268
// Back-dated on the stored row, not minted: `createLink` refuses a past
12691269
// `expiresAt` outright (`422 EXPIRY_IN_PAST`), so this is the only way to
12701270
// reach an ALREADY-EXPIRED link — and it is exactly what the passage of
1271-
// time does to a live one. Same stamp the #13608 pins above use.
1271+
// time does to a live one. Same stamp the commit fc9ba76a5 pins above use.
12721272
await driver.update('sys_share_link', link.id, {
12731273
expires_at: new Date(Date.now() - 60_000).toISOString(),
12741274
});
@@ -1306,7 +1306,7 @@ describe('[#14637] the route probe reads the standing policy before it answers f
13061306
});
13071307

13081308
/**
1309-
* [#13608] Mount the real PUBLIC resolve route on the real service.
1309+
* [commit fc9ba76a5] Mount the real PUBLIC resolve route on the real service.
13101310
*
13111311
* Only the verbs `registerShareLinkRoutes` calls are implemented, and the
13121312
* SECURE default `contextFromRequest` is deliberately left in place: it reads
@@ -1318,7 +1318,7 @@ describe('[#14637] the route probe reads the standing policy before it answers f
13181318
* the `audience: 'signed_in'` arm from the serving side), and the returned
13191319
* driver takes the request query (the only way to reach the `WRONG_PASSWORD`
13201320
* arm). Omit both and this is byte-for-byte the anonymous, query-less harness
1321-
* the #13608 and #14033 pins above drive.
1321+
* the commit fc9ba76a5 and #14033 pins above drive.
13221322
*/
13231323
function mountResolveRoute(service: ShareLinkService, engine: unknown, signedInUserId?: string) {
13241324
const routes = new Map<string, RouteHandler>();

0 commit comments

Comments
 (0)