---
source_sha:
  services-accounting: f47cb263875bbc0c5640fba7dae6785ec32695f8
  react-console: baf6dae382d6f41dce976c7f848667ccc37e076f
control_backfill_evidence:
  - finding: FND-ACC-CLS-057
    controls: [TC-PI-004, TC-MON-002, TC-AVL-004]
    provenance: observed
    source: "services-accounting:modules/fiscal-close/services/jobs/fiscal-close-jobs.ts; rhythm-v2-docs:specs/accounting/close/FINDINGS.md#FND-ACC-CLS-043"
  - finding: FND-ACC-CLS-058
    controls: [TC-AZ-006]
    provenance: unknown
    source: "rhythm-v2-docs:specs/accounting/close/FINDINGS.md#FND-ACC-CLS-016; specs/accounting/close/design/decisions/ADR-ACC-CLS-013-the-close-job-acts-with-system-authority-after-a-checked.md; services-accounting:modules/fiscal-close/services/jobs/fiscal-close-job-tasks.ts"
---

# Month-End Close Findings and Product Questions

## Findings

| id | severity | statement | affects | evidence | kind |
|---|---|---|---|---|---|
| `FND-ACC-CLS-001` | medium | The approved plan requires nonwaiting aging requests and service-resolved closer names. Finalization instead waits for an active monthly aging run, and service person references have unresolved names that only the console fills. | `BR-CAP-ACC-CLS-001-08`, `BR-CAP-ACC-CLS-015-03`, `BR-CAP-ACC-CLS-015-04`, `CAP-ACC-CLS-013`, `CAP-ACC-CLS-014` | services-accounting:docs/milestones/plans/ACCT-M4-plan.md#D8; modules/fiscal-close/services/jobs/fiscal-close-jobs.ts:SNAPSHOT_WAIT_ITERATIONS; services/readiness/close-calendar.ts:userRefOf; tests/aws/fiscal-close.synth.ts#waits 60 s in a Wait state before finalize asks again for the month’s A/R snapshot | inconsistency |
| `FND-ACC-CLS-002` | medium | The approved workspace bank-verification choice defaults off and is consumed by readiness, but customer-facing settings do not expose it. The required branch currently needs a stored value supplied outside the customer setting flow. | `BR-CAP-ACC-CLS-006-06`, `CAP-ACC-CLS-006`, `OQ-ACC-CLS-004` | services-accounting:modules/books/services/persistence/settings.ts:toSettings; docs/migrations/fiscal-close/README.md#FC2-1 accounting.settings; react-console:acceptance/accounting/journeys/reconciliation-close/ACT-ACC-0624.json (automation blocked) | debt |
| `FND-ACC-CLS-003` | medium | Cancellation refuses a close with committed recognition, although the design describes reversing earlier close work and the console promises that reversal. The confirmation therefore misstates what the permitted cancellation can do. | `BR-CAP-ACC-CLS-012-06`, `BR-CAP-ACC-CLS-012-10`, `AS-JNY-ACC-CLS-005-03`, `OQ-ACC-CLS-003` | services-accounting:modules/fiscal-close/services/jobs/close-run-actions.ts:cancelCloseRun; docs/migrations/fiscal-close/README.md#Follow-ups 6; react-console:components/accounting/close/close-run-view.tsx:CancelCloseDialog; acceptance/accounting/journeys/reconciliation-close/ACT-ACC-0618.json | inconsistency |
| `FND-ACC-CLS-004` | medium | The recorded acceptance direction requires closely carried earlier close and reopen tests. Only three carried unit suites remain at this commit; native integration and end-to-end suites replace the retired carried suites without a cited ruling accepting that substitution. | `MOD-ACC-CLS`, `CAP-ACC-CLS-008`, `CAP-ACC-CLS-011` | services-accounting:docs/fiscal-close/PHASE-2-PLAN.md#7 (FC2-2); docs/migrations/accounting-modernization/restructure/README.md (fiscal-close retired suites); modules/fiscal-close/tests/unit/carried/ | inconsistency |
| `FND-ACC-CLS-005` | medium | The recorded command-key ruling requires a conflict when another requester reuses an existing command. Persistence compares command content without requester identity, allowing a colleague’s matching request to return the original run. | `BR-CAP-ACC-CLS-008-04`, `CAP-ACC-CLS-011` | services-accounting:docs/milestones/ACCT-M4-contracts-and-events-for-commerce.md (Rulings 2026-10-21 09:47 ET); modules/fiscal-close/services/persistence/period-close-runs.ts:sameRequest; react-console:acceptance/accounting/journeys/reconciliation-close/ACT-ACC-0617.json#step 2 | inconsistency |
| `FND-ACC-CLS-006` | low | The design describes action grants scoped to a business unit, while the implemented catalogue grants them across the workspace. Its comment about routes not yet using those grants is also outdated. | `BR-CAP-ACC-CLS-002-06`, `ACT-ACC-015` | services-accounting:aws/accounting.service.ts:FiscalPeriodActions; docs/fiscal-close/README.md#6.4 APIs | inconsistency |
| `FND-ACC-CLS-007` | low | The design calls for asynchronous acceptance status, but the declared close and reopen responses return ordinary success with the run, following the shared dispatcher. | `CAP-ACC-CLS-008`, `CAP-ACC-CLS-011` | services-accounting:modules/fiscal-close/aws/api/fiscal-period-close.routes.ts (header); docs/fiscal-close/PHASE-2-PLAN.md#6 | inconsistency |
| `FND-ACC-CLS-008` | low | The module shares its read, submission and task functions with other Accounting modules. Dedicated deployment ownership remains a design-stage question; the module readme describes the present sharing. | `MOD-ACC-CLS` | services-accounting:docs/migrations/accounting-modernization/restructure/README.md; docs/architecture/accounting-2.0/02-decisions.md (open item); modules/fiscal-close/README.md | debt |
| `FND-ACC-CLS-009` | medium | The earlier close booked cost of goods sold, while this implementation always marks that check not applicable and skips its execution step. No recorded decision establishes a future delivery commitment for that work. | `BR-CAP-ACC-CLS-007-05`, `CAP-ACC-CLS-008` | services-accounting:modules/fiscal-close/services/readiness/cost-of-goods-sold.ts; services/jobs/fiscal-close-steps.ts:COGS_SKIPPED_REASON; docs/fiscal-close/evidence/04-phase2-dependencies.md | debt |
| `FND-ACC-CLS-010` | low | The design expects authorization to identify eligible closers, but the response always supplies an empty list. The module has no supported directory lookup for holders of the action grant. | `BR-CAP-ACC-CLS-002-07` | services-accounting:modules/fiscal-close/services/authorization/period-authorization.ts; docs/fiscal-close/README.md#3 | inconsistency |
| `FND-ACC-CLS-011` | low | Outstanding transactions carry no customer names. The persistence record explains that Accounting lacks the CRM name-column grant needed for the intended lookup. | `BR-CAP-ACC-CLS-005-09` | services-accounting:modules/fiscal-close/services/persistence/unaccounted-transactions.ts (header); docs/migrations/fiscal-close/README.md#FC2-3 Follow-ups 3 | debt |
| `FND-ACC-CLS-012` | low | Authorization explanations display the capitalized business-unit reference rather than the customer’s unit name, reducing the usefulness of permission guidance. | `CAP-ACC-CLS-002`, `CAP-ACC-CLS-004` | services-accounting:modules/fiscal-close/services/readiness/close-authorization.ts:unitShown | defect |
| `FND-ACC-CLS-013` | low | The architecture lifecycle omits release and cancellation paths and describes cost work and future-year generation before closure. Execution skips cost work, generates years after finalization and supports additional recovery transitions. | `CON-ACC-CLS-001`, `BR-CAP-ACC-CLS-003-06` | services-accounting:docs/architecture/accounting-2.0/05-lifecycles.md#8. The fiscal period; modules/fiscal-close/services/rules/transitions.ts | inconsistency |
| `FND-ACC-CLS-014` | low | The earlier foundation description permits a failed reopen to return to closed. Implemented failure retains reopening state for retry; only an eligible cancellation restores the earlier closed state. | `BR-CAP-ACC-CLS-012-01`, `CAP-ACC-CLS-011` | services-accounting:docs/migrations/fiscal-close/README.md#FC2-4 Decisions and departures from the brief; services/jobs/fiscal-close-jobs.ts:applyRunFailure | undocumented |
| `FND-ACC-CLS-015` | medium | Interrupted runs can retain a protected month without a dedicated attention item, and future-year failure can leave a successful close paired with a failed job. Infrastructure alarms exist, but the closer has no corresponding notification flow. | `BR-CAP-ACC-CLS-010-07`, `CAP-ACC-CLS-012`, `JNY-ACC-CLS-004`, `JNY-ACC-CLS-005` | services-accounting:docs/fiscal-close/PHASE-2-PLAN.md#4 (DEF-ACT-0819 paragraph); tests/aws/fiscal-close.synth.ts#alarms on a failed and a timed-out execution of each machine | debt |
| `FND-ACC-CLS-016` | medium | The job evaluates authority as the system rather than resolving the requester’s current action grant. The recorded departure explains the mechanism without establishing a Product decision about authority withdrawn after submission. | `BR-CAP-ACC-CLS-008-14`, `OQ-ACC-CLS-001` | services-accounting:docs/migrations/fiscal-close/README.md#FC2-4 Decisions and departures from the brief; react-console:acceptance/accounting/journeys/reconciliation-close/ACT-ACC-0619.json (open decisions) | undocumented |
| `FND-ACC-CLS-017` | low | Readiness includes the viewer’s missing close grant as a required blocker. A reader can consequently see a clean month described as not ready, making the verdict depend on the viewer. | `BR-CAP-ACC-CLS-004-09`, `OQ-ACC-CLS-002` | services-accounting:modules/fiscal-close/tests/e2e/fiscal-close-readiness.e2e.spec.js#answers a reader not ready, blocked by close_authorization alone | undocumented |
| `FND-ACC-CLS-018` | low | The seed execution and automation flags do not reflect the available browser files. Several files are present despite not-started flags, while some requested journeys lack files or are blocked; file existence does not establish a passing run. | `JNY-ACC-CLS-001`, `JNY-ACC-CLS-002`, `JNY-ACC-CLS-003`, `JNY-ACC-CLS-004`, `JNY-ACC-CLS-005`, `JNY-ACC-CLS-006` | react-console:acceptance/accounting/journeys/reconciliation-close/*.json (execution, automation); acceptance/accounting/playwright/journeys/reconciliation-close/ | inconsistency |
| `FND-ACC-CLS-019` | low | An earlier reconciliation journey expects incomplete posting to prevent every finalized reconciliation from closing. The newer late-work journey and current posting support supersede that assumption, leaving the seed expectation stale. | `JNY-ACC-CLS-002`, `CAP-ACC-CLS-006` | react-console:acceptance/accounting/journeys/reconciliation-close/ACT-ACC-0626.json; services-accounting:modules/batches/services/rules/reconciliation-entry-rules.ts | inconsistency |
| `FND-ACC-CLS-020` | medium | The draft’s actor-allocation narrative is stale relative to this checkout. Month-End Closer and Accounting Close Job already use permanent allocations after the existing Accounting actors; the registry is corrected to preserve those allocations, with no renumbering. | `ACT-ACC-015`, `ACT-ACC-016` | rhythm-v2-docs:specs/accounting/ACTORS.md:ACT-ACC-015, ACT-ACC-016; specs/accounting/close/ID_REGISTRY.md:Series | inconsistency |
| `FND-ACC-CLS-021` | low | The initial read scope omitted the records holding close decisions and the components behind its hosted pages. The module registry now names the expanded record and console paths used by the draft and this examination. | `MOD-ACC-CLS` | specs/PRODUCT-AREAS.md (MOD-ACC-CLS row); services-accounting:docs/milestones/plans/ACCT-M4-plan.md; react-console:components/accounting/close/, lib/accounting/close/ | inconsistency |
| `FND-ACC-CLS-022` | low | The dedicated close milestone remains proposed. Design recommendations framed as accepted unless contradicted do not establish approval; specific readiness and reopening intent comes from the approved cross-application plan, while other details remain proposals. | `CAP-ACC-CLS-008`, `CAP-ACC-CLS-010`, `BR-CAP-ACC-CLS-010-04` | services-accounting:docs/milestones/README.md (row 10); docs/fiscal-close/README.md#8 | undocumented |
| `FND-ACC-CLS-023` | low | The design includes a separate readiness evaluation command that is absent from the routes. The implemented read operation calculates readiness each time it is requested. | `CAP-ACC-CLS-004` | services-accounting:docs/fiscal-close/README.md#6.4 APIs; modules/fiscal-close/aws/api/fiscal-close.routes.ts | inconsistency |
| `FND-ACC-CLS-024` | low | A direct close request can create a run even when required readiness work remains. Execution then refuses during revalidation; the seed asks whether submission should instead reject immediately, leaving that interaction for Product. | `BR-CAP-ACC-CLS-008-06` | react-console:acceptance/accounting/journeys/reconciliation-close/ACT-ACC-0616.json (open decisions) | undocumented |
| `FND-ACC-CLS-025` | low | A cited proposed plan suggests comparing receivables control and facts during close. The readiness registry contains no such check, and that proposal has no recorded Product approval. | `CAP-ACC-CLS-004`, `CON-ACC-CLS-002` | services-accounting:docs/milestones/plans/ACCT-M5-plan.md#D10 | debt |
| `FND-ACC-CLS-026` | low | The request accepts syntactically valid warning references without confirming that they name current readiness checks. It deduplicates and retains them, so an unknown reference can remain in the run’s acknowledgements. | `BR-CAP-ACC-CLS-008-01`, `BR-CAP-ACC-CLS-008-11` | services-accounting:modules/fiscal-close/aws/api/fiscal-close.schemas.ts:closeRequestSchema; react-console:acceptance/accounting/journeys/reconciliation-close/ACT-ACC-0617.json (open decisions) | undocumented |
| `FND-ACC-CLS-027` | low | Fiscal-year readiness scope is accepted for a month before the year’s final period. The engine evaluates the supplied month while adding the year checks, rather than rejecting that scope combination. | `BR-CAP-ACC-CLS-004-05` | services-accounting:modules/fiscal-close/services/readiness/evaluate-readiness.ts (header) | undocumented |
| `FND-ACC-CLS-028` | low | Proposed scenarios remain unbound for requester-key identity, warning events, generation failure and horizon stops, restored close details after cancellation, invalid close records, export behavior and truthful cancellation guidance. | `BR-CAP-ACC-CLS-008-04`, `BR-CAP-ACC-CLS-008-11`, `BR-CAP-ACC-CLS-010-06`, `BR-CAP-ACC-CLS-010-07`, `BR-CAP-ACC-CLS-014-04`, `BR-CAP-ACC-CLS-016-01`, `BR-CAP-ACC-CLS-016-02` | rhythm-v2-docs:specs/accounting/close/planning/acceptance/:unbound scenarios | debt |
| `FND-ACC-CLS-029` | low | The transaction-loader commentary describes seven kinds and postpones refunds, but its executable selection includes eight kinds with eligible refunds. The commentary is stale relative to the query. | `BR-CAP-ACC-CLS-005-07` | services-accounting:modules/fiscal-close/services/persistence/unaccounted-transactions.ts (header and UNACCOUNTED_TRANSACTION_TABLES) | inconsistency |
| `FND-ACC-CLS-030` | low | A protected date can still be assigned when creating a batch. Posting and eligible actions later refuse it; the seed raises whether creation should reject earlier, which belongs to Batch management’s Product decision. | `CAP-ACC-CLS-003`, `JNY-ACC-CLS-006` | react-console:acceptance/accounting/journeys/reconciliation-close/ACT-ACC-0621.json (open decisions) | undocumented |
| `FND-ACC-CLS-057` | medium | A close or reopen request whose workflow does not start remains queued and prevents another request for the month without notifying the closer. The local module delegates startup recovery to shared execution, but the pinned area evidence does not establish that recovery or an addressed alert. | `TC-PI-004`, `TC-MON-002`, `TC-AVL-004`, `CAP-ACC-CLS-008`, `CAP-ACC-CLS-011`, `WF-ACC-CLS-001`, `WF-ACC-CLS-002`, `SVC-ACC-CLS-fiscal-close` | Structured control evidence | control-gap |
| `FND-ACC-CLS-058` | medium | Accepted close work executes under system grants without reevaluating the requester’s current permission. The effect of withdrawing that permission on already accepted work has no settled product contract or proved revocation bound; the owning open question must decide this boundary before compliance is claimed. | `TC-AZ-006`, `CAP-ACC-CLS-008`, `WF-ACC-CLS-001`, `SVC-ACC-CLS-fiscal-close`, `OQ-ACC-CLS-001` | Structured control evidence | control-gap |

| `FND-ACC-CLS-031` | medium | The checklist treats advisory errors and blocked advisory checks as blocking for its filters and ordering, while the service includes them among warnings. The dialog asks for acknowledgements only for checks whose outcome is warning, so some service warnings have no acknowledgement control. | `CAP-ACC-CLS-004`, `BR-CAP-ACC-CLS-008-12` | react-console:lib/accounting/close/checks.ts:isBlockingCheck; react-console:components/accounting/close/close-dialog.tsx:CloseDialogBody; services-accounting:modules/fiscal-close/services/readiness/readiness-verdict.ts:isWarning | inconsistency |
| `FND-ACC-CLS-032` | medium | Existing tests support parts of several scenarios rather than their full stated coverage. The clean close contains no warning acknowledgement, the reader journey does not establish every disabled-control reason, the snapshot fixture proves reconstructed rather than final basis, and the failure-recovery browser journey is explicitly skipped. Timing, cancellation after reversal, recognition refusal and audit detail need further proof. | `ATS-ACC-CLS-002-05`, `ATS-ACC-CLS-008-08`, `ATS-ACC-CLS-015-01`, `JNY-ACC-CLS-005`, `BR-CAP-ACC-CLS-009-08`, `BR-CAP-ACC-CLS-012-06`, `BR-CAP-ACC-CLS-013-03`, `BR-CAP-ACC-CLS-014-03` | react-console:acceptance/accounting/playwright/journeys/reconciliation-close/ACT-ACC-0613.spec.ts#ACT-ACC-0613; ACT-ACC-0618.spec.ts:armFault; services-accounting:modules/fiscal-close/tests/integration/services/jobs/close-job.integration.spec.js#requests the A/R aging snapshot of September, reconstructed while gamma still has September open | debt |
| `FND-ACC-CLS-033` | medium | Readiness shares a read-only transaction when called independently, but the module does not establish an isolation level that freezes all reads at one database snapshot. Its re-check and finalization also occur in separate transactions. A single unchanged reading of the books throughout evaluation or execution is not established. | `BR-CAP-ACC-CLS-004-06`, `BR-CAP-ACC-CLS-008-09`, `CON-ACC-CLS-002` | services-accounting:modules/fiscal-close/services/persistence/readiness-transactions.ts:inReadinessTransaction; services/jobs/fiscal-close-job-tasks.ts:revalidate, finalizeClose | undocumented |
| `FND-ACC-CLS-034` | medium | Roll-forward commits each generated year before recording its output. A failure after generation can leave those years committed without a recorded step result; replay recomputes the remaining count and can generate more years. The broad claim that every repeated step writes nothing again therefore does not cover roll-forward. | `BR-CAP-ACC-CLS-008-09`, `BR-CAP-ACC-CLS-010-05`, `BR-CAP-ACC-CLS-010-07` | services-accounting:modules/fiscal-close/services/jobs/fiscal-close-job-tasks.ts:rollForward | undocumented |
| `FND-ACC-CLS-035` | low | The calendar refuses more than one hundred fiscal years, and a close record silently limits linked reopen runs to the oldest one hundred. The execution view also limits a run’s jobs to the oldest one hundred. These bounds lack explicit acceptance scenarios in this layer; the reopen list offers no continuation or indication that later runs are omitted. | `BR-CAP-ACC-CLS-001-09`, `BR-CAP-ACC-CLS-014-08`, `BR-CAP-ACC-CLS-013-09` | services-accounting:modules/fiscal-close/services/persistence/fiscal-periods.ts:listCloseCalendar; services/persistence/period-close-runs.ts:listReopenRunsOfCloseRun | debt |
| `FND-ACC-CLS-036` | low | The reopen confirmation says cost of goods sold postings are reversed, although the close always skips that work and the reopen reverses deferred revenue only. The wording describes an effect the module does not produce. | `CAP-ACC-CLS-011`, `CON-ACC-CLS-003` | react-console:components/accounting/close/reopen-dialog.tsx:ReopenDialogBody; services-accounting:modules/fiscal-close/services/jobs/fiscal-close-job-tasks.ts:bookCogs, reverseRevenue | inconsistency |
| `FND-ACC-CLS-037` | medium | Design: the run view returns a failed step's summary but not the failure's retryability or whether the month was given back. The console therefore offers Retry and Cancel on every failed run and says the month stays closing, even after a re-check refusal or a finalization failure released it, where the service refuses the retry. | `BR-CAP-ACC-CLS-012-03`, `BR-CAP-ACC-CLS-012-04`, `SCR-ACC-CLS-005`, `WF-ACC-CLS-003`, `DOM-ACC-CLS-003` | services-accounting:modules/fiscal-close/services/runs/close-run-view.ts:stepsOf; services/jobs/fiscal-close-jobs.ts:applyRunFailure (outputs.failure.retryable, period_released); react-console:components/accounting/close/close-run-view.tsx:FailurePanel | inconsistency |
| `FND-ACC-CLS-038` | medium | Design: the close design promises audit through the standard record history, but no fiscal close table captures record history. Request and close facts live on the run, while cancellation, unacknowledged warnings and reopen events live only in the job history, which export withholds as operational data and erasure removes. Who cancelled a run is therefore absent from the customer's exported history. | `CAP-ACC-CLS-014`, `CAP-ACC-CLS-016`, `ADR-ACC-CLS-009`, `DOM-ACC-CLS-003`, `DOM-ACC-CLS-004` | services-accounting:docs/fiscal-close/README.md#6.3 Data (owned by this job); modules/fiscal-close/services/jobs/close-run-actions.ts:cancelCloseRun (fiscal_close.run_cancelled); export/fiscal-close.dataset.ts:fiscalCloseExport | undocumented |
| `FND-ACC-CLS-039` | low | Design: the architecture's domain model says close snapshots preserve the finalized receivables aging figure. The snapshot holds readiness, reconciliation and step totals only; the aging request reference (run, version, basis) sits in the run's finalization output, and no figure is stored by the close. | `DOM-ACC-CLS-004`, `CAP-ACC-CLS-015` | services-accounting:docs/architecture/accounting-2.0/04-domain-model.md (Fiscal close paragraph); modules/fiscal-close/services/jobs/fiscal-close-job-tasks.ts:finalizeClose | inconsistency |
| `FND-ACC-CLS-040` | medium | Design: finalization waits sixty seconds at a time for an active monthly aging run, up to sixty times. When the limit is reached the step fails; a close that recognised no revenue then gives its month back as failed, and one that did keeps it closing for retry. A reporting run can therefore defeat a ready close, with no acceptance scenario for the exhausted wait. | `BR-CAP-ACC-CLS-015-04`, `BR-CAP-ACC-CLS-012-04`, `WF-ACC-CLS-001`, `FND-ACC-CLS-001` | services-accounting:modules/fiscal-close/services/jobs/fiscal-close-jobs.ts:fiscalPeriodCloseWorkflow (repeat maxIterations), applyRunFailure | undocumented |
| `FND-ACC-CLS-041` | low | Design: the module asks no model a question, so it has no inference directory; the conventions require the module charter to say so in one sentence, and the charter does not. The design layer cannot edit the charter. | `MOD-ACC-CLS` | rhythm-v2-docs:specs/CONVENTIONS.md#9.8 Inference Operation; services-accounting:modules/fiscal-close (no Platform LLM or provider call) | inconsistency |
| `FND-ACC-CLS-042` | low | Design: the Platform standards the design follows (custom-field capability, submission-compatible operations, jobs, persistence, indexing, row-level security) are outside this job's readable repositories. The design cites them through the Accounting records that adopt them and through the decision ids the corpus already records, not at a pinned services-platform commit. | `ADR-ACC-CLS-010`, `ADR-ACC-CLS-011`, `ADR-ACC-CLS-002`, `SVC-ACC-CLS-fiscal-close` | services-accounting:db/row-level-security.ts; docs/fiscal-close/PHASE-2-PLAN.md#1 Ownership and boundaries; rhythm-v2-docs:specs/crm/entities/design/decisions/ADR-CRM-ENT-007, ADR-CRM-ENT-015 | debt |
| `FND-ACC-CLS-043` | low | Design: a request commits its run and job and then starts the job; if the start fails, the job is left to the Platform reconciler. Until it starts, the run stays queued, the month stays open, and any other close or reopen of that month is refused as already in progress, with nothing telling the closer. | `WF-ACC-CLS-001`, `WF-ACC-CLS-002`, `BR-CAP-ACC-CLS-008-05`, `FND-ACC-CLS-015` | services-accounting:modules/fiscal-close/services/jobs/fiscal-close-jobs.ts:startRunJob (startJobOrLeaveToReconciler); services/jobs/close-run-actions.ts:requestRun | undocumented |
| `FND-ACC-CLS-044` | low | Design: the console's service contract and its demonstration store refuse a close at submission when readiness is not ready, while the live service accepts the request and refuses at the job's re-check. The close dialog hides most of the difference by refusing to confirm a not-ready month, but demonstration behaviour does not match the service. | `BR-CAP-ACC-CLS-008-06`, `SCR-ACC-CLS-001`, `FND-ACC-CLS-024` | react-console:lib/accounting/close/service.ts:FiscalCloseService.startClose; lib/accounting/close/mock/store.ts (notReady at submission); services-accounting:modules/fiscal-close/services/jobs/close-run-actions.ts:requestPeriodClose | inconsistency |

| `FND-ACC-CLS-045` | high | Recognition and reversal commit financial work with run output, but several task history events are appended after that transaction. A failure between commits can leave committed work without its event; replay can skip that append. Roll-forward also commits years before its output. Broad step-atomicity guarantees have been narrowed. | `DOM-ACC-CLS-003`, `WF-ACC-CLS-001`, `WF-ACC-CLS-002`, `SVC-ACC-CLS-fiscal-close` | services-accounting:modules/fiscal-close/services/jobs/fiscal-close-job-tasks.ts:appendEvent, recognizeRevenue, revalidate, finalizeReopen, rollForward | inconsistency |
| `FND-ACC-CLS-046` | medium | The request note is compared on command replay but is absent from the database write-once trigger. The database requires a non-null reopen note and caps its length; the API and job enforce the minimum reason length. Final text distinguishes these guarantees. | `DOM-ACC-CLS-003` | services-accounting:db/migrations/0065_fiscal_close_jobs.sql:period_close_runs_write_once_trigger; modules/fiscal-close/db/period-close-runs.table.ts:periodCloseRuns | inconsistency |
| `FND-ACC-CLS-047` | high | Close and reopen lock only their target month, while sequence validation reads neighbouring months without locks. A queued close of the following month can race a reopen of the previous one; the asserted prevention is not established by those separate row locks. Fiscal-year trigger locking may serialize writes after the sequence reads, without revalidating those reads. A concurrent proof or broader sequence lock is needed. | `DOM-ACC-CLS-001`, `WF-ACC-CLS-002`, `STATE-ACC-CLS-001` | services-accounting:modules/fiscal-close/services/jobs/fiscal-close-job-tasks.ts:lockForClose, lockForReopen; modules/fiscal-close/services/rules/period-sequence.ts:validatePeriodClosing, validatePeriodReopening | undocumented |
| `FND-ACC-CLS-048` | high | Failure handling checks the current job and run before waiting for the period lock, then continues with that earlier run value. A retry or cancellation committed during that wait can invalidate the earlier decision. The compare-and-set can refuse the stale status, but the stronger claim that the handler always re-reads the newest run inside the lock is false; race behavior needs proof. | `STATE-ACC-CLS-002`, `WF-ACC-CLS-001`, `WF-ACC-CLS-002` | services-accounting:modules/fiscal-close/services/jobs/fiscal-close-jobs.ts:applyRunFailure | debt |
| `FND-ACC-CLS-049` | medium | The failed-run panel renders Retry and Cancel without checking their action grants; queued runs have no cancel control. The run page does not render a separate binding-readiness checklist. A transitional workspace has no holding-run link, and an all-closed live calendar returns an adapter error rather than the mock empty notice. Screen contracts now describe these distinctions. | `SCR-ACC-CLS-001`, `SCR-ACC-CLS-002`, `SCR-ACC-CLS-005`, `WF-ACC-CLS-004` | react-console:components/accounting/close/close-run-view.tsx:FailurePanel, RunBody; components/accounting/close/close-workspace.tsx:CloseWorkspace; lib/accounting/close/http-service.ts:getCurrentPeriod | inconsistency |
| `FND-ACC-CLS-050` | medium | The HTTP adapter stops list retrieval after twenty pages and returns the collected records even when a continuation remains. Close History can silently omit runs beyond two thousand per query, including rows used to show captured readiness beside periods. The contract no longer promises complete history. | `SCR-ACC-CLS-004` | react-console:lib/accounting/close/http-service.ts:MAX_PAGES, RUN_PAGE_SIZE, listAll | debt |
| `FND-ACC-CLS-051` | medium | The earlier planning finding says protected dates are accepted at batch creation. The pinned concurrency test calls batch creation and expects its refusal in a closing month; batch persistence invokes the open-period placement rule. The planning layer remains unchanged, but its finding and posting-only test binding need correction by their owner. | `FND-ACC-CLS-030`, `WF-ACC-CLS-006`, `CAP-ACC-CLS-003` | services-accounting:modules/fiscal-close/tests/integration/services/jobs/close-concurrency.integration.spec.js#refuses a batch dated in the closing period; modules/batches/services/persistence/batches.ts:assertBatchPlacedInOpenPeriod | inconsistency |
| `FND-ACC-CLS-052` | low | The pinned participant and export reader expose callbacks and dependency declarations. They do not establish a queue seam, export-part retry, or the Platform deletion scheduler implementation. Those dispatch claims are unknown in the workflow rows; source access to Platform is required to verify them. | `WF-ACC-CLS-007`, `WF-ACC-CLS-008` | services-accounting:modules/maintenance/services/participants/fiscal-close-participant.ts:accountingFiscalCloseParticipant; modules/fiscal-close/export/fiscal-close.reader.ts:exportFiscalClose | undocumented |
| `FND-ACC-CLS-053` | low | No custom-value storage or custom-field request input appears in the inspected close code. That absence does not verify the record registration capability declaration. The objects retain their observed no-custom-field design and explicitly mark the registration declaration unknown; the standard citation remains subject to the existing external-source finding. | `DOM-ACC-CLS-001`, `DOM-ACC-CLS-002`, `DOM-ACC-CLS-003`, `DOM-ACC-CLS-004`, `ADR-ACC-CLS-010` | services-accounting:modules/fiscal-close/aws/api/fiscal-close.schemas.ts:closeRequestSchema; modules/fiscal-close/db/period-close-runs.table.ts:periodCloseRuns; rhythm-v2-docs:specs/PRODUCT-AREAS.md:MOD-ACC-CLS | undocumented |
| `FND-ACC-CLS-054` | low | The job names a design-authoring brief that is absent from the starting checkout. Its instructions cannot be independently examined; the conventions, planning corpus, pinned code and cited product records provide the examination basis. | `MOD-ACC-CLS` | rhythm-v2-docs:briefs/design/accounting-close.brief.md (absent at ab9a9248239614a39a54bdb150c6df762fd3193e) | debt |

| `FND-ACC-CLS-055` | low | The close record emits each reopen request immediately followed by its successful completion, without sorting all entries by time. Interleaved or delayed reopen requests can therefore produce a trail that is not globally chronological. The object description no longer promises chronological order. | `DOM-ACC-CLS-004` | services-accounting:modules/fiscal-close/services/runs/close-run-view.ts:closeRecordOf | inconsistency |
| `FND-ACC-CLS-056` | low | All hosted close pages use PageLayout without a width override, whose default is full. Close and reopen confirmations use Dialog; only cancellation uses AlertDialog. Screen patterns have been corrected from Standard layout and alert dialogs. | `SCR-ACC-CLS-001`, `SCR-ACC-CLS-002`, `SCR-ACC-CLS-003`, `SCR-ACC-CLS-004`, `SCR-ACC-CLS-005` | react-console:components/console/page-layout.tsx:PageLayout; lib/layout/page-width.ts:DEFAULT_PAGE_WIDTH; components/accounting/close/close-dialog.tsx:CloseDialog; reopen-dialog.tsx:ReopenDialog | inconsistency |

| `FND-ACC-CLS-057` | medium | Concurrent calendar reads during finalization and service-side closer-name resolution lack complete proof. Unbound specified cases and uncovered category variants require executable qualification. | `CAP-ACC-CLS-001`, `ATS-ACC-CLS-001` | rhythm-v2-docs:specs/accounting/close/design/tests/ATS-ACC-CLS-001-see-where-each-business-unit-stands-in-its-close-calendar.md#coverage_notes; services-accounting:modules/fiscal-close/tests/integration/services/persistence/fiscal-periods.queries.integration.spec.js#answers the unit’s years oldest first, each mapped whole | coverage-gap |
| `FND-ACC-CLS-058` | medium | Read access to authorization, grants across multiple business units and neighbouring-month sequence races need explicit proof. Unbound specified cases and uncovered category variants require executable qualification. | `CAP-ACC-CLS-002`, `ATS-ACC-CLS-002` | rhythm-v2-docs:specs/accounting/close/design/tests/ATS-ACC-CLS-002-know-whether-a-month-may-be-closed-or-reopened-now.md#coverage_notes; services-accounting:modules/fiscal-close/tests/integration/services/authorization/period-authorization.integration.spec.js#refuses closing a period with an earlier one open, in 1.0’s sentence | coverage-gap |
| `FND-ACC-CLS-059` | medium | Ordinary post and unpost in every protected state are not proved by a batch-creation refusal; the absent late destination also remains unbound. Unbound specified cases and uncovered category variants require executable qualification. | `CAP-ACC-CLS-003`, `ATS-ACC-CLS-003` | rhythm-v2-docs:specs/accounting/close/design/tests/ATS-ACC-CLS-003-keep-a-closing-or-closed-month-shut-to-new-postings.md#coverage_notes; services-accounting:modules/fiscal-close/tests/integration/services/jobs/close-concurrency.integration.spec.js#refuses a batch dated in the closing period | coverage-gap |
| `FND-ACC-CLS-060` | medium | The standalone shared transaction has read-only proof, but concurrent changing inputs and evaluator-to-evaluator continuation need complete acceptance proof. Unbound specified cases and uncovered category variants require executable qualification. | `CAP-ACC-CLS-004`, `ATS-ACC-CLS-004` | rhythm-v2-docs:specs/accounting/close/design/tests/ATS-ACC-CLS-004-judge-whether-a-month-is-ready-to-close.md#coverage_notes; services-accounting:modules/fiscal-close/services/readiness/readiness-types.ts:CloseCheck | coverage-gap |
| `FND-ACC-CLS-061` | medium | Boundary dates across workspace time zones, simultaneous posting changes and protected-period unposting need broader proof. Unbound specified cases and uncovered category variants require executable qualification. | `CAP-ACC-CLS-005`, `ATS-ACC-CLS-005` | rhythm-v2-docs:specs/accounting/close/design/tests/ATS-ACC-CLS-005-make-sure-the-month-s-ledger-is-complete-before-it-closes.md#coverage_notes; services-accounting:modules/fiscal-close/tests/unit/readiness/period-rules.spec.js#is blocked by a period of an earlier year, and counts every one oldest first | coverage-gap |
| `FND-ACC-CLS-062` | medium | The administrator setting is absent; policy changes during evaluation and retention of exception participants through finalization need complete proof. Unbound specified cases and uncovered category variants require executable qualification. | `CAP-ACC-CLS-006`, `ATS-ACC-CLS-006` | rhythm-v2-docs:specs/accounting/close/design/tests/ATS-ACC-CLS-006-make-sure-the-month-s-payments-are-reconciled-before-it-closes.md#coverage_notes; services-accounting:modules/fiscal-close/tests/unit/readiness/reconciliation-checks.spec.js#is blocked by a blocker, its findings the items unchanged, blockers first | coverage-gap |
| `FND-ACC-CLS-063` | medium | Amounts at currency minor-unit boundaries and a changing schedule between preview and execution need complete proof. Unbound specified cases and uncovered category variants require executable qualification. | `CAP-ACC-CLS-007`, `ATS-ACC-CLS-007` | rhythm-v2-docs:specs/accounting/close/design/tests/ATS-ACC-CLS-007-know-what-the-close-will-post-before-it-runs.md#coverage_notes; services-accounting:modules/fiscal-close/tests/unit/readiness/other-checks.spec.js#passes with what the close will recognize: 41 schedules ($63,215.00) | coverage-gap |
| `FND-ACC-CLS-064` | medium | Requester-key identity, warning recording, failed-start handling, output/event commit seams and neighbouring-month races remain unproved or contradicted. Unbound specified cases and uncovered category variants require executable qualification. | `CAP-ACC-CLS-008`, `ATS-ACC-CLS-008` | rhythm-v2-docs:specs/accounting/close/design/tests/ATS-ACC-CLS-008-close-a-month-once-on-what-is-true-when-the-close-runs.md#coverage_notes; services-accounting:modules/fiscal-close/tests/e2e/fiscal-close-runs.e2e.spec.js#refuses a close without an idempotency key with 400 | coverage-gap |
| `FND-ACC-CLS-065` | medium | Recognition refusal, each manual service action, and cancellation after committed reversal need complete proof. Unbound specified cases and uncovered category variants require executable qualification. | `CAP-ACC-CLS-009`, `ATS-ACC-CLS-009` | rhythm-v2-docs:specs/accounting/close/design/tests/ATS-ACC-CLS-009-recognise-the-deferred-revenue-due-at-close-and-take-it-back.md#coverage_notes; services-accounting:modules/fiscal-close/tests/integration/services/jobs/revenue-recognition.integration.spec.js#posts July's deferred revenue system batch, named and dated as 1.0 did | coverage-gap |
| `FND-ACC-CLS-066` | medium | Generation horizon refusal, partial generation replay and failure after a successful close remain unbound. Unbound specified cases and uncovered category variants require executable qualification. | `CAP-ACC-CLS-010`, `ATS-ACC-CLS-010` | rhythm-v2-docs:specs/accounting/close/design/tests/ATS-ACC-CLS-010-close-the-fiscal-year-with-its-last-month-and-keep-years-open.md#coverage_notes; services-accounting:modules/fiscal-close/tests/integration/services/jobs/close-job.integration.spec.js#closes the fiscal year with its twelfth period | coverage-gap |
| `FND-ACC-CLS-067` | medium | Cancelling a retained reopen, adjacent close/reopen races and full reason-length boundaries need complete proof. Unbound specified cases and uncovered category variants require executable qualification. | `CAP-ACC-CLS-011`, `ATS-ACC-CLS-011` | rhythm-v2-docs:specs/accounting/close/design/tests/ATS-ACC-CLS-011-reopen-the-latest-closed-month-with-a-reason.md#coverage_notes; services-accounting:modules/fiscal-close/tests/e2e/fiscal-close-runs.e2e.spec.js#refuses a reason under ten characters with 400 | coverage-gap |
| `FND-ACC-CLS-068` | medium | Queued cancellation, restoring prior close details, stale failure delivery during retry and reopen-kind recovery authority need complete proof. Unbound specified cases and uncovered category variants require executable qualification. | `CAP-ACC-CLS-012`, `ATS-ACC-CLS-012` | rhythm-v2-docs:specs/accounting/close/design/tests/ATS-ACC-CLS-012-recover-a-close-or-reopen-that-stopped-partway.md#coverage_notes; services-accounting:modules/fiscal-close/tests/integration/services/jobs/reopen-job.integration.spec.js#leaves the period reopening | coverage-gap |
| `FND-ACC-CLS-069` | medium | Job-history truncation, exact polling timing, history page limits and recovery availability during changing execution need complete proof. Unbound specified cases and uncovered category variants require executable qualification. | `CAP-ACC-CLS-013`, `ATS-ACC-CLS-013` | rhythm-v2-docs:specs/accounting/close/design/tests/ATS-ACC-CLS-013-follow-a-close-as-it-runs-and-find-every-past-run.md#coverage_notes; services-accounting:modules/fiscal-close/tests/e2e/fiscal-close-runs.e2e.spec.js#lists the run’s events, oldest first | coverage-gap |
| `FND-ACC-CLS-070` | medium | Long correction histories, incomplete-close records, every fixed request field and the snapshot/output commit seams need complete proof. Unbound specified cases and uncovered category variants require executable qualification. | `CAP-ACC-CLS-014`, `ATS-ACC-CLS-014` | rhythm-v2-docs:specs/accounting/close/design/tests/ATS-ACC-CLS-014-keep-a-lasting-record-of-what-each-close-saw.md#coverage_notes; services-accounting:modules/fiscal-close/tests/integration/db/fiscal-close.table.integration.spec.js#refuses the application role any update of a snapshot, which is written once | coverage-gap |
| `FND-ACC-CLS-071` | medium | Finalized aging basis, repeat exhaustion, output retention and the approved nonwaiting result need complete proof. Unbound specified cases and uncovered category variants require executable qualification. | `CAP-ACC-CLS-015`, `ATS-ACC-CLS-015` | rhythm-v2-docs:specs/accounting/close/design/tests/ATS-ACC-CLS-015-hand-the-closed-month-s-receivables-to-reporting.md#coverage_notes; services-accounting:modules/fiscal-close/tests/integration/services/jobs/close-job.integration.spec.js#requests the A/R aging snapshot of September, reconstructed while gamma still has September open | coverage-gap |
| `FND-ACC-CLS-072` | medium | Export execution, per-batch consistency, cutoff boundaries and deletion retry behavior lack complete executable proof; external orchestration remains unknown. Unbound specified cases and uncovered category variants require executable qualification. | `CAP-ACC-CLS-016`, `ATS-ACC-CLS-016` | rhythm-v2-docs:specs/accounting/close/design/tests/ATS-ACC-CLS-016-carry-the-close-history-through-the-workspace-s-export-and.md#coverage_notes; services-accounting:modules/fiscal-close/export/fiscal-close.dataset.ts:fiscalCloseExport | coverage-gap |
| `FND-ACC-CLS-073` | medium | Several inherited scenarios combine assertions from different suites. A suite binding identifies only the assertions that suite executes; it does not prove the whole combined scenario alone. Posting refusal, all protected states, complete permission matrices and recovery outcomes need additional proof. | `MOD-ACC-CLS`, `FND-ACC-CLS-032`, `ATS-ACC-CLS-003-01`, `ATS-ACC-CLS-011-01` | services-accounting:modules/fiscal-close/tests/integration/services/jobs/close-concurrency.integration.spec.js#refuses a batch dated in the closing period; tests/unit/fiscal-close-permissions.spec.ts | coverage-gap |
| `FND-ACC-CLS-074` | high | The recovery browser journey cannot inject its required finalization fault. Its body exists but the fault helper always throws, and the catalogue blocks automation. It supplies no runnable recovery binding until that dependency is provided. A separate posting-and-correction journey is also blocked by its catalogue’s missing reconciliation posting source. | `CAP-ACC-CLS-012`, `FND-ACC-CLS-032` | react-console:acceptance/accounting/playwright/journeys/reconciliation-close/ACT-ACC-0618.spec.ts:armFault; acceptance/accounting/journeys/reconciliation-close/ACT-ACC-0618.json; react-console:acceptance/accounting/playwright/journeys/reconciliation-close/ACT-ACC-0627.spec.ts:journey | coverage-gap |
| `FND-ACC-CLS-075` | medium | Feature scenarios combining retained history, aging, export, erasure, year completion and fault recovery lack complete executable chains. Existing suite fragments and demonstrations cannot establish the proposed whole-feature outcomes. | `FAS-ACC-CLS-01`, `FAS-ACC-CLS-02`, `FAS-ACC-CLS-03`, `FAS-ACC-CLS-04` | rhythm-v2-docs:specs/accounting/close/planning/acceptance/:scenarios; services-accounting:modules/fiscal-close/tests/integration/services/jobs/close-job.integration.spec.js | coverage-gap |

| `FND-ACC-CLS-076` | medium | The blocked-ledger browser journey expects cancellation of its released failed close to conflict. The service permits cancellation of a failed run whose month was already released, so that browser assertion can fail before its later correction steps. Its later feature outcomes remain unverified until the test is corrected by its owner. | `FAS-ACC-CLS-02-01`, `ATS-ACC-CLS-008-04`, `CAP-ACC-CLS-012` | react-console:acceptance/accounting/playwright/journeys/reconciliation-close/ACT-ACC-0616.spec.ts#step 4; services-accounting:modules/fiscal-close/services/jobs/close-run-actions.ts:cancelCloseRun | inconsistency |

| `FND-ACC-CLS-077` | medium | The late-work browser journey first creates an ordinary batch in a closed month, but the pinned batch persistence refuses new placement in a non-open period. Its later posting and forwarding assertions are therefore not established as reachable. | `FAS-ACC-CLS-01-02`, `CAP-ACC-CLS-003`, `FND-ACC-CLS-051` | react-console:acceptance/accounting/playwright/journeys/reconciliation-close/ACT-ACC-0621.spec.ts#step 1; services-accounting:modules/batches/services/persistence/batches.ts:insertBatch; modules/batches/services/rules/batch-rules.ts:assertBatchPlacedInOpenPeriod | inconsistency |
| `FND-ACC-CLS-078` | medium | The checker collects feature scenario identifiers but its generic executable-suite reference check accepts only the artifact identifier map. It also recognizes examination report names without accepting the requested back-fill name. Feature execution candidates remain unbound and the report needs the supported examination filename until the tooling owner repairs both checks. | `MOD-ACC-CLS`, `FAS-ACC-CLS-01`, `FAS-ACC-CLS-02`, `FAS-ACC-CLS-03`, `FAS-ACC-CLS-04` | rhythm-v2-docs:tools/check-corpus.mjs:check (report recognition, scenarioIds and refFields); rhythm-v2-docs:specs/CONVENTIONS.md#10 Implementation and QA Kinds | coverage-gap |

## Open Questions

| id | question | why_it_matters | options | recommendation | affects |
|---|---|---|---|---|---|
| `OQ-ACC-CLS-001` | When should execution check the original requester’s authority again? | A saved close can outlive its requester’s action grant, so Product needs to choose the authority boundary. | A: submission authority remains sufficient. B: revalidation resolves current authority. C: recovery also resolves the original requester’s authority. | The product should re-check the requester’s authority during revalidation and stop when it is withdrawn. | `BR-CAP-ACC-CLS-008-14`, `CAP-ACC-CLS-008`, `FND-ACC-CLS-016` |
| `OQ-ACC-CLS-002` | Should the readiness verdict describe the period independently of its viewer’s action authority? | Reviewers need an accurate view of the books even when they cannot submit closing actions. | A: retain authority as a required check. B: show authority beside a period-only verdict. C: omit the check for readers. | The product should describe the books in the verdict and present action authority separately. | `BR-CAP-ACC-CLS-004-09`, `CAP-ACC-CLS-004`, `FND-ACC-CLS-017` |
| `OQ-ACC-CLS-003` | Should cancellation reverse committed recognition or continue to require retry followed by reopen? | The current recovery requires completing an unwanted close before reversing it, and the confirmation promises a different effect. | A: retain refusal with honest guidance. B: add a guarded reversal during closing. C: remove cancellation after recognition. | The product should explain the current refusal first and consider reversal on cancellation only after Batch management supports it safely. | `BR-CAP-ACC-CLS-012-06`, `BR-CAP-ACC-CLS-012-10`, `CAP-ACC-CLS-009`, `FND-ACC-CLS-003` |
| `OQ-ACC-CLS-004` | Which customer-facing control should expose required bank verification? | The stored policy has approval, but customers cannot configure it through the present setting flow. | A: an administrator control in Accounting settings. B: a staff-managed switch on request. C: a new business-unit policy. | The product should expose the workspace choice in Accounting settings with administrator authority. | `BR-CAP-ACC-CLS-006-06`, `CAP-ACC-CLS-006`, `FND-ACC-CLS-002` |
| `OQ-ACC-CLS-005` | Should a completed close or reopen, or a run left failed or unstarted, tell anyone beyond its own run page? | The module publishes no event and raises no attention item. Other areas learn that a month closed only by reading the period, and a stranded run that keeps a month closing is visible only to someone who opens its page. | A: keep the run page as the only signal. B: raise an attention item for a failed or long-queued run that holds a month. C: also publish a month-closed and month-reopened event for Reporting and other consumers. | The product should adopt B now, through the Platform attention capability on a registered close-run object, and add C only when a named consumer needs it. | `CAP-ACC-CLS-012`, `CAP-ACC-CLS-013`, `SVC-ACC-CLS-fiscal-close`, `FND-ACC-CLS-015`, `FND-ACC-CLS-043` |
