85 lines
5.2 KiB
Markdown
85 lines
5.2 KiB
Markdown
# V1.1 Handoff: Done vs Pending
|
|
|
|
Date: 2026-03-19
|
|
|
|
## Completed in this pass
|
|
|
|
### Owner KPI (scan-first)
|
|
- [x] Snapshot freshness now updates when KPI rows are edited (`patchWeeklyKpiRow` touches parent snapshot `updatedAt`).
|
|
- [x] Owner board metadata now shows `source` together with `lastUpdatedAt` and coverage.
|
|
- [x] Drill-down `<details>` sections are no longer forced closed on rerender.
|
|
|
|
### Human Capital
|
|
- [x] Removed write side-effect from `GET /api/human-capital/dashboard` (read no longer auto-publishes KPIs).
|
|
- [x] `people` endpoint now requires owner/HC leader (`canManageHumanCapital`) for employee-level visibility.
|
|
- [x] `lifecycle-events` GET now requires owner/HC leader.
|
|
- [x] `updates` GET now hides non-published items from non-managers.
|
|
- [x] CSV export fixed to real newlines (`\n`) instead of escaped `\\n` text.
|
|
- [x] People endpoint now calls `ensureEmployeeProfiles()` to reduce first-load/race gaps.
|
|
- [x] HC compliance input excludes auto-published HC KPI section (`human-capital-auto-v1`) to prevent KPI self-feedback.
|
|
- [x] Churn trend denominator now uses month-specific estimated headcount rather than current headcount for all months.
|
|
|
|
### Operations / Maintenance
|
|
- [x] Removed write side-effect from `GET /api/operations/dashboard` (read no longer auto-publishes KPIs).
|
|
- [x] Added owner approval action endpoint: `PATCH /api/operations/approvals/[id]`.
|
|
- [x] Added policy endpoint: `GET/PATCH /api/operations/policy`.
|
|
- [x] Work-order read/list is department-scoped.
|
|
- [x] Template read/list is department-scoped.
|
|
- [x] Reminder read/list is department-scoped.
|
|
- [x] Asset update/delete now validates department ownership before mutating.
|
|
- [x] Work-order patch now validates department scope and blocks non-owner state transitions when owner approval is pending.
|
|
- [x] Production-plan patch now validates department scope and enforces owner-only transitions for `approved/released`.
|
|
- [x] Production-plan create enforces owner-only for privileged states and sets approval metadata accordingly.
|
|
- [x] Maintenance policy bootstrap now backfills missing owner approver when possible.
|
|
- [x] Work-order create now validates asset/template department ownership and resolves owner approver fallback.
|
|
- [x] Operations dashboard payload now includes `workOrderId` / `productionPlanId` in approval inbox entries.
|
|
- [x] Operations UI owner inbox now has Approve/Reject actions wired to approval API.
|
|
- [x] Operations UI now shows down-assets in summary and an upcoming maintenance list.
|
|
|
|
### Marketing
|
|
- [x] Meta connection/disconnect now avoids inactive-row unique collisions by clearing stale inactive rows before state flips.
|
|
- [x] Meta sync now attempts both Facebook and Instagram ingestion (best-effort Instagram discovery/fetch).
|
|
- [x] Social snapshot writes now dedupe same `department+channel+range+capturedAt` before create.
|
|
- [x] SocialPanel no longer computes local fallback growth math from snapshots; it displays server insights only.
|
|
- [x] Initiative drawer now includes attribution fields in UI: channel, page ID, campaign tag, date window.
|
|
- [x] Initiative drawer includes "Use auto values" action and displays last auto-fill summary.
|
|
- [x] Marketing scoring and initiative mapping now consume auto-attributed actuals when manual values are still zero.
|
|
- [x] Sync auto-fill now respects attribution page/date windows; campaign-tagged records are intentionally skipped until campaign-level data is ingested.
|
|
|
|
### Database / schema
|
|
- [x] Prisma migration created: `prisma/migrations/20260319180300_0012_v11_scan_first_owner_department_dashboards/migration.sql`.
|
|
|
|
## Validation status
|
|
- [x] `npm test` passes (19/19).
|
|
- [x] `npm run build` passes.
|
|
- [ ] Recharts static-generation warnings remain (`width(-1)/height(-1)`), non-blocking but should be cleaned later.
|
|
|
|
## Remaining / Follow-up items
|
|
|
|
### High-priority follow-up
|
|
- [ ] Add campaign-level attribution ingestion for Meta sync (currently campaign-tagged initiatives are skipped to avoid bad attribution).
|
|
- [ ] Add explicit CRUD coverage for operations entities still missing full lifecycle endpoints (e.g., delete/update routes for every list entity as originally envisioned).
|
|
- [ ] Add automated API tests for new authorization hardening and owner-approval transition guards.
|
|
|
|
### Medium-priority follow-up
|
|
- [ ] Add UI controls for operations policy thresholds (`costThreshold`, `downtimeThresholdHours`, approver owner).
|
|
- [ ] Improve Instagram metrics quality (current implementation is best-effort and may use limited fields depending on account permissions).
|
|
- [ ] Normalize/chunk dashboard chart containers to remove Recharts build-time width warnings.
|
|
|
|
### Optional / V1.2 candidates
|
|
- [ ] Improve attribution model to support campaign/source dimensions end-to-end in stored metrics.
|
|
- [ ] Add audit trail events for owner approval actions (who/when/why) in UI timeline.
|
|
- [ ] Add integration tests for Meta sync -> initiative auto-fill -> publish -> owner KPI chain.
|
|
|
|
## Quick resume commands
|
|
|
|
```bash
|
|
cd /home/mdares03/benell
|
|
npm test
|
|
npm run build
|
|
```
|
|
|
|
## Notes for next person
|
|
- Projects module was intentionally left unchanged per V1.1 scope.
|
|
- Department dashboards now feed owner KPI via explicit publish endpoints (read endpoints no longer mutate KPI data).
|