Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -68,7 +68,12 @@
"id": "governance-endpoints",
"category": "Governance Operations",
"label": "Workstation endpoints expose governance break queue and calibration routes",
"paths": ["src/Meridian.Ui.Shared/Endpoints/WorkstationEndpoints.cs"],
"paths": [
"src/Meridian.Ui.Shared/Endpoints/WorkstationEndpoints.cs",
# Route literals moved into UiApiRoutes constants; scan both so
# constant-backed routes still count as endpoint evidence.
"src/Meridian.Contracts/Api/UiApiRoutes.cs",
],
"terms": ["break-queue", "calibration-summary", "sign-off"],
"weight": 3,
"remediation": "Keep governance readiness tied to workstation endpoints and documented route evidence.",
Expand Down
4 changes: 4 additions & 0 deletions docs/generated/repository-structure.md
Original file line number Diff line number Diff line change
Expand Up @@ -4504,6 +4504,7 @@ Meridian-main
│ │ │ │ ├── V_ledger_005__journal_basis_lineage.sql
│ │ │ │ ├── V_ledger_006__journal_posting_kind.sql
│ │ │ │ ├── V_ledger_007__journal_adjustment_approval_metadata.sql
│ │ │ │ ├── V_ledger_008__closing_entry_posting_kind.sql
│ │ │ │ ├── V_ledger_008__operations_continuity.sql
│ │ │ │ ├── V_ledger_009__tax_lot_persistence.sql
│ │ │ │ ├── V_ledger_010__accounting_configuration.sql
Expand Down Expand Up @@ -5562,6 +5563,7 @@ Meridian-main
│ │ │ ├── IngestionJobEndpoints.cs
│ │ │ ├── LeanEndpoints.cs
│ │ │ ├── LedgerEndpoints.cs
│ │ │ ├── LedgerEndpoints.JournalAutomation.cs
│ │ │ ├── LiveDataEndpoints.cs
│ │ │ ├── LoginSessionMiddleware.cs
│ │ │ ├── MaintenanceScheduleEndpoints.cs
Expand Down Expand Up @@ -5691,6 +5693,7 @@ Meridian-main
│ │ │ ├── InvestmentAccountingTransactionLabService.cs
│ │ │ ├── IProviderModuleSetupService.cs
│ │ │ ├── LedgerAmountProvenanceService.cs
│ │ │ ├── LedgerDimensionMapper.cs
│ │ │ ├── MultiAssetCoverageReadService.cs
│ │ │ ├── OmsIntegrationService.cs
│ │ │ ├── OperationsContinuityReconciliationBridge.cs
Expand Down Expand Up @@ -7216,6 +7219,7 @@ Meridian-main
│ │ │ └── SecurityMaster
│ │ │ └── SecurityKindMappingTests.cs
│ │ ├── Reporting
│ │ │ ├── NavAttributionServiceTests.cs
│ │ │ ├── ReportGenerationServiceTests.cs
│ │ │ ├── ReportingOrchestrationServiceTests.cs
│ │ │ ├── ReportSnapshotDiffEngineTests.cs
Expand Down
3 changes: 3 additions & 0 deletions docs/product/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,9 @@ It routes non-technical audiences to verified evidence and prevents duplicate cl
- [High-Value Code Brainstorm (2026-07)](high-value-code-brainstorm-2026-07.md) — market-researched
prioritization of the next highest-value implementable features, sequenced against the W6/W7
roadmap lanes
- [Data Provider & Accounting Code Brainstorm (2026-07)](data-provider-accounting-brainstorm-2026-07.md) —
code-grounded improvement lanes for the provider and accounting subsystems with a dated status
table tracking which lanes have since shipped
- [Portfolio Cash Ladder Blueprint (2026-07)](portfolio-cash-ladder-blueprint-2026-07.md) —
code-ready design for the wave-8 portfolio cash-flow forecasting and liquidity ladder engine,
aggregating per-security projection runs into scenario-aware, per-currency cash ladders
Expand Down
12 changes: 9 additions & 3 deletions docs/product/data-provider-accounting-brainstorm-2026-07.md
Original file line number Diff line number Diff line change
Expand Up @@ -33,9 +33,9 @@ analysis of 2026-07-05, with dated update notes where the premise has changed. C
| 3 | Unified data quality + browser dashboard | Partially done | The Data workspace now renders `DataQualityRegion` over `/api/quality/dashboard`. Remaining: unifying the three scoring subsystems behind one composite health model, and contextual gap actions (one-click backfill). |
| 4 | Backfill feedback loop | Done | `OnProgressUpdate` is raised with subscriber-failure guards; SLA metadata is typed (`BackfillRemediationSlaDecision`/`Metadata`/`Status`); the remediation provider is an options default rather than hard-coded. |
| 5 | Failure & rate-limit hardening | Partially done | `DataSourceRegistry` now records activation/registration failures via `RecordFailure`. Remaining: typed rate-limit detection (string matching on `"429"`/`"rate limit"` still present in the composite), streaming-side rate-limit tracking, and confirming registration failures surface in the provider catalog UI. |
| 6 | Mark-to-market wiring | Largely done | `DailyMarkToMarketService` runs `DailyPortfolioPricingProjector` into governed drafts, with tests. Remaining: `NavAttributionService` still computes `totalNav` as a sum of all component balances rather than assets − liabilities, and NAV consumption of the marked book needs end-to-end verification. |
| 7 | Automated journal drafts | Partially done | Corporate-action/dividend event producers and draft intake shipped (`AutomatedJournalEventKind`, `DurableAutomatedJournalPoster`, `AutomatedJournalDraftIntakeService`). Remaining: management/performance-fee and withholding-tax accrual producers on a schedule. |
| 8 | Closing entries + retained-earnings roll | Projector built, unwired | `PeriodCloseProjector`/`PeriodCloseDraftBuilder` now exist in `Meridian.Ledger` but have no callers outside the library — the hard-close sequence in close management does not yet invoke them. |
| 6 | Mark-to-market wiring | Done (2026-07-06) | `DailyMarkToMarketService` runs `DailyPortfolioPricingProjector` into governed drafts, with tests. `NavAttributionService` now computes NAV as assets − liabilities (with `ByAssetClass` decomposing that total), covered by `NavAttributionServiceTests`. |
| 7 | Automated journal drafts | Done (2026-07-06) | Corporate-action/dividend producers, management/performance-fee accrual (`FeeScheduleAccrualEventProducer` + `RunFeeAccrualIntakeAsync` + endpoint), and dividend withholding-tax accrual (`WithholdingTaxRate` on the dividend intake lane) all land governed drafts in the workbench queue. Operator/cockpit-triggered; recurring scheduling remains optional follow-on. |
| 8 | Closing entries + retained-earnings roll | Done (2026-07-06) | `AutomatedJournalIntakeRunner.RunPeriodCloseIntakeAsync` projects closing entries from a closed period's trial balance and lands the governed draft in the workbench queue via `/api/ledger/journal-automation/period-close-intake`; open periods are rejected loudly. |
| 9 | One ledger spine | Open | `DurableAutomatedJournalPoster` is the emerging draft-posting seam, but hydration of read surfaces from `ILedgerJournalStore`, as-of indexing, and the F#/C# enum-ordinal guard test have not started. |
| 10 | Fill-to-ledger durability | Done | `LedgerPostingConsumer.Publish` now blocks on channel capacity (`WaitToWriteAsync` loop) instead of dropping fills, with a regression test covering the full-channel case. |

Expand Down Expand Up @@ -218,6 +218,12 @@ through the existing event-pipeline policy channels, drop-oldest). The SLA metad
touches persisted execution logs — route through the WAL/`AtomicFileWriter` patterns and keep the
parser as fallback for old records.

> **Update (2026-07-06):** implemented — `CompositeHistoricalDataProvider` raises progress through
> `RaiseProgress`, `AutoGapRemediationService` stores typed `BackfillRemediationSlaMetadata`
> records, and the remediation provider comes from `AutoGapRemediationPolicy.DefaultProvider`
> rather than a hard-coded call-site. This lane is done; the narrative above is the point-in-time
> analysis, not a work list.

### 5. Provider Failure & Rate-Limit Hardening

Three small findings that share a theme — failures that vanish. `DataSourceRegistry.cs` swallows
Expand Down
1 change: 0 additions & 1 deletion docs/status/TODO.md
Original file line number Diff line number Diff line change
Expand Up @@ -103,7 +103,6 @@ Total items: **213**
| `src/Meridian.Ui/dashboard/src/screens/accounting-screen.view-model.ts` | 6070 | `NOTE` | ❌ | note: event.sourceReason ?? (event.isCurrentProjection ? "Current schedule projection." : null) |
| `src/Meridian.Ui/dashboard/src/screens/covered-call-screen.view-model.ts` | 287 | `NOTE` | ❌ | note: string; |
| `src/Meridian.Ui/dashboard/src/screens/covered-call-screen.view-model.ts` | 990 | `NOTE` | ❌ | note: "Covered-call net curve requires the underlying cost basis which is not yet threaded through the API. The chart shows the short-call leg only." |
| `src/Meridian.Ui/dashboard/src/screens/daily-control-tower-screen.test.tsx` | 76 | `NOTE` | ❌ | note: "Paper endpoint returned intermittent quote gaps.", |
| `src/Meridian.Ui/dashboard/src/screens/data-screen.security-master.ts` | 128 | `NOTE` | ❌ | note: string; |
| `src/Meridian.Ui/dashboard/src/screens/data-screen.security-master.ts` | 141 | `NOTE` | ❌ | note: string; |
| `src/Meridian.Ui/dashboard/src/screens/data-screen.security-master.ts` | 437 | `NOTE` | ❌ | note: "Matches issuer relations and SEC 8-K references. Amount amended from $2.75 at board confirmation.", |
Expand Down
38 changes: 22 additions & 16 deletions docs/status/api-contract-coverage-dashboard.json
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,8 @@
"endpoint_coverage_percent": 100.0,
"contract_coverage_percent": 100.0,
"summary": {
"endpoint_count": 595,
"documented_endpoint_count": 595,
"endpoint_count": 596,
"documented_endpoint_count": 596,
"undocumented_endpoint_count": 0,
"workstation_contract_count": 814,
"documented_workstation_contract_count": 814,
Expand Down Expand Up @@ -1838,6 +1838,24 @@
"source": "src/Meridian.Ui.Shared/Endpoints/LeanEndpoints.cs:549",
"documented": true
},
{
"method": "POST",
"path": "/api/ledger/journal-automation/dividend-intake",
"source": "src/Meridian.Ui.Shared/Endpoints/LedgerEndpoints.JournalAutomation.cs:19",
"documented": true
},
{
"method": "POST",
"path": "/api/ledger/journal-automation/fee-accrual-intake",
"source": "src/Meridian.Ui.Shared/Endpoints/LedgerEndpoints.JournalAutomation.cs:61",
"documented": true
},
{
"method": "POST",
"path": "/api/ledger/journal-automation/period-close-intake",
"source": "src/Meridian.Ui.Shared/Endpoints/LedgerEndpoints.JournalAutomation.cs:103",
"documented": true
},
{
"method": "GET",
"path": "/api/ledger/books",
Expand Down Expand Up @@ -2132,28 +2150,16 @@
"source": "src/Meridian.Ui.Shared/Endpoints/LedgerEndpoints.cs:1975",
"documented": true
},
{
"method": "POST",
"path": "/api/ledger/journal-automation/dividend-intake",
"source": "src/Meridian.Ui.Shared/Endpoints/LedgerEndpoints.cs:2018",
"documented": true
},
{
"method": "POST",
"path": "/api/ledger/journal-automation/fee-accrual-intake",
"source": "src/Meridian.Ui.Shared/Endpoints/LedgerEndpoints.cs:2060",
"documented": true
},
{
"method": "POST",
"path": "/api/ledger/journal-entry-workbench/evidence",
"source": "src/Meridian.Ui.Shared/Endpoints/LedgerEndpoints.cs:2102",
"source": "src/Meridian.Ui.Shared/Endpoints/LedgerEndpoints.cs:2020",
"documented": true
},
{
"method": "POST",
"path": "/api/ledger/journal-entry-workbench/lifecycle-action",
"source": "src/Meridian.Ui.Shared/Endpoints/LedgerEndpoints.cs:2145",
"source": "src/Meridian.Ui.Shared/Endpoints/LedgerEndpoints.cs:2063",
"documented": true
},
{
Expand Down
11 changes: 6 additions & 5 deletions docs/status/api-contract-coverage-dashboard.md
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ Tracks whether mapped API routes and workstation DTO contracts are visible in th
| Weighted score | 100.0% |
| Endpoint coverage | 100.0% |
| Workstation contract coverage | 100.0% |
| Endpoints documented | 595 / 595 |
| Endpoints documented | 596 / 596 |
| Workstation contracts documented | 814 / 814 |

## Endpoint Coverage
Expand Down Expand Up @@ -259,12 +259,13 @@ Tracks whether mapped API routes and workstation DTO contracts are visible in th
| `POST` | `/api/ledger/close-management/period-plan/configuration` | Documented | `src/Meridian.Ui.Shared/Endpoints/LedgerEndpoints.cs:1071` |
| `GET` | `/api/ledger/close-management/period-plan/{workflowId:guid}` | Documented | `src/Meridian.Ui.Shared/Endpoints/LedgerEndpoints.cs:1045` |
| `POST` | `/api/ledger/close-management/task-signoffs` | Documented | `src/Meridian.Ui.Shared/Endpoints/LedgerEndpoints.cs:1221` |
| `POST` | `/api/ledger/journal-automation/dividend-intake` | Documented | `src/Meridian.Ui.Shared/Endpoints/LedgerEndpoints.cs:2018` |
| `POST` | `/api/ledger/journal-automation/fee-accrual-intake` | Documented | `src/Meridian.Ui.Shared/Endpoints/LedgerEndpoints.cs:2060` |
| `POST` | `/api/ledger/journal-automation/dividend-intake` | Documented | `src/Meridian.Ui.Shared/Endpoints/LedgerEndpoints.JournalAutomation.cs:19` |
| `POST` | `/api/ledger/journal-automation/fee-accrual-intake` | Documented | `src/Meridian.Ui.Shared/Endpoints/LedgerEndpoints.JournalAutomation.cs:61` |
| `POST` | `/api/ledger/journal-automation/period-close-intake` | Documented | `src/Meridian.Ui.Shared/Endpoints/LedgerEndpoints.JournalAutomation.cs:103` |
| `GET` | `/api/ledger/journal-entry-workbench` | Documented | `src/Meridian.Ui.Shared/Endpoints/LedgerEndpoints.cs:1562` |
| `POST` | `/api/ledger/journal-entry-workbench/drafts` | Documented | `src/Meridian.Ui.Shared/Endpoints/LedgerEndpoints.cs:1883` |
| `POST` | `/api/ledger/journal-entry-workbench/evidence` | Documented | `src/Meridian.Ui.Shared/Endpoints/LedgerEndpoints.cs:2102` |
| `POST` | `/api/ledger/journal-entry-workbench/lifecycle-action` | Documented | `src/Meridian.Ui.Shared/Endpoints/LedgerEndpoints.cs:2145` |
| `POST` | `/api/ledger/journal-entry-workbench/evidence` | Documented | `src/Meridian.Ui.Shared/Endpoints/LedgerEndpoints.cs:2020` |
| `POST` | `/api/ledger/journal-entry-workbench/lifecycle-action` | Documented | `src/Meridian.Ui.Shared/Endpoints/LedgerEndpoints.cs:2063` |
| `POST` | `/api/ledger/journal-entry-workbench/submit-approval` | Documented | `src/Meridian.Ui.Shared/Endpoints/LedgerEndpoints.cs:1975` |
| `POST` | `/api/ledger/journal-entry-workbench/validate` | Documented | `src/Meridian.Ui.Shared/Endpoints/LedgerEndpoints.cs:1934` |
| `GET` | `/api/ledger/periods` | Documented | `src/Meridian.Ui.Shared/Endpoints/LedgerEndpoints.cs:147` |
Expand Down
12 changes: 6 additions & 6 deletions docs/status/coverage-report.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@

## Overall Coverage

**2696 / 7335** items documented (**36.8%**) — Grade: **F**
**2698 / 7335** items documented (**36.8%**) — Grade: **F**

```text
[=======-------------] 36.8%
Expand All @@ -15,15 +15,15 @@

| Category | Documented | Total | Coverage | Grade |
| ---------- | ----------- | ------- | ---------- | ------- |
| Public Classes / Interfaces | 2576 | 6913 | 37.3% | F |
| Public Classes / Interfaces | 2578 | 6913 | 37.3% | F |
| API Endpoints | 106 | 275 | 38.5% | F |
| Configuration Options | 3 | 136 | 2.2% | F |
| Provider Implementations | 0 | 0 | 100.0% | A |
| ADR Implementations | 11 | 11 | 100.0% | A |

## Undocumented Items

### Public Classes / Interfaces (4337 undocumented)
### Public Classes / Interfaces (4335 undocumented)

| Item | Location |
| ------ | ---------- |
Expand All @@ -33,7 +33,6 @@
| `DailyMarkToMarketRequest` | `src/Meridian.Application/Accounting/DailyMarkToMarketService.cs:39` |
| `DailyMarkToMarketRun` | `src/Meridian.Application/Accounting/DailyMarkToMarketService.cs:53` |
| `BackfillRemediationSlaTier` | `src/Meridian.Application/Backfill/AutoGapRemediationService.cs:46` |
| `BackfillRemediationSlaMetadata` | `src/Meridian.Application/Backfill/AutoGapRemediationService.cs:64` |
| `BackfillRemediationSlaStatus` | `src/Meridian.Application/Backfill/AutoGapRemediationService.cs:72` |
| `BackfillRemediationSlaStatusItem` | `src/Meridian.Application/Backfill/AutoGapRemediationService.cs:81` |
| `BackfillRemediationSlaSnapshot` | `src/Meridian.Application/Backfill/AutoGapRemediationService.cs:98` |
Expand Down Expand Up @@ -77,7 +76,8 @@
| `RestatementCandidateResult` | `src/Meridian.Application/SecurityMaster/IPeriodAwareRestatementResolver.cs:44` |
| `SecurityMasterRevisionRecord` | `src/Meridian.Application/SecurityMaster/ISecurityMasterRevisionStore.cs:52` |
| `NullSecurityMasterPricingService` | `src/Meridian.Application/SecurityMaster/NullSecurityMasterClearwaterServices.cs:10` |
| ... and 4287 more | |
| `NullSecurityMasterCashFlowService` | `src/Meridian.Application/SecurityMaster/NullSecurityMasterClearwaterServices.cs:37` |
| ... and 4285 more | |

### API Endpoints (169 undocumented)

Expand Down Expand Up @@ -193,7 +193,7 @@

## Recommendations

1. **Public Classes / Interfaces**: 4337 undocumented types. Consider generating API docs with DocFX (`docfx docfx.json`) to cover the long tail of public types automatically.
1. **Public Classes / Interfaces**: 4335 undocumented types. Consider generating API docs with DocFX (`docfx docfx.json`) to cover the long tail of public types automatically.
2. **API Endpoints**: 169 endpoint(s) missing from `docs/reference/api-reference.md`. Run the endpoint audit and update the API reference table.
3. **Configuration Options**: 133 config key(s) not found in `docs/generated/configuration-schema.md`. Re-run the configuration schema generator to synchronise.

Expand Down
15 changes: 7 additions & 8 deletions docs/status/doc-health-dashboard.json
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
{
"total_files": 543,
"total_lines": 90772,
"orphaned_count": 208,
"total_lines": 90730,
"orphaned_count": 207,
"no_heading_count": 38,
"stale_count": 0,
"todo_count": 204,
"average_lines": 167.2,
"average_lines": 167.1,
"health_score": 83,
"orphaned_files": [
".agents/skills/meridian-archive-organizer/SKILL.md",
Expand Down Expand Up @@ -172,7 +172,6 @@
"docs/plans/ufl-warrant-target-state-v2.md",
"docs/plans/wave-implementation-checklists.md",
"docs/plans/web-ui-development-pivot.md",
"docs/product/data-provider-accounting-brainstorm-2026-07.md",
"docs/product/deferred-expansion-boundaries.md",
"docs/reference/governance-report-packs.md",
"docs/reference/research-briefing-workflow.md",
Expand Down Expand Up @@ -2149,7 +2148,7 @@
},
{
"path": "docs/generated/repository-structure.md",
"line_count": 7954,
"line_count": 7943,
"has_heading": true,
"todo_count": 9,
"last_modified_utc": "1970-01-01T00:00:00+00:00",
Expand Down Expand Up @@ -3069,7 +3068,7 @@
},
{
"path": "docs/product/data-provider-accounting-brainstorm-2026-07.md",
"line_count": 450,
"line_count": 456,
"has_heading": true,
"todo_count": 0,
"last_modified_utc": "1970-01-01T00:00:00+00:00",
Expand Down Expand Up @@ -3117,7 +3116,7 @@
},
{
"path": "docs/product/README.md",
"line_count": 214,
"line_count": 217,
"has_heading": true,
"todo_count": 2,
"last_modified_utc": "1970-01-01T00:00:00+00:00",
Expand Down Expand Up @@ -4365,7 +4364,7 @@
},
{
"path": "src/Meridian.Storage/README.md",
"line_count": 337,
"line_count": 326,
"has_heading": true,
"todo_count": 1,
"last_modified_utc": "1970-01-01T00:00:00+00:00",
Expand Down
8 changes: 4 additions & 4 deletions docs/status/doc-health-dashboard.md
Original file line number Diff line number Diff line change
Expand Up @@ -20,9 +20,9 @@ Data sources: `repo markdown (*.md)`, `file modification metadata`
| Metric | Value |
| -------- | ------- |
| Total documentation files | 543 |
| Total lines | 90,772 |
| Average file size (lines) | 167.2 |
| Orphaned files | 208 |
| Total lines | 90,730 |
| Average file size (lines) | 167.1 |
| Orphaned files | 207 |
| Files without headings | 38 |
| Stale files (>90 days) | 0 |
| TODO/FIXME markers | 204 |
Expand Down Expand Up @@ -93,7 +93,7 @@ These files are not linked from any other Markdown file in the repository:

| Date | Score | Files | Orphans | Stale |
| ------ | ------- | ------- | --------- | ------- |
| 1970-01-01 | 83 | 543 | 208 | 0 |
| 1970-01-01 | 83 | 543 | 207 | 0 |

---

Expand Down
Loading
Loading