Repository navigation
AL-2103 — [P28-F13] Offer optional missionary receipt reporting with reliable status #2103
Description
AL-2103 — [P28-F13] Offer optional missionary receipt reporting with reliable status
Approved implementation ticket. Plan key: P28-F13. Work only after its real blockers and exact qualification gates are satisfied. Publication does not establish implementation, qualification or activation.
Parent
Phase 28 implementation specification #2064. Canonical specification commit e93e2e9958f32380e28ec0e005d7ef3ee24f7e7a; documentation PR #2065. The full published spec and comments were verified against the canonical source. Preserve the parent’s body, title, labels, state and comments; new native child/dependency relationships are metadata only.
What to build
Organizations can turn on a simple missionary doorway for reporting actual offline receipt; Maya records known facts once into the existing intake and sees Awaiting finance or truthful uncertainty, including after reporting is turned Off.
Source of truth and acceptance ownership
- Finance Stewardship: part 1 · part 2
- Common safeguards and proof: part 1 · part 2
- Owner reconciliation and later-decision precedence: part 1
- Evidence and existing seam limits: part 1
Primary requirement references: REQ28-F29, REQ28-F30, REQ28-F32. Stories: US28-F29, US28-F30, US28-F32.
The checked criteria below are this ticket’s primary trace ownership, not a relaxation of the full normative contract. For a requirement split across tickets, this ticket delivers its named behavior and enforces applicable invariants immediately; the other ticket’s full scenario is not claimed complete early. All source-specific state/control, numeric-boundary, owner, monitoring and exclusion sections in the linked volume remain binding. Preserve settled D1–D50 and C01–C20; do not reopen them or import contradictory vendor conventions.
Acceptance criteria
- AC28-F29-01 — An Off organization with no retained permitted reports sees no unused missionary reporting control, while ordinary giving and staff intake remain available.
- AC28-F29-02 — On plus exact current reporting authority reveals one optional action; role name, possession or feature On alone cannot authorize acceptance.
- AC28-F29-03 — Missing or invalid policy never enables creation, and migration does not infer opt-in from old gifts, roles or legacy settings.
- AC28-F30-01 — Maya can submit an eligible actual receipt with an honestly unknown donor or amount, receiving an attributable operational report rather than a fabricated financial record.
- AC28-F30-02 — Selecting another reported holder records a validated assertion without granting that person access or proving chain of custody.
- AC28-F30-03 — A date-only or approximate reported receipt retains its precision; the server does not manufacture an exact historical timestamp.
- AC28-F32-01 — If acceptance wins the Off race, Awaiting finance remains recoverable; if Off wins, no report is created and later On does not replay it.
- AC28-F32-02 — A timeout displays an unknown outcome with same-operation Check status/Retry; it does not claim failure or invite duplicate submission.
- AC28-F32-03 — Recorded by finance and remaining handling are shown as separately permitted facts; reporting alone changes no received total, deposit, fulfillment, receipt, acknowledgment or donor message.
Implementation decisions and slice boundaries
- Starts Off for new or unconfigured tenants; preserve explicit qualified choices. On and exact current reporting authority are both required.
- Unknown donor, amount, currency, entity or allocation are assertions within the nonfinancial envelope; no guessed default, fake Party, zero money, check photograph, OCR, card or bank collection.
- Actual receipt is not a promise or a check reportedly mailed; date-only or approximate asserted time retains its precision.
- Off fences new acceptance, including stale forms, and preserves staff processing, currently permitted reads and accepted-result retry. A rejected intent is never queued for later On; an intervening Off/On requires fresh review.
Binding normative decisions
REQ28-F29 — Make missionary offline reporting optional and Off by default
Story US28-F29: As authorized staff, I want to enable missionary reports of
actual offline gifts only when appropriate, so that ordinary finance intake stays
simple for organizations that do not need this doorway.
Decision basis: D33 C01–C04/C18/C23; P15; P27 F56–F74.
One organization-wide Allow missionaries to report offline gifts setting
SHALL initially be Off for new tenants and existing tenants without an explicit
qualified choice. Upgrades preserve a deliberately selected qualified On or Off.
On is necessary but not sufficient for a missionary's current reporting
capability. Staff entry SHALL remain usable without a missionary report. Phase 28
SHALL call the existing Phase 15 operational-intake owner; it SHALL not insert a
financial gift, staging record, parallel intake ledger or task-as-source record.
Enable only the qualified narrow reporting/handling/finance continuation lane,
without requiring every future accounting feature or a new workflow builder.
REQ28-F30 — Record actual receipt with honest incomplete facts
Story US28-F30: As an authorized missionary, I want a short form for a gift
I actually received, so that I can hand known facts to finance without guessing.
Decision basis: D33 C04–C08/C17/C19; P15; P27 F56–F60/F68–F70.
The report SHALL be a deliberate attributed assertion of actual organizational
receipt. A promise or a donor saying a check was mailed is insufficient. The form
SHALL distinguish trusted recorder/tenant/acceptance time from asserted receipt
time and precision, reported receiver/holder and accountable next actor. Unknown
donor, amount, currency, intended Legal Entity, allocation or tender details may
remain explicit in a restricted nonfinancial envelope; required source identity
and accountability remain nonnull. A normalized amount requires known validated
currency and precision; unresolved literal information is an assertion, not money.
No fake Party, zero amount, guessed USD, signature, check photograph, bank/card
data, OCR, routine second approval or compulsory essay is introduced.
REQ28-F32 — Preserve accepted reports across Off, retries and correction
Story US28-F32: As a missionary, I want clear report status and safe recovery,
so that a disabled setting or interrupted connection does not lose an accepted
handoff or create it twice.
Decision basis: D33 C09–C11/C15/C17/C20/C23.
Policy changes and report admission SHALL share an authoritative acceptance fence.
Off stops new missionary acceptance, including stale forms, but preserves accepted
reports, staff processing and independently permitted reads/corrections/handling.
Accepted report, required history, result receipt and durable accountable work
intent SHALL commit coherently. Same-intent recovery returns an earlier accepted
result even after Off under current read rights; changed payload conflicts. An
Off rejection is a terminal no-effect outcome, never queued for On. An intervening
Off/On cycle requires fresh deliberate review and a new intent for a previously
unaccepted form. Older actual receipts may be deliberately reported while
currently permitted with their real occurrence date. Closing a submitted form is
not cancellation of an accepted or indeterminate command.
Testing, migration and operating obligations
Every reached layer belongs to this slice: actual source persistence and upgrade behavior, canonical command/query, permitted UI, and executed proof. Reuse native owners, shared Base UI/base-maia components and the established architecture. No parallel CRM, Tasks, consent, sender, permission or retention engine.
Before affected activation, prove current trusted tenant/actor/subject/role and fine-grained purpose/field authority, effective old-row/new-row RLS and grants, same-tenant relationships, applicable uniqueness/history/delete constraints, and every reached view/RPC/storage/service path. Caller identifiers and metadata are never authority. Source revision and privacy checks precede disclosure and are repeated after ordering waits where required.
Implement semantic idempotency, required source history/receipt and durable secondary intent, truthful partial/unknown/lost-response recovery, context-switch/revocation fencing, temporal boundaries and correction lineage. Preserve each adopted default and exact Off/new-work/accepted-work/reenable behavior. Never infer consent, money, completion or actual interaction from a presentation action.
Test through existing Playwright whole-user journeys as the primary boundary; use canonical API Vitest tests, real PostgreSQL roles and at least two concurrent sessions, qualified Auth and existing provider-contract seams where the browser cannot prove the guarantee. Reuse existing account-frame/session-guard, task-recovery, roster/redaction, operation-handler, dispatch/restriction, field-policy SQL and replay proof patterns while retaining their demo/mock limits. No new test framework and no skipped mandatory fixture may count as a pass.
Use persistent truthful outcomes, clear context and next steps, keyboard/screen-reader/touch/list equivalents, narrow-screen reflow, localization, safe international data and honest interrupted-connection recovery. Inventory and fence reached legacy writers/readers, preserve lawful history and unresolved obligations, and qualify mixed versions, restore, retention and containment before activation. Adopt existing source-specific signals/thresholds/owners/responses and measured cohort budgets; do not invent a numeric SLO or defer correctness to monitoring.
Shared requirements Q01–Q27 apply where relevant to every ticket. R43, F41–F44, M41–M42 and C49 apply to their affected lanes. W05/W06 aggregate composed evidence; they are not permission to defer any slice’s safeguards.
Exact consumed contracts
- AL-2009: Report an actual gift receipt with honest missing details (P27-F21) #2009 exact P15 restricted intake envelope/identity/required responsible work and current report projection. This ticket extends the missionary doorway, tenant Off default, exact reporting capability and interruption/Off behavior; it does not reimplement intake.
- Actual receipt with honest unknowns; holder selection does not grant access/certify custody; real acceptance/Off race and timeout after commit.
- Awaiting finance and Recorded by finance remain source truth; no received-total/receipt/fulfillment/outward-message effect from reporting.
Related source owners (references are not automatically blockers): #2009. Current source contract takes precedence over superseded issue wording.
Blocked by
A blocker’s closure is not runtime qualification: verify the exact consumed revision and executed proof. Keep independently qualified capabilities useful while an affected effect is unavailable. Integrate the approved specification into the implementation base; the open documentation PR is not evidence that these features exist.
Related approved slices
Short ticket keys in implementation notes resolve here. Published requirement, acceptance, story, decision and completeness codes retain their original meanings.
- P28-W01 / #2069 — Enter and switch the exact authorized workspace context
- P28-W05 / #2151 — Recover and contain the composed workspace after restore
- P28-W06 / #2152 — Qualify whole journeys and the exact Phase 28 release cohort
The full execution index and primary-acceptance ownership map are published with the Phase 28 release-qualification ticket. Every shared safeguard remains mandatory within its implementing slice.
Activity
[-][P28-F13] Offer optional missionary receipt reporting with reliable status[/-][+]AL-2103 — [P28-F13] Offer optional missionary receipt reporting with reliable status[/+]II-ricky-bobby-II commentedon Oct 25, 2026
Spec r1, Scope, Oct 24, 2026, pending Samson approval
Status: r1 for #2103 (P28 F13), base
develop6ac594d. The issue body is the source of intent; this spec is the build contract. The whole issue is over both caps, so §10 proposes a two-way split. F13-a is the organization setting, the reporting capability, the shared acceptance fence, the report command into the Phase 15 intake owner and same-intent recovery (stays on #2103). F13-b is Maya's form, her report status list, Check status and Retry, and the journeys. The split is not filed; every criterion is tagged with its slice. Natively blocked by #2069 and #2009, which matches the body's "Blocked by" list. The intake owner #2009 (P27-F21, P15-owned) is open and itself blocked by #2004, and develop's offline gift route is a staff-only 501 bridge that #763 retires, so the production intake adapter isunavailable(OQ1). Context read: #2064 (finance stewardship, common safeguards, owner reconciliation and evidence comments), the #2152 index comments, the #2069 r1 spec, the #2009, #2021 and #763 bodies, andfinance-stewardship.md(REQ28-F29 :748-773, F30 :774-799, F32 :829-856, F41–F44 :1081-1231).§0 What I checked
6ac594d9(Oct 24, 2:34 PM PT). AL-2103 — [P28-F13] Offer optional missionary receipt reporting with reliable status #2103's body and its 9 ACs. The issue has 0 comments, so this is r1.POST /api/admin/contributions/offline(packages/api/src/admin/contributions/offline-route.ts) checksfinance:manage_contributions(contribution-operations/permissions.ts, admin, super_admin and finance staff) and returns a 501 at persistence until the P15 migration lands (offline-dependencies.ts:23-38). The Admin dialog isapps/admin/app/(app)/contributions/offline-gift/**. [Phase 15] P15 domain schema migration + retire the Track-B offline 501 bridge #763 ("P15 domain schema migration + retire the Track-B offline 501 bridge") is open.supabase/migrations,packagesorapps, and no tenant-settings table to extend.donors,tasksandsettings(apps/missionary/app/**); there's no gifts page. AL-2069 — [P28-W01] Enter and switch the exact authorized workspace context #2069 owns the current workspace context.parseMoneyToMinorUnits/isSupportedCurrency(packages/api/src/money/index.ts:18, 33-55).§1 Intended behavior
Maya's organization turns on "Allow missionaries to report offline gifts" and gives her the reporting capability. After church on Sunday, a member hands her an envelope. On her phone she opens Donors, then "Report an offline gift". She enters what she knows: "John (surname unknown)", amount unknown, received "Oct 19", held by "Me". She submits once. Her list shows Awaiting finance. Nothing is added to any total and no receipt or message goes out. If the network drops, she sees "We couldn't confirm this was sent" with Check status and Retry, not an error.
F13-a, setting, capability and command
Setting.
offline_report_policy_eventsis append-only: tenant, seq, state ('on'|'off'), actor, at. No event means Off; a missing, unreadable or invalid current event also means Off. The migration writes no events and reads no old gifts, roles or settings. Changing it takesoffline_report_policy:<tenant>and an expected seq (409 policy_stale), underassertContributionPermission(auth, 'finance:manage_contributions')(OQ2).Capability.
offline_report_grantsholds explicit grants ofoffline_gift.reportto a profile for a subject context from AL-2069 — [P28-W01] Enter and switch the exact authorized workspace context #2069, granted and revoked by the same finance permission. A role name, membership, possession of a gift or the setting being On never authorizes. Acceptance needs On and a current grant and a current AL-2069 — [P28-W01] Enter and switch the exact authorized workspace context #2069 context for that subject.Report command.
report_offline_receipttakesIdempotency-Key, the form'spolicySeq(the 'on' event seen when the form opened) and the envelope. Under the policy lock it re-reads, in order: the current policy, the grant and context, and the key.409 reporting_off. The outcome is recordedrejected_off, with no report and nothing queued. A later On never replays it.409 review_again. An intervening Off/On needs a fresh review and a new key.409 idempotency_conflict.accept_offline_report(envelope)(the AL-2009: Report an actual gift receipt with honest missing details (P27-F21) #2009 port) in the same transaction, and recordsoffline_report_submissions(key digest, payload digest, recorder, policy seq,intake_ref, accepted_at). The owner commits the report, its history and its accountable work intent.Envelope. It's restricted and nonfinancial:
unknown;unknown, literal text, or a normalized{minor, currency}that requires a known supported currency and passesparseMoneyToMinorUnits;unknownor literal;exact_date,monthorapproximate; the server never makes it a timestamp;me, a validated tenant member, or literal text;Recorder, tenant and acceptance time come from the server. There's no zero amount, guessed USD, fake Party, signature, photo, OCR, card or bank field, and no required essay.
Holder. A holder that names another member is validated as an active member of the tenant and stored as an assertion. It grants that person no access and certifies no custody.
Off. Off stops new acceptance, including stale open forms. Accepted reports, staff processing, permitted reads and accepted-result replay continue.
F13-b, Maya's form and status
offline_report_status(intake_ref). Reporting alone changes no received total, deposit, fulfillment, receipt, acknowledgment or donor message.Threat model
rejected_off; seq checkNon-goals: the P15 intake owner and its work (#2009); finance recording (#2021, F14); duplicate resolution (#2026); physical handling (#2027); new financial records; notices.
§2 In scope
unavailableproduction adapter and test adapter.§3 Out of scope
donations, donors, batches or receipts.docs/ci.mdand the byte-pinned Phase 28 PRD archive.§4 Criteria
Tags: [A] Acceptance-owned test, [B] Builder test, [S] static, [R] real PostgreSQL (#2250's step). "Two sessions" means two independent database connections with the lock wait observed. (a)/(b) is the slice. The intake owner is F13's test adapter.
A1 [A][R] (a+b) Off by default (AC28-F29-01). A tenant with no event shows Maya no section and refuses the command (
409 reporting_off), while the staff offline route and ordinary giving behave as before.A2 [A][R] (a) Exact authority (AC28-F29-02). With On, only a profile holding a current grant in a current context sees one action and can submit. An admin without the grant, a missionary with the role but no grant, and a grant holder outside the context get
403.A3 [A][R] (a) No inferred opt-in (AC28-F29-03). After the migration, every tenant is Off, including tenants with old offline gifts and finance staff. An invalid current event refuses creation.
A4 [A][R] (a) Honest unknowns (AC28-F30-01). A report with an unknown donor and an unknown amount is accepted as an operational report. A census shows no donation, donor, batch, receipt or outbox row, and no zero amount or USD is stored. A normalized amount without a currency is refused.
A5 [A][R] (a) Holder (AC28-F30-02). Naming another member stores the assertion and gives that member no new read on the report. A non-member holder is refused.
A6 [A][R] (a) Precision (AC28-F30-03). A month-only and an approximate date round-trip with their precision, and no stored field holds a manufactured time.
B1 [A][R] (a) Off race (AC28-F32-01). Two sessions, twice:
409 reporting_offwith no report, and after On the same form gets409 review_again.B2 [A][R] (a+b) Timeout (AC28-F32-02). A response dropped after commit, then Retry with the same key, returns the original report; Check status finds it. A changed payload with that key gets
409 idempotency_conflict. The UI shows the unknown state, never "failed".B3 [A][R] (b) Separate facts (AC28-F32-03). The test adapter's "recorded" and "handling still needed" states show as two lines. Before recording, totals, deposits, fulfillment, receipts, acknowledgments and messages are unchanged.
S1 [S]
assertContributionPermission(…, 'finance:manage_contributions').donations, donors, batches or receipts, or calls the staff offline route.GUARDED_RPCS.C1 [A] (b) Journey. On a real stack with the test adapter, at a phone viewport, keyboard-only and with screen-reader names checked:
Axe clean.
Handback
tenant_guardschema and role ([Phase 4] #505 slice 1/4: withTenant tenant guard (non-owner, non-BYPASSRLS role, fail-closed) #2250 live), whether any P15 intake object exists (OQ1), and that none of the new names exist. Any mismatch goes to Samson. No writes.bun run verify:shadscanpasses.§5 Mapping
§6 Declared edits
supabase/migrations/<VERSION>_offline_receipt_reporting.sql+ rollbackpackages/api/src/offline-reporting/**(new)unavailableand test adapterspackages/api/src/admin/offline-reporting-policy/route.ts(new)assertContributionPermissionpackages/api/src/missionary-portal/offline-reports/route.ts(new)apps/admin/app/(app)/contributions/offline-reporting/**(new)packages/api/src/identity/tenant-guard.tsGUARDED_RPCSentries onlyapps/missionary/app/donors/**docs/features/offline-reporting/missionary-reports.md(new)tooling/eslint-config/suppressions.json,tooling/shadscan/findings.jsontests/unit/acceptance/issue-2103/**tests/e2e/offline-receipt-reporting.spec.ts(new)§7 Pins this change touches
packages/api/src/admin/contribution-operations/permissions.tspackages/api/src/admin/contributions/offline-route.ts,offline-dependencies.tspackages/api/src/money/index.ts:18, 33-55tests/unit/apps/missionary/missionary-navigation-search.test.tsx:67-75tooling/eslint-config/suppressions.json:1181-1188scripts/verify/shadscan.mjs(ci.yml "Enforce complete Shadscan app floors and reviewed findings")issue-2250/static.acceptance.test.tsissue-2155/…:257-280(bc8d57a2be564d61),issue-2201/…:166-178(1078832efaff84e6)docs/ci.mdbyte pinissue-2250prefix pin and #2304verify:phase28-spec(ci.yml :91), 911 files underdocs/features/missionary-workspace-depth/grill/**§8 CI
No new CI step and no
docs/ci.mdedit under the OQ4 default. Real-DB tests, including the two-session races, run in "Verify tenant isolation (real stack)" (bun x vitest run realstack.acceptance, envTENANT_GUARD_IT_ADMIN_DATABASE_URL). Everything else runs in existing ci.yml steps:bun run format:check, "Run affected lint on pull requests", "Run affected typecheck on pull requests", "Run unit tests", "Run acceptance tests", Shadscan. Playwright C1 runs locally and is recorded (H3).§9 Data, grants, person_id and donor spine
offline_report_policy_events: tenant_id, seq, state CHECK IN ('on','off'), actor_profile_id, created_at; PK (tenant_id, seq).offline_report_grants: tenant_id, id, profile_id, subject_kind, subject_id, granted_by, granted_at, revoked_by NULL, revoked_at NULL; partial UNIQUE (tenant_id, profile_id, subject_kind, subject_id)WHERE revoked_at IS NULL.offline_report_submissions: tenant_id, id, key digest, payload digest, recorder_profile_id, policy_seq, outcome CHECK IN ('accepted','rejected_off','review_again'), intake_ref NULL, accepted_at; UNIQUE (tenant_id, recorder_profile_id, key digest); CHECK that 'accepted' has anintake_ref. It holds no envelope fields; the facts live with the intake owner.anon/authenticated/service_roletable privileges; access only through guarded functions. No RLS policy on an existing table is dropped or recreated.profiles.person_idnormissionaries.person_id. No [Security] missionaries.person_id column-grant fix: anon cross-tenant read + select("*") routes (follow-up from #2256) #2268 block is needed.§10 Size and proposed split (not filed)
§11 Dependencies and migration
<VERSION>_offline_receipt_reporting.sql(F13-a), prefix 20261026, after F12's. F13-b adds no migration.20261024120000), the 43 remote branches after a full fetch (only20261024140000,20261024141000and20261024150000are added off develop), open PRs (feat(identity): normalize identity emails and donor keys (#2254) #2291:20261024140000,20261024141000; fix(donations): read donors through the real FK and stop swallowing donations errors (#2269) #2319 and Modernize Sentry, content, email and browser payment SDKs #2214 add none), the reserved list (20261024: 130000 … 235900; 20261025: 010000 … 235700 as listed in the AL-2095 — [P28-F05] Copy a reviewed approved Support Plan into a goal #2095–AL-2099 — [P28-F09] Enable follow-up for a confirmed specific one-time need #2099 r1 specs; 20261026: 010000, 020000, 021000, 030000, 031000, 032000, 040000, 050000), or the other requests in the AL-2100 — [P28-F10] Follow up on every source-certified positive excess #2100–AL-2104 — [P28-F14] Follow the same reported gift through recording and handling #2104 r1 specs.20261026090000. Version is reserved; Samson may renumber at handback to keep merge order.§12 Open Questions (proposed defaults in bold)
unavailable. While it's unavailable the Report action stays hidden even when On, and the command returns503 intake_unavailablewith no submission row. Wiring AL-2009: Report an actual gift receipt with honest missing details (P27-F21) #2009's real port, plus A2, A4–A6 and B1–B3 rerun against it, is a handback gate on AL-2009: Report an actual gift receipt with honest missing details (P27-F21) #2009. No write through the staff offline route is allowed. This is a departure that narrows. The alternative is holding F13 until AL-2009: Report an actual gift receipt with honest missing details (P27-F21) #2009 merges.finance:manage_contributions(admin, super_admin and finance staff), the permission the staff offline route already uses. The alternative isassertAutomationPermission. Flagged for Samson.test-e2estep "Offline receipt reporting journeys" with run textnode scripts/run-with-ci-env.mjs -- node node_modules/@playwright/test/cli.js test -c playwright.missionary.config.ts tests/e2e/offline-receipt-reporting.spec.ts --workers=1, which re-pins both fingerprints and byte-pinsdocs/ci.md(with docs/ci.md:35 and :366 still call test-e2e informational on develop; update with the #2180 byte pin in one change (follow-up to #2161) #2304).me, an active member of the tenant, or literal text; no person lookup beyond tenant membership.§13 Deploy
20260515025814–20261024120000(25 applied, newest20260513173938). The dev project is 55 behind, with four20261001*collisions and an extra20260519233845. Develop's catalog is not assumed live anywhere.unavailable. (5) The real intake adapter, once AL-2009: Report an actual gift receipt with honest missing details (P27-F21) #2009 merges.§14 Flags
II-ricky-bobby-II commentedon Oct 25, 2026
Approval (Samson, factory lead, Oct 24, 2026, 9:54 PM PT), relayed by Scope:
20261026090000_offline_receipt_reporting.sql, after F12-b's20261026081000. Version is reserved; Samson may renumber at handback to keep merge order.unavailable. Because AL-2009: Report an actual gift receipt with honest missing details (P27-F21) #2009 isn't built, the Report action stays hidden even when the setting is On, and the command returns503 intake_unavailablewith no submission row. Wiring AL-2009: Report an actual gift receipt with honest missing details (P27-F21) #2009's real port, plus A2, A4–A6 and B1–B3 rerun against it, is a handback gate Samson checks. No write through the staff offline route is allowed.finance:manage_contributions(assertContributionPermission) controls the setting and the grants.docs/ci.mdedit; the Playwright run is local and recorded (H3).me, an active tenant member, or literal text): r1 default stands.II-ricky-bobby-II commentedon Oct 25, 2026
Split filed (Scope, Oct 24, 2026, per Samson's 9:54 PM PT approval)
This issue now covers only its F13-a slice (
20261026090000). #2069 and #2009 stay here and are also copied to #2362: its section and form act within Maya's #2069 context, and its status list reads #2009's intake status, so its B2 and B3 rerun is part of the #2009 gate. F14 (#2104) builds on #2362's section but isn't linked to it under this ruling. The child carries native sub-issue and blocked-by links; it isn't Ready-labelled.