Compare commits

..

3 Commits

50 changed files with 66657 additions and 700 deletions
@@ -6,9 +6,9 @@
"sourceBranch": "test/pre-phase10-ux-acceptance",
"localCommit": "ba04d817fed26d659bfa2a56b089d6cac851dc34",
"localCommitMeaning": "FROZEN_TESTED_APPLICATION_BASELINE",
"snapshotHead": "ba04d817fed26d659bfa2a56b089d6cac851dc34",
"verifiedRemoteCommit": "ba04d817fed26d659bfa2a56b089d6cac851dc34",
"remoteObservation": "Candidate snapshot exact remote readback at2026-10-29T23:37:45.931733+00:00; final documentation envelope HEAD must independently be rechecked.",
"snapshotHead": "fc5b9d377199ce51f480a920a3772108094929e3",
"verifiedRemoteCommit": "fc5b9d377199ce51f480a920a3772108094929e3",
"remoteObservation": "Proposed execution candidate exact remote readback 2026-10-30T07:47:11.270216+00:00; frozen application source remainsba04d817fed26d659bfa2a56b089d6cac851dc34. Resolve final clean envelope HEAD independently.",
"worktreeCleanliness": {
"atSourceBaseline": "CLEAN",
"atPackageGeneration": "HANDOFF_FILES_ONLY",
@@ -128,7 +128,7 @@
"evidence": [
"ENTRY_PROPOSAL.json"
],
"limits": "Candidateba04d817fed26d659bfa2a56b089d6cac851dc34 exact remote readback at2026-10-29T23:37:45.931733+00:00; final package envelope HEAD still requires clean/current remote verification."
"limits": "Execution candidatefc5b9d377199ce51f480a920a3772108094929e3 verified by exact remote readback; actual final envelope HEAD still requires independent current verification."
},
{
"criterion": "Phase 10 Development Readiness",
@@ -205,6 +205,6 @@
"authority": "EXTERNAL_PROTECTED_CONTROLLER_APPROVAL"
}
],
"generatedUtc": "2026-10-29T23:37:45.931733+00:00",
"generatedUtc": "2026-10-30T07:47:11.270216+00:00",
"recommendation": "Pre-Phase10 preparation conditionally closed. Retain release/activation debt. Stop at protected orchestrator gate until actual composite adapter, signed exact final baseline/P10-00-only scope policy and owner-controlled runtime/entry activation are satisfied. No cleanup or production action."
}
@@ -2,14 +2,14 @@
"schemaVersion": 1,
"workstreamId": "P10-ENTRY-FINAL",
"authority": "EVIDENCE_ONLY_NOT_OWNER_APPROVAL",
"candidateCommit": "ba04d817fed26d659bfa2a56b089d6cac851dc34",
"candidateCommit": "fc5b9d377199ce51f480a920a3772108094929e3",
"acceptedBranch": "test/pre-phase10-ux-acceptance",
"applicationFixCommit": "154a9e89f565e786d7df00bf93d873da900a7c7d",
"packageHeadRule": "Resolve final clean published envelope HEAD independently; bind it, the candidate snapshot, exact scope, policy and artifact hashes in protected approval. No self-referential commit claim.",
"entryDecision": "NO-GO",
"eligibleForAutomaticExecution": false,
"productionDecision": "NO-GO",
"generatedUtc": "2026-10-29T23:37:45.931733+00:00",
"generatedUtc": "2026-10-30T07:47:11.270216+00:00",
"cleanupScope": {
"disposition": "ASSESSMENT_ONLY_NO_REMOVALS_APPROVED",
"inventory": "CLEANUP_INVENTORY.md:19 retain/assessment entries;57preservation groups/34routes; no proven unused deletion",
@@ -113,8 +113,8 @@
],
"publication": {
"status": "VERIFIED_CANDIDATE_SNAPSHOT",
"candidateRemoteCommit": "ba04d817fed26d659bfa2a56b089d6cac851dc34",
"observedUtc": "2026-10-29T23:37:45.931733+00:00",
"candidateRemoteCommit": "fc5b9d377199ce51f480a920a3772108094929e3",
"observedUtc": "2026-10-30T07:47:11.270216+00:00",
"finalHeadMustBeRechecked": true
}
}
@@ -1613,30 +1613,6 @@
"sha256": "bb1b1ccfb03bd888e5e429f5a17c4c106246cfb852b990298236edc7c86c7016",
"description": "Scoped human-approved revised S01 qualification; no visual/entry/production approval"
},
{
"id": "p10-final-gate-processes",
"path": "evidence/p10-final-gate-processes.gz",
"sha256": "1f544cdd3e2efaebe8864604bd7eb7b9dc5dcb5cf2040cc1781cebc79c89fc93",
"description": "Actual companion schema/negative and native blocked-entry observations; not product-case totals or protected approval"
},
{
"id": "p10-proposal-check-native",
"path": "evidence/p10-proposal-check-native.gz",
"sha256": "8aeb977b01e68447f6a6a290e95e5d116030ddb547441b17ac7fa7bccc873955",
"description": "Actual companion schema/negative and native blocked-entry observations; not product-case totals or protected approval"
},
{
"id": "p10-protected-entry-native",
"path": "evidence/p10-protected-entry-native.gz",
"sha256": "2c8d977d0b4e9dcfcc120017c44da9ad6738cfac01874815d32e701f3231128d",
"description": "Actual companion schema/negative and native blocked-entry observations; not product-case totals or protected approval"
},
{
"id": "p10-proposal-check-source",
"path": "evidence/p10-proposal-check-source.gz",
"sha256": "d0505e74d05557e2a7fd64807e5cc1967695413e3e038e83485f7dcaad9c9557",
"description": "Actual companion schema/negative and native blocked-entry observations; not product-case totals or protected approval"
},
{
"id": "s01-initial-package-negative-log",
"path": "evidence/s01-initial-package-negative-log.gz",
@@ -1670,7 +1646,7 @@
{
"id": "p10-entry-proposal",
"path": "evidence/p10-entry-proposal.gz",
"sha256": "3a1b618b1e5fad0adc35c093ef318ebfd7be618653716c7e02386e893345a2af",
"sha256": "7c036e998b21ea63387d842218fb8ec1c8b4afa004d155ce54ed4f1ebdd031a6",
"description": "Evidence-only exact proposed baseline/scope, owner visual status and remaining protected decisions; no executable permission"
},
{
@@ -1690,6 +1666,30 @@
"path": "evidence/handoff-validator-native.gz",
"sha256": "b0a525ce25265fc319c62d730e74c72de96482cc3db929b40a060e7b8fdd0938",
"description": "Final28 combined unit/package negative tests, exact source and native process; supersedes overlapping prior27"
},
{
"id": "p10-final-gate-processes",
"path": "evidence/p10-final-gate-processes.gz",
"sha256": "8584076ee515b420ec6c6096918ff038160ba4d8f97f2b8f835ef06144d8fe11",
"description": "Actual companion schema/negative and native blocked-entry observations; not product-case totals or protected approval"
},
{
"id": "p10-proposal-check-native",
"path": "evidence/p10-proposal-check-native.gz",
"sha256": "8aeb977b01e68447f6a6a290e95e5d116030ddb547441b17ac7fa7bccc873955",
"description": "Actual companion schema/negative and native blocked-entry observations; not product-case totals or protected approval"
},
{
"id": "p10-protected-entry-native",
"path": "evidence/p10-protected-entry-native.gz",
"sha256": "e89902f1343ad5dad14221aaa7c7f7f5ad1da432bed4a40ad82d48f48c4e5b89",
"description": "Actual companion schema/negative and native blocked-entry observations; not product-case totals or protected approval"
},
{
"id": "p10-proposal-check-source",
"path": "evidence/p10-proposal-check-source.gz",
"sha256": "bf7a50107916a94e6faf075c42be0116bdd33a05f88f640e149a60c70de3415b",
"description": "Actual companion schema/negative and native blocked-entry observations; not product-case totals or protected approval"
}
],
"reports": [
@@ -2369,7 +2369,7 @@
"id": "p10-proposal-schema",
"bindingScope": "APPLICATION",
"sourceCommit": "ba04d817fed26d659bfa2a56b089d6cac851dc34",
"executedFromCommit": "1a47f7ac1d9cddd647135ebee808a77301335016",
"executedFromCommit": "fc5b9d377199ce51f480a920a3772108094929e3",
"status": "PASS",
"exitCode": 0,
"artifactId": "p10-proposal-check-native",
@@ -2390,7 +2390,7 @@
"id": "p10-protected-entry",
"bindingScope": "APPLICATION",
"sourceCommit": "ba04d817fed26d659bfa2a56b089d6cac851dc34",
"executedFromCommit": "1a47f7ac1d9cddd647135ebee808a77301335016",
"executedFromCommit": "fc5b9d377199ce51f480a920a3772108094929e3",
"status": "BLOCKED",
"exitCode": 3,
"artifactId": "p10-protected-entry-native",
-95
View File
@@ -1,95 +0,0 @@
# P10-00 — Baseline and deletion eligibility assessment
> **Direct-chat review, 2 November 2026:** this draft is preserved below as historical worker evidence. The completed direct assessment is [P10-00](../../../redesign/phase-10/P10-00.md), with [continuity and the next gate](../../../redesign/phase-10/HANDOFF.md). Its current Git observations, evidence checks and narrowly nominated `App.css` candidate supersede this draft's unavailable-Git and no-candidate conclusions. Controller-specific claims below are historical, not verified authority in this chat. The owner authorised direct P10-00 assessment only; the orchestrator remains paused and untouched. No P10-01 implementation is authorised.
Date: 1 November 2026. Scope: read-only assessment and this Markdown report only.
## Decision and authority
P10-00 worker handoff is ready for independent controller checks. This is not checkpoint acceptance or full Phase 10 completion. No deletion is eligible on the evidence inspected. Recommend no P10-01 implementation scope at present. Stop at the protected `candidate-specific-cleanup-scope` gate.
The active checkpoint and supplied verified owner decisions supersede the older handoff's unconfigured-adapter/unsigned-entry statements only for this restricted assessment. They authorize inspection and Markdown reporting at proposed integration baseline `fc5b9d377199ce51f480a920a3772108094929e3`; they do not authorize product changes, later checkpoints, security waivers or production. Active manifest identity supplied by the controller is `51e12f29078c420ac4ebd10127c8b7f7ba3cd73eac09dcbb4d47da1fe88fbeaf`. Private receipts and credentials were not accessed.
The current control contract prohibits worker branch changes, commits and pushes. Consequently the controller must verify the current branch, clean immutable candidate, ancestry, source correspondence, normal publication and exact remote readback. No network query was made. Attempts to obtain Git identity failed because the worktree Git metadata was inaccessible. The shell started at `C:\` despite requested working directory; changing directory failed at the denied ancestor. Direct absolute-path reads of permitted repository files succeeded. This limits identity verification, not the authority of the supplied baseline. No alternate Git directory or permission bypass was used.
## Entry evidence reviewed
Read repository `AGENTS.md` and `docs/redesign/IMPLEMENTATION_PLAN.md`, especially its requirement for unused-route proof, passing tests and preserved functionality before removal. Reviewed acceptance introductions and relevant evidence sections in:
| Authority | Retained decision |
| --- | --- |
| `docs/redesign/phase-9/p9-requal-01/ACCEPTANCE_ADDENDUM_2026-10-24.md` | Historical Phase 9/10 NO-GO; RD21 resolved only in tested scope; hosted MariaDB blocked. |
| `docs/redesign/phase-9/p9-sec-02/ACCEPTANCE_ADDENDUM_2026-10-25.md` | Later Phase 9 CONDITIONAL GO for qualified development; incomplete vendor Torch advisory response and release limitations retained. |
| `docs/cv-redesign/ACCEPTANCE.md` | CV-UX-01 automated development PASS; overall CONDITIONAL GO; human/model/release limitations remain. This is the actual CV-UX report location. |
| `docs/cv-import/ACCEPTANCE.md` | CV-IMPORT-01 CONDITIONAL GO for supported model-independent workflow; optional model adapter disabled/disconnected. |
| `docs/cv-integration-qa/ACCEPTANCE.md` | CV-QA-01 CONDITIONAL GO; assessment/planning only, not cleanup authority. |
| Supplied final entry, ready-to-run, protected request, acceptance, blockers, gates and entry proposal | Frozen tested application `ba04d817fed26d659bfa2a56b089d6cac851dc34`; published proposal `fc5b9d3`; PDF visual/S01 development approval does not establish physical printing or entry authority. |
| Supplied active checkpoint and verified owner decisions | Assessment entry/evidence-reuse/runtime applicability granted; independent canaries pending; protected stop after P10-00. |
The supplied original 19-entry inventory and prior CV-QA handoffs are carried forward below, with newly inspected source observations explicitly distinguished from inherited findings. These reports are not independently rehashed native evidence in this worker turn. No old conditional decision has been promoted to unconditional acceptance.
## Candidate inventory
All entries have action **retain** unless stated otherwise. Historical purpose and current consumer are combined in the second column. An active consumer defeats a deletion proposal; it does not require proving exhaustive non-use. No entry below asserts absence of runtime consumers. Group mappings are affected groups, not new PASS claims.
| ID / file or area | Historical purpose / current consumers and evidence | Preservation / proposed tests / risk |
| --- | --- | --- |
| CLEAN-01 `src/views/CvBuilderEditor.tsx` | CV authoring owner. Directly observed `App.tsx` lazy import and `/career/builder/:id` registration; not superseded merely by new library UI. | C05–C10; blank/inherited CV, undo/history/save/recovery/browser; HIGH. |
| CLEAN-02 `src/components/CvTemplateThumbnail.tsx` | Template preview. Directly observed `CvTemplateGallery.tsx` import and render. Inherited inventory identifies sandboxed server sample HTML/cache/error paths. | C05/C08/C12; gallery/sample error/iframe/PDF checks; HIGH. |
| CLEAN-03 `src/components/CvTemplateGallery.tsx` | Selection/library with explicit Apply and entitlement semantics; thumbnail composition directly inspected, no duplicate implementation established. | C05/C08; selection/legacy design/entitlement/browser; HIGH. |
| CLEAN-04 `src/views/career/CvImportReview.tsx`, `CvImportMappingEditor.tsx` | Source correction/review owner. Directly observed `CareerProfilePage.tsx` renders review for pending/applied `docling-v1` runs; mapping responsibility inherited from CV-QA. | C01–C03; PDF/DOCX correction/assignment/duplicates/provider rollback; CRITICAL. |
| CLEAN-05 legacy `CareerProfilePage.tsx` / `ProfileCvController.cs` | Historical non-Docling review. Directly observed non-Docling diff condition, POST `/profile-cv/runs/${runId}/accept`, and `[HttpPost("runs/{id:int}/accept")]`; a paired UI/API consumer exists. | C01–C03; old-run fixtures, accept/discard/conflict/replay; CRITICAL. |
| CLEAN-06 `src/components/DashboardLayoutEditor.tsx` | Show/hide/save/reset/conflict/navigation owner. Directly observed `components/DashboardView.tsx` imports and renders both editor and grid. Grid is not its replacement. | M01–M06/E07/E08; preferences/keyboard/navigation/conflict/responsive; HIGH. |
| CLEAN-07 `src/dashboardLayout.ts`, `hooks/useDashboardLayout.ts` | Persisted layout migration/CAS and hidden/future widgets per inherited inventory; hook directly imported by DashboardView. | M01–M06/S01–S05; v1/v2 migration, stale save, account disposal; HIGH. |
| CLEAN-08 `src/views/AdminProcessingPage.tsx` | Current owner-scoped operation monitor; direct lazy import and `/admin/processing` registration in App. Audit/users/system routes remain separately registered. | A01–A03/E09/W12; authorization/redaction/rate/polling/browser; CRITICAL. |
| CLEAN-09 redirects in `src/App.tsx` | Historical bookmarks/extensions. Directly observed `/kanban`, `/correspondence/review`, `/applications/:id` use compatibility redirect elements. | E07/J04/J07/W01; query/hash/navigation/ownership contracts; HIGH. |
| CLEAN-10 `Models/CvTheme.cs`, `Services/ThemedCvRenderer.cs` | Historical document design. Directly observed version-sensitive theme resolution and multiple `DesignVersion == 2` layout branches; new appearance does not retire old settings. | C05–C12/W06/W07; unchanged Windows/Linux CV/letter goldens and frozen archives; CRITICAL. |
| CLEAN-11 `CareerProfileMapper.cs` and import mapping/interpreter owners | Canonical persistence versus source interpretation/review translation; inherited CV-QA distinguishes side effects. No duplicate owner proved. | C01–C03/W05; provider transactions/rollback/replay/stale revision; CRITICAL. |
| CLEAN-12 `ApplicationAssetsService.cs`, versioned writers | Inherited application/CV/letter/frozen submission contracts include null/no-op and RD21 behavior. No obsolete writer established. | W05–W07/C10; all writer, ownership, retry/conflict/frozen-byte tests; CRITICAL. |
| CLEAN-13 migrations/context/provider helpers | Existing installation adoption and provider compatibility; staged retirement report explicitly withholds deletion. | All groups with persistence; migration/populated startup/parity/backup-restore; CRITICAL. |
| CLEAN-14 `tools/summarizer/parser_child.py`, legacy extraction, Docling runtime | Inherited attachment/text consumers differ from structural CV conversion. Full runtime/route/image consumer census still needed. | C03/W08/W03; legacy extraction, parser security, actual Docling; HIGH. |
| CLEAN-15 `tools/summarizer/cv_import_ai.py`, `CV_IMPORT_AI_ENABLED` | Disabled optional capability with contract tests, not obsolete functionality. Retain disabled; no activation. | C11/C03; disabled transport/schema/grounding/failure tests, separate model qualification; HIGH. |
| CLEAN-16 shared styles/tokens/fonts/accessibility utilities | App theme and physical document/iframe/export styles have distinct owners; no asset/token unused proof. Dynamic names/embedding/locales remain unresolved census requirements. | E08/C08/C09/C12; type/lint/build/theme/EN/NB/axe/native PDF; HIGH. |
| CLEAN-17 package/lock dependencies | Directly inspected `package.json` runtime/test/build scripts. `DashboardGrid.tsx` imports `react-grid-layout` and its CSS. No dependency removal justified by age or dependency section. | All affected groups; runtime/tool/script/Docker/platform census, reproducible lock/build/security/provider checks; HIGH. |
| CLEAN-18 tests/goldens/historical reports | Regression and audit consumers, including original failures. Do not discard fixtures or assertions because newer paths pass. No obsolete fixture demonstrated. | All 57; discovery membership/oracle hashes/evidence integrity; HIGH. |
| CLEAN-19 shell/dashboard reminder reads | Inherited P9-PERF-01 measurement candidate only; current duplicate request count not measured. Proposed action: retain, consider separately bounded measurement before consolidation. | W11/M01–M06/E09; loading/error/refresh/account disposal and before/after network counts; MEDIUM. |
Frontend paths in this table are relative to `job-tracker-ui`; backend paths are relative to `JobTrackerApi` unless otherwise qualified. Preservation prefixes are `PRES-`.
## Census coverage and limitations
Direct source inspection covered outer/public and shell route registrations, lazy imports, paired historical import UI/API consumers, design-version branches, dashboard ownership, gallery composition and dependency scripts. This uses several independent kinds of evidence; no safety conclusion rests on a single negative search. `rg` was unavailable, so bounded PowerShell reads and searches were used. No repository-wide zero-reference claim is made.
Old pages/layouts/editors/import screens/document components are retained by the candidate register. Styles/tokens/hooks/utilities/dialogs/accessibility helpers have no proven unused candidate. Frontend routes and API endpoint compatibility have positive active examples; exhaustive external API-consumer absence is not established. Feature-flag inactivity is not obsolescence. Localisation keys, deprecated fixtures and dead assets need dynamic-key, bundle/export, test-discovery and historical-reference checks before any nomination. Dependency census must additionally cover conditional imports, build/test tooling, scripts, Docker and platform-specific paths; inspection of package metadata alone cannot prove non-use. Persisted-data inventories were not queried and no user data was opened. This is a bounded assessment, not a completed exhaustive dead-code proof.
## Historical data, SQLite and architecture
Retain canonical Career Profile separately from CV overrides, inherited settings, historical versions, frozen submitted HTML/binaries, letters and application associations. Retain historical extraction runs and review/accept DTOs. No migration, data rewrite, route alias removal or renderer replacement is proposed. Actual old-document load/export verification is NOT RUN in this turn.
Read `docs/database/mariadb-standardisation/README.md`, `ACCEPTANCE.md` and `SQLITE_RETIREMENT.md`. Retirement remains PLAN READY / REMOVAL NO-GO. The six gates require operator installation inventory, complete consistent export plus isolated restore, full-fidelity copied-data transfer, MariaDB coverage parity including direct SQLite harnesses, approved cutover with rollback after new writes, and retention-window sign-off. Existing partial export cannot establish lossless migration. No evidence reviewed closes those gates. Keep SQLite packages/helpers/provider branches and historical migrations. Track retirement independently; it does not block unrelated safe Phase 10 assessment or future qualified cleanup.
Architecture improvements delivered here: none to product code. The report clarifies ownership and deletion boundaries. Removed files/dependencies: none. Performance/build-size differences: NOT MEASURED; no claimed improvement. Rollback for this assessment is removal/reversion of this report only, with no data or product rollback needed. Any future implementation requires its own exact reversible patch and compatibility strategy.
## Preservation and validation handoff
Read Phase 9 preservation Markdown and parsed `p9-requal-01/preservation.json`. Carry all 57 IDs: E01–E09, J01–J10, W01–W12, C01–C12, M01–M06, S01–S05, A01–A03. Retain 56 PARTIAL / C11 DEFERRED, not PASS. Original 33-route register plus admin processing remains the 34-route preservation scope; wildcard/root routing must not be confused with independently accepted capabilities. App registration inspection is not end-to-end verification of every route.
Worker product tests, browser/visual checks, MariaDB, sidecar/Docling, PDF fidelity, types, lint, build, security, accessibility, EN/Bokmål and historical-document runtime checks: **NOT RUN**. No fresh test counts are claimed. Supplied prior full-suite evidence remains historical: backend 1448, frontend 1031, affected Windows browser 51, separate import 8/MariaDB 90+3/RD21 6/admission 1/Linux 8, Python 83 + Docling 14, and both-platform exports, each retaining original execution identity and limitations. Original S01 28/20 failures remain historical; approved metric requalification 36/36 per platform is not a new export or physical print test.
Controller must independently execute approved fixed suite IDs against the immutable handoff candidate: `backend-canary`, `frontend-canary`, `typecheck`, `lint`, `build`, `browser-canary`, `mariadb-canary`, `rd21-canary`, `python-canary`, `parser-security`, `docling-canary`, `pdf-linux-canary`. Require exact nonempty membership, process exits, source/freshness binding, no concealed failures/skips/retries, and cleanup evidence. No representative canary result can be reported as a fresh complete regression. Controller owns private receipt verification, publication and checkpoint acceptance. If identity/source correspondence fails, do not reuse historical evidence or advance.
## Decisions and next protected boundary
| Decision | Status |
| --- | --- |
| P10-00 report handoff | Complete for independent checks; acceptance pending controller verification. |
| Phase 10 overall | NO-GO for completion/implementation beyond assessment; no removal eligibility or P10-01 scope approved. |
| Redesign development completion | CONDITIONAL GO remains limited to inherited development/preparation acceptance; final cleanup completion not established. |
| Product review readiness | NO-GO for post-Phase-10 acceptance handoff; this is a preparatory debt/ownership report only. |
| Production release | NO-GO. |
Remaining debt: human physical-device/AT/contrast/EN-NB/printing checks NOT TESTED; real CV AI BLOCKED and disabled; deterministic recall/review burden and canonical-only generic-AI context limitations retained; Python vendor advisory incompleteness, hosted CI isolation, production TLS/advisories, native processing, filesystem/off-disk backup/restore and deployed identity remain separately unresolved. No risk acceptance, model activation, provider activation, schema change, main merge or deployment occurred.
PRODUCT-REVIEW-01 preparatory handoff: preserve all contracts and individual debt dispositions, review canonical-only generic-AI context separately, and do not infer production readiness from UI/PDF appearance approval. Final phase-10 deliverables under `docs/redesign/phase-10/`, full regression reconciliation and post-redesign acceptance remain future work outside the current writable/approved report scope.
TODO: controller verifies candidate/Git identity and independent checks; owner reviews this no-removal recommendation at the protected stop. A later request must name exact symbols, callers/routes/dynamic exports, old-data consumers, affected preservation IDs, compatibility transition, rollback and focused/full applicable tests. No P10-01 work should begin without that signed candidate-specific scope. If no candidate gains proof, retain it rather than invent cleanup work.
-21
View File
@@ -1,21 +0,0 @@
# Blockers
2 November 2026. Severity describes impact/gate importance, not an invented vulnerability rating.
| ID | Feature / description and known cause | Severity / dependency | Required action | Elsewhere / gate scope / status |
| --- | --- | --- | --- | --- |
| B01 | P10 publication: Gitea pre-receive SIGSEGV rejected prior pushes | Mandatory checkpoint; external server fault | Normal push and exact readback | RESOLVED: remote `1692142295950e390a4cf807d9df86cc5cf96290`; no server repair performed |
| B02 | P10-01 candidate approval absent; addendum explicitly retains this gate | Mandatory owner decision D01 | Approve/reject exact CLEAN-20 scope | Independent authorised planning allowed; blocks cleanup implementation; AWAITING_APPROVAL |
| B03 | Ordered roadmap implementation lacks accepted predecessor phases | Mandatory dependency | Complete/accept predecessors and stage-specific scopes | Explicitly independent planning allowed; blocks dependent development; BLOCKED |
| B04 | Physical device/AT/contrast/native-language/actual print qualification missing | Release qualification | Human review with actual evidence | Unaffected planning can proceed; production and affected acceptance; NOT_TESTED |
| B05 | Real CV-model compatibility/semantic quality unqualified; adapter withheld | High activation gate | Separately approve safe immutable model qualification; retain disabled state | Model-independent work allowed; AI activation/claims; BLOCKED |
| B06 | Hosted CI/isolation, production TLS/advisories, native parser/image isolation, backup/restore and deployed identity lack current qualification | High release gate; inherited evidence limits | Operator/isolated release evidence and scoped security disposition | Unrelated planning allowed; production; BLOCKED/NOT_TESTED by lane |
| B07 | SQLite retirement lacks complete transfer, restore, parity, cutover and retention evidence | High data-preservation gate | Separate approved staged retirement | Unrelated cleanup/planning allowed; SQLite removal; BLOCKED |
No material security risk or missing test is accepted by this register. Current dependency advisory status has not been refreshed; historical findings are not claims about a new scan. Additional source-specific entry decisions are recorded after eligibility review.
Execution interruption: the three delegated workers hit a service usage limit. Parent continued and published partial I18N, homepage and release discovery checkpoints. Remaining audit/context/legal/rendered work is IN_PROGRESS/PENDING, not falsely classified as an external blocker. Resume locations are in NEXT_ACTIONS.md. No workers are running in the background.
Security entry: the master prompt's `DO NOT START THIS NOW!` and feature-completion dependency remain unresolved; conflicting README immediate-review wording does not authorise a formal scan. No new vulnerability findings or material risk acceptance are claimed.
RR-11 adds a reproduced deployment-backup parser compatibility defect (proposed P2); RR-12/13 document unqualified rollback/restore/encryption boundaries. See FINDINGS.md and the release branch recovery report. These do not block independent research or authorise deployment changes. I18N's remaining 80 dynamic calls and broader census are unfinished eligible work, not external blockers.
-33
View File
@@ -1,33 +0,0 @@
# Direct roadmap checkpoint - 2 November 2026
This is a consolidated progress report, not a final declaration that eligible work is exhausted. Independent research remains available. Product implementation is unchanged; the orchestrator remains paused and untouched.
## Completed and published
P10-00 assessment is complete and published; candidate-specific P10-01 scope is recorded as D01. Normal Git publication now works. Existing GJ-00 planning publication is independently verified. Detailed exact commits are in WORK_COMPLETED.md.
## Partial work
- I18N: source audit and machine-readable message inventory; initial Europe matrix and schema-validated planned locale catalogue. Dynamic/hardcoded/backend text, full contextual/legal review and final compatibility decision remain. No additional language translated or released; all 60 candidates remain planned.
- Homepage: source audit identifies sign-in versus registration CTA mismatch, conceptual SVG previews, client-only rendering, generic metadata and missing footer legal links in the component. These are documented observations, not fixes. Four viewable concepts, genuine captures, imagery licensing, rendered accessibility/performance/SEO and owner design choice remain.
- Release: preliminary architecture and failure-boundary inventory, ten historical blocker reconciliations and 18 mandatory gate rows. Five offline guard tests passed. No release candidate qualified.
## Decisions and dependencies
Approve or retain only CLEAN-20 (`job-tracker-ui/src/App.css`, exact blob and verification scope in OWNER_DECISIONS.md). Generic continuation is not approval. Product Review prioritisation, provider agreements, I18N implementation/native release, homepage visual design, security entry/risk and production release each retain their separate gates. Later decisions will be presented with concrete evidence, not blanket permission requests.
## Security and AI
Formal Security Audit has not started. Historical advisory/TLS/parser/image/operator qualifications remain unresolved, with no new vulnerability scan or waiver. Real CV-model compatibility and semantic accuracy remain blocked; deterministic extraction evidence does not establish model quality. No models or production services were started or accessed.
## Global Jobs
GJ-00 planning at `0ec9f98e6ed4a646fc5e017d8eb6fade07653f37` is remotely verified. No new country/provider integration implemented in this continuation. Existing NAV/source behavior is not evidence that the planned global feature set is live. GJ-01 requires accepted predecessors, exact implementation authority and provider rights.
## Release and preserved evidence
Latest scoped PDF metric/visual acceptance remains preserved; no affected renderer/font/fixture change justified reopening it. Physical print/device/AT/native-language checks are separate. Hosted MariaDB isolation remains explicitly blocked in source. Backup existence is not restore proof; final CI, recovery, migration, provider, production-equivalent identity and rollback evidence remain missing. Production is NO-GO.
## Next work
Resume the precise eligible tasks and isolated worktrees in NEXT_ACTIONS.md. Delegated work stopped at a service usage limit; the parent salvaged, corrected and extended it. No background execution is running. Ordinary independent research does not require a new blanket prompt; the remaining P10 decision does require explicit approval under the user's addendum.
-20
View File
@@ -1,20 +0,0 @@
# Continuing findings list
2026-11-02. Observed defects, source limitations and planning work are separate. This list does not approve implementation, accept risk or close mandatory gates. Exact branch evidence is in WORK_COMPLETED.md.
| ID | Finding | Evidence / current state | Next action |
| --- | --- | --- | --- |
| RR-11 | Deployment backup parser fails to extract the documented `Host=` alias; uppercase `SERVER=` also fails | REPRODUCED with shell-native synthetic positive control; canonical `Server=` works. Proposed P2 compatibility defect, no production impact inspected | Minimal parser/contract remediation in authorised release scope; alias/case/quoted separator/redaction checks |
| RR-12 | Core-image rollback lacks post-rollback health check and does not reverse database/schema or AI changes | VERIFIED SOURCE LIMITATION; runtime recovery NOT TESTED | Isolated post-migration/post-write rehearsal; distinguish image-only and data recovery |
| RR-13 | Backup format checks and off-host messages do not prove restore consistency or encryption | QUALIFICATION GAP; no actual recovery performed | Verify database/files/keys/tombstones together, off-host retrieval/decryption and agreed RPO/RTO |
| I00-13 | Session-invalidated alert is hardcoded English | SOURCE VERIFIED, `App.tsx:488` | Localise without retaining old session tree or relying on discarded provider state |
| I00-14 | Workflow overline `Flow` bypasses catalogue | SOURCE VERIFIED, `JobFlowBar.tsx:147` | Extract controlled UI label in approved I18N implementation |
| I00-15 | Attachment iframe accessible title is only `pdf` | SOURCE VERIFIED, `Attachments.tsx:361` | Descriptive localised title; exclude private filenames from translation exports |
| I00-16 | `EN`/`NO` and `English`/`Norsk` do not express planned locale/variant contract | SOURCE VERIFIED, `AppShell.tsx:692` | Native/English names, Bokmal/Nynorsk distinction and legacy nb preservation |
| I00-17 | Attachment size uses fixed decimal formatting | SOURCE VERIFIED, `ApplicationAssets.tsx:360` | Locale-aware numeric display; preserve bytes and filename |
| I00-18 | Language-save failure/retry reads catalogue directly | ACTIVE CONTRACT, `I18nProvider.tsx:43`; not a defect by itself | Preserve same-language retry/stale-save behavior; include in migration inventory |
| I00-19 | Homepage framework/provider-name list is poor user-value copy | SOURCE VERIFIED, `LandingPage.tsx:133`; design recommendation | Coordinate with Launch Site concepts; no unapproved copy or feature claims |
I18N progress: 108/188 dynamic calls resolved to finite literal branches; 240 existing-key references validated; 80 calls remain. Four direct reads and 26 reviewed JSX/accessibility candidates recorded. These are inventory counts, not translation completeness or runtime test passes.
Earlier homepage and qualification findings remain in their branch reports. Add new findings with stable IDs and evidence status; do not rediscover unchanged items on each continuation.
-20
View File
@@ -1,20 +0,0 @@
# Direct execution continuation
Latest continuation: P10-04 selected regression has 89 backend cases and 92 frontend tests passing, zero failures/skips/pending. Native evidence is archived under docs/redesign/phase-10/p10-04-evidence; P10-04.md records exact filters, source boundaries and remaining qualification. Backend checkpoint `525b5fe4d74ab75f711651fe3a36b988b07abc4d` was independently remotely verified. I18N finite-map review was published/read back at `f577565f7146c6e0cba6edd00b4e804b032ad670`: 112 dynamic calls resolved / 76 pending. It verified 15 letter/completeness keys in both catalogues; checklist default review verified all 14 current defaults but retained the legacy unknown-key gap. No additional cleanup or production change.
Next: continue independent audit, remaining i18n owner maps/literals, and P10-05 evidence reconciliation. Keep final design/implementation approval, market/language decisions, provider/licensing access, live recovery, hosted CI and human/device gates open; ordinary local work need not wait for these unrelated gates. No user input is required for the next static review package.
Latest cross-workstream receipt (2 November 2026): I18N attachment preview fix published and independently read back at `4939585fb1272de69f4b1776f6a8f08af639762a`; supplemental checklist category review at `1559697eda967b8c767ac6595ba934877df89fcd` on `codex/i18n-accessible-labels`. Thirteen focused attachment/file-picker tests passed, typecheck passed, scoped lint passed. Graph update completed locally (18,548 nodes / 45,998 edges); generated graph remains untracked. See the I18N worktree's docs/i18n/ATTACHMENT_PREVIEW_LABEL.md and CHECKLIST_DYNAMIC_REVIEW.md. Dynamic review now 109 resolved / 79 pending, supplementing the historical inventory. Phase 10 latest published retain-review checkpoint is `927f909b0d65a24d617f0bac20d4c1fd7693f072`. These receipts supersede older pending statements below.
Next independently executable work: inspect checklist backend/default and legacy system-key coverage, continue the remaining dynamic/literal reviews, and progress P10-04/05 qualification. Four checklist template calls remain open pending compatibility analysis. Product design still awaits final comprehensive design approval before full production overhaul. No live provider/model/production qualification or complete security audit is claimed.
Latest: CLEAN-20 published and remotely verified at `78f7396adb2f1d3452c10e60bc0dbbd3a4a602e4`. P10-02/03 bounded retain reviews recorded; no further deletion nominated. P10-04/05 and independent audit remain open. Earlier pending-publication statements below describe the preceding checkpoint.
2 November 2026. Latest owner authorisation permits independent ordinary application work, preserves genuine gates, and explicitly approves CLEAN-20 only. Older statements requiring that approval are superseded.
- Phase 10: CLEAN-20 implemented and verified, see ../redesign/phase-10/P10-01.md. Publication pending exact receipt. P10-02–05 remain open; no extra cleanup approved.
- Release readiness: backup connection-parser fix published and read back at `f19e7ebf4aeae350b43fa84cf115c393030280f0` on codex/release-backup-parser, in release-readiness-discovery worktree. 31 offline tests passed; no live restore/deployment qualification.
- Product modernisation: isolated codex/product-modernisation worktree, latest local checkpoint `192095b8`; design prototypes and user choices retained under docs/product-modernisation. A1 dashboard + D1 foundation + B1 tracking, CV editor left/preview right, context right; overview-first Career Profile; agenda/month calendar including application deadlines; automation under Settings. No final full-application implementation approval. Prototype commits not remotely published.
- I18N: codex/i18n-accessible-labels branch created from `55adc1d`; implementation pending. Earlier translation audit counts remain historical; do not claim all dynamic calls fixed.
Next authorised work: publish validated CLEAN-20 normally and independently verify ref, then P10-02 retained-compatibility review and eligible independent fixes. Preserve primary/pre-P10 worktrees and all source-defined gates. No orchestrator commands, keys, configuration or queue changes; no main merge, models or production deployment. Full security/product/release acceptance remains incomplete.
-12
View File
@@ -1,12 +0,0 @@
# Next eligible actions
2 November 2026.
1. D01/CLEAN-20 is presented in chat and awaits precise owner approval. Do not delete `App.css` beforehand. When approved, recheck source identity and perform only its documented implementation/verification/publication scope.
2. Continue I18N-00 in `C:/Users/Connor/.codex/worktrees/i18n-00-audit/Job tracker` at `55adc1db`: follow `docs/i18n/00/HANDOFF.md`. Resolve the remaining 80 dynamic calls and computed/frontend/backend text, real translator context/sensitivity, territory legal records and library compatibility. This is eligible research, not an external blocker.
3. Continue LAUNCH-00/01 in `C:/Users/Connor/.codex/worktrees/launch-site-planning/Job tracker` at `756ab616`: rendered homepage/signup audit, pattern research, genuine synthetic captures, then four actual desktop/mobile concepts. No final design choice or implementation before owner review.
4. Continue release Stage 1 in `C:/Users/Connor/.codex/worktrees/release-readiness-discovery/Job tracker` at `653f8d04`: complete endpoint/environment/failure-boundary census; recovery source inspection and rehearsal specification are now saved. Do not rerun unchanged full suites or touch live services.
5. Provisional independent Product Review research is eligible, but must remain clearly provisional until accepted Phase 10. Existing GJ-00 publication is verified; reuse its 23-document planning pack and frozen subordinate prompts rather than recreating it. GJ-01 implementation remains blocked.
6. After each completed independent task, update blockers and identify newly eligible work. Unaccepted research cannot satisfy a prerequisite requiring accepted implementation. The session has unfinished eligible work; this checkpoint is not an exhaustion-of-roadmap declaration.
Use `ROADMAP_STATUS.md` and the branch-specific handoffs to resume. Never use the autonomous backlog orchestrator. Keep pre-p10-ux and unrelated work intact; no main merge or production deployment. Git is currently operational; avoid repeating the resolved server investigation.
-16
View File
@@ -1,16 +0,0 @@
# Owner decisions
2 November 2026. The Continuous Progress Addendum explicitly says P10-01 remains blocked until precise approval. It supersedes the earlier handoff's interpretation of “continue” as permission. No signed approval or controller state is created here.
## D01 — P10-01 / CLEAN-20
**AWAITING_APPROVAL.** Choose:
- Approve removal of only `job-tracker-ui/src/App.css` (recommended), under the exact verification and rollback scope in [P10-00](../redesign/phase-10/P10-00.md).
- Retain the file and request a revised/no-removal checkpoint disposition.
The file is 38 lines of unimported original CRA styling, Git blob `74b5e053450a48a6bdb4d71aad648e7af821975c`. No callers, routes, persisted data or replacement are expected. Verify source identity, types/lint/build and the specified existing EN/NB/theme/browser cases; restore the exact file by reverting the implementation commit if verification fails. Accepted PDF evidence remains unchanged. Approval covers only CLEAN-20 plus necessary evidence/verification, not another removal or later initiative. Publication of the assessment is now verified; implementation approval is the remaining immediate gate.
## Later decisions — not requested prematurely
Product-ranked scope, Global Jobs implementation and provider licences, I18N implementation and human language release, homepage design selection, security target/environment and material-risk disposition, and final release approval retain their own concrete review gates. Research does not grant these decisions. Do not ask for generic blanket approval or treat this list as completed sign-off.
-25
View File
@@ -1,25 +0,0 @@
# Direct roadmap status
Updated 2 November 2026. This is documentation, not an executable queue. The Continuous Progress Addendum controls direct-chat work; the autonomous orchestrator remains paused and untouched.
| Workstream/checkpoint | Status | Dependency and evidence |
| --- | --- | --- |
| PHASE-10 / P10-00 assessment | COMPLETED | Report in `../redesign/phase-10/P10-00.md`; assessment `7ba1367`, publication receipts `8cdff28`/`1692142`. Remote exactly `1692142295950e390a4cf807d9df86cc5cf96290` on 2 November |
| P10-01 / CLEAN-20 | AWAITING_APPROVAL | Delete only unused `job-tracker-ui/src/App.css`; precise owner decision D01 below. Addendum explicitly withholds implementation |
| P10-02 CV/documents | BLOCKED | Preceding cleanup checkpoint and any exact candidate approval; retain historical documents |
| P10-03 backend/dependencies/config | BLOCKED | Predecessors; no proven removal currently approved |
| P10-04 functional/data verification | BLOCKED | Defined and accepted cleanup scope; fresh affected verification required |
| P10-05 full acceptance | BLOCKED | P10-01–04 and complete applicable acceptance programme |
| PRODUCT-REVIEW-01 | BLOCKED | Final audit requires accepted Phase 10. Provisional independent research is eligible; not yet performed or substituted for final acceptance |
| INT-GLOBAL-JOBS-01 / GJ-00 | CONDITIONAL | Existing planning at `0ec9f98e6ed4a646fc5e017d8eb6fade07653f37`; exact remote reverified 2 November. No implementation authorised |
| INT-GLOBAL-JOBS-01 implementation | BLOCKED | Accepted Phase 10/Product Review, initiative approval and provider rights |
| I18N-01 / I18N-00 audit | IN_PROGRESS | Partial source-bound audit published at `55adc1dbd742a570d55d3a4d13f5613a7ed2ab25`; 3,119 messages, 60 planned locale candidates; 108 conditional calls resolved, 80 remain. Contextual/legal/library review incomplete |
| I18N-01–08 implementation/acceptance | BLOCKED | I18N-00 and stage prerequisites plus documented implementation authority; no locale publication approved |
| LAUNCH-SITE-01 / LAUNCH-00 audit | IN_PROGRESS | Source audit and claim boundaries published at `756ab616a22746a9bafa9830afd4f8efbb085794`; rendered audit still pending |
| LAUNCH-01 four desktop/mobile concepts | PENDING | No viewable concepts produced; eligible independent task after completing audit inputs |
| LAUNCH-SITE final design/implementation | AWAITING_APPROVAL | Four concrete concepts must be delivered before owner selection; no final design auto-selection |
| SECURITY-AUDIT-01 / stages 00–16 | BLOCKED | Master begins `DO NOT START THIS NOW!` and requires finished feature development/baseline tests; README's immediate-review wording does not silently override that gate. No formal scan started |
| RELEASE-READINESS-01 / Stage 1 discovery | IN_PROGRESS | Preliminary inventory, blocker reconciliation and 18-gate matrix published at `653f8d04d469dcd52c883d4b98bea76b8adacada`; five runner guards and four workflow guards passed in separate checks; recovery review and RR-11 reproduction saved; full discovery incomplete |
| Release stages 2–7 baseline, qualification, remediation, requalification, rehearsal, final acceptance | BLOCKED | Final release candidate/prerequisites not accepted; each stage needs actual applicable environment and source-bound evidence |
Implemented, tested, accepted, published and production-ready are separate. Production is NO-GO. Historical counts are not fresh executions. See [blockers](BLOCKERS.md), [owner decisions](OWNER_DECISIONS.md), [completed work](WORK_COMPLETED.md) and [next actions](NEXT_ACTIONS.md).
-33
View File
@@ -1,33 +0,0 @@
# Work completed
2 November 2026.
| Work | Commit / evidence | Limits |
| --- | --- | --- |
| Direct P10-00 assessment, preserved prior draft, candidate inventory, rollback/verification proposal | `7ba1367fd2e84375b3065eeedf9176a34996f77b` | Markdown only; no P10-01 deletion |
| Publication failure/continuity receipts | `8cdff28f0781e4c99efd06079149d9933e01cd4e`, `1692142295950e390a4cf807d9df86cc5cf96290` | Earlier server failures remain historical |
| Restored normal publication | Push succeeded; independent `ls-remote` exactly `1692142295950e390a4cf807d9df86cc5cf96290` | No server repair, hook bypass, force push, main merge or deployment |
| P10 evidence integrity/source applicability | 263 indexed hashes; 1,280 source files; 7 verifier sources; 57 groups/34 routes | Previous direct-assessment checks; not freshly rerun product suites in this continuation |
| Lightweight direct-roadmap register | This documentation checkpoint | No runner, scheduler, approval service or replacement orchestrator |
The application baseline remains source-equivalent to accepted `ba04d817`. Historical PDF metric/visual acceptance is preserved. Current continuation product suites: NOT RUN. Models/production services: NOT ACCESSED.
## Published partial research checkpoints
All three branches start at accepted conditional handoff `5cb903b989742b7a96cb22ddf4c0e24993b18980`; no unaccepted Phase 10 changes were integrated. Normal pushes succeeded and each remote ref was independently read back exactly.
| Branch | Exact remote commit | Actual output / limits |
| --- | --- | --- |
| `feature/i18n-00-audit` | `138d8fbb6da51141b50f2acb3979458ce173a6c3` | Ten research files; 3,119 English entries, 3,164 static calls, 134 files; 188 dynamic/unknown calls unresolved; initial 59-territory matrix and 60 planned locales. Existing Ajv/Intl checks passed, including rejection of released status. Full audit NOT COMPLETE |
| `feature/launch-site-redesign` | `756ab616a22746a9bafa9830afd4f8efbb085794` | Three source-audit/claims/handoff documents. No mockups or final implementation; rendered audit NOT RUN |
| `planning/release-readiness-discovery` | `edd2aa9ae428435773e5cf48167af4e0db1ef36a` | Five preliminary discovery/evidence/matrix/handoff documents; 5 existing offline MariaDB runner guards passed. No real DB/hosted/production qualification |
Global Jobs planning remote independently verified at `0ec9f98e6ed4a646fc5e017d8eb6fade07653f37`. This resolves publication uncertainty, not GJ-01 entry gates.
Delegated workers hit a service usage limit. Parent continued, reviewed and corrected incomplete draft claims, then produced and published these partial checkpoints. No worker remains active. No partial stage is promoted to completed merely because its documents exist.
## Further continuation - published and remotely verified
- Release discovery `653f8d04d469dcd52c883d4b98bea76b8adacada`: complete deployment-script source inspection, recovery review and isolated rehearsal specification; RR-11 synthetic parser reproduction and RR-12/13 qualification gaps. Four existing workflow-quarantine tests PASSED, shell syntax PASSED. Initial direct Windows/sed harness failed its positive control and was discarded; shell-native rerun established the three-case result. No deployment/restore/database activity.
- I18N research `55adc1dbd742a570d55d3a4d13f5613a7ed2ab25`: records for 188 dynamic calls; 108 finite conditional calls resolved with 240 verified key references, 80 remaining; four direct catalogue reads; 26 individually reviewed literal candidates; seven stable findings. No application/test implementation changes.
- FINDINGS.md consolidates ten new observations/contracts/qualification gaps with precise next actions. These remain separate from implementation acceptance.
+26
View File
@@ -0,0 +1,26 @@
# I18N-00 baseline audit
Date: 2026-11-02. Verdict: **IN_PROGRESS; partial research checkpoint, not full I18N-00 acceptance. I18N-01 through 08 BLOCKED. Production NO-GO.**
Research only, authorised by master prompt and continuous-progress instruction. Branch `feature/i18n-00-audit`, worktree `C:/Users/Connor/.codex/worktrees/i18n-00-audit/Job tracker`, baseline `5cb903b989742b7a96cb22ddf4c0e24993b18980`. Application/API/tests/UI/sidecar diff against `ba04d817` was empty. This is the accepted conditional development handoff, not blanket runtime, language or production acceptance. No controller or approval state was changed. All ten supplied I18N prompts were read. Their implementation requirements are future specifications, not authority to execute them.
Architecture authority is `docs/architecture/current.md`, which redirects to `overview.md`. Existing React/MUI, ASP.NET/EF/MariaDB, Python sidecar and rendering ownership remain. Graph absent in this baseline: bounded source inspection used; no graph rebuild needed for documentation.
## Verified source findings
* `job-tracker-ui/src/i18n/translations.ts`: custom two-language `en | nb` object; it is not an i18next or FormatJS installation.
* `I18nProvider.tsx`: local storage accepts `nb`, `nb-NO`, `no`; otherwise English. Auth hydration and cross-tab storage update language. `{word}` substitution handles simple values, not ICU plural/select grammar. Failed preference save offers retry; sequence tracking avoids stale error handling.
* `JobTrackerApi/Controllers/AuthController.cs:601`: language endpoint accepts `en` or Bokmål aliases, writes `nb-NO`; unsupported input returns hardcoded English error. Do not rename canonical English to `en-GB` without migration tests.
* `CoverLetterDocumentRenderer.cs:36`: labels distinguish `nb-NO` from English; document HTML has its own language. `ThemedCvRenderer.cs:60` derives HTML language from document settings. UI language must not become the output-language owner.
* `HumanLanguageCatalog.cs` is CV skill-language recognition, including environment-independent seeds and variant collapsing. It is not an eligible UI-locale registry; reusing it would lose script/region distinctions.
* Manifest dependencies: React `^19.2.4`, Next `16.4.1`, MUI `^7.3.9`, TypeScript `^5.9.3`, date-fns `^4.1.0`. These are manifest ranges, not freshly installed/runtime versions. No i18next/FormatJS direct dependency. Lockfile/runtime compatibility must be qualified before implementation.
## Gate evidence
`docs/pre-phase10-ux/ACCEPTANCE.md` grants conditional development review, not Phase 10 implementation. `docs/automation/handoffs/pre-phase10/FINAL_DEVELOPMENT_ENTRY.md` separates P10-00 assessment from candidate-specific P10-01 permission. This checkpoint cannot grant either. Product-review and launch-site accepted decisions are absent from this baseline; absence is not permission. Global Jobs planning exists separately at `0ec9f98` in the main workspace (`docs/global-jobs/00/DEPENDENCIES_AND_GATES.md` inspected read-only); it is not integrated here and does not authorise live providers or GJ-01.
## Honest limits
The TypeScript AST inventory contains 3,119 existing English catalogue entries and 3,164 syntactically identified static call sites across 134 non-test frontend files. It records 188 dynamic/unknown calls separately as an unresolved count; 853 catalogue entries have no identified static caller. These are not deletion candidates: wrappers, dynamic keys and direct object access remain unresolved. A subsequent partial JSX/accessibility literal inventory now contains 26 source-context-reviewed candidates. CONTEXT_TRIAGE.md records the current 80 unresolved dynamic calls after 108 finite-branch resolutions. This is still not a complete non-catalogue inventory. Every-string attribution, translator context, accessible states and country-specific legal recognition require additional review. Therefore the stage's complete-inventory criterion has not passed. No translations, native approval, screenshots, model results, browser results or locale release are manufactured.
The country matrix covers an initial 59 territory/market contexts from versioned CLDR 49, with targeted official-record checks for Norway, Switzerland and Serbia. The remaining legal cross-checks are pending. The draft catalogue contains 60 planned locale candidates, not 60 supported languages. Schema, uniqueness, BCP-47 parsing and rejection of a forged released status passed using existing local tools. Node/ICU canonicalises `cnr-ME` to `sr-ME`; retain this unresolved identity issue rather than accepting an automatic product alias. See BASELINE_TESTS.md.
+19
View File
@@ -0,0 +1,19 @@
# Planning evidence and baseline checks
2026-11-02. Baseline `5cb903b989742b7a96cb22ddf4c0e24993b18980`, branch `feature/i18n-00-audit`. Documentation only. No runtime code, test code, lockfiles or settings changed.
| Check | Result | Scope |
| --- | --- | --- |
| `git diff ba04d817fed26d659bfa2a56b089d6cac851dc34 HEAD --stat -- JobTrackerApi JobTrackerApi.Tests JobTrackerApi.MariaDb.Tests job-tracker-ui tools/summarizer` | PASSED: empty diff, exit 0 | Source identity only; no fresh runtime assertion |
| English catalogue AST extraction using existing TypeScript | PASSED: 3,119 unique keys | Property assignments required to be string literals; duplicate/unsupported members throw; 134 non-test TS/TSX files scanned |
| Static syntactic `t` call association | 3,164 sites; 188 dynamic/unknown calls; 853 entries without static caller | Partial inventory, not symbol resolution or coverage proof; no dead-code inference |
| Existing Ajv draft-07 validation | PASSED: 60 entries | `LOCALE_SCHEMA.json` compiled and validated `LOCALE_CATALOG.json`; no installed dependency changes |
| Uniqueness and `Intl.getCanonicalLocales` parsing | PASSED: 60 unique parseable tags | Node v24.19.0, ICU 78.3; syntax acceptance is not runtime translation availability |
| Negative publication fixture | PASSED | In-memory copy changed first `surfaces.ui` from `planned` to `released`; validator rejected it |
| Montenegrin identity | OPEN | Intl maps `cnr-ME` to `sr-ME`; product semantics require explicit resolution before registry implementation |
| Product/unit/browser/MariaDB/Python suites | NOT RUN | No implementation changes; existing accepted evidence remains historical |
| Native/legal/AT/device/PDF/hosted/production/provider/model qualification | NOT RUN | No authority or claim conferred by planning checks |
The inventory records its baseline, parser version, exact source SHA-256 and source line for each English message. Callers retain expressions and file/line, making manual review possible. Extraction covers the `en` object in `translations.ts`, excludes `*.test.*`, and associates literal first arguments of expressions named `t` or ending in `.t`. Dynamic keys, aliases, direct property reads, C#/Python messages and hardcoded JSX are not completely captured. Recompute after source changes; do not extrapolate counts to full application completeness.
Research sources checked on this date: CLDR 49 territory table, EU official-language list, i18next plural documentation, FormatJS ICU syntax, Norwegian Language Act, Swiss federal multilingualism guidance and Serbian government constitution. Specific links and limitations are in the matrix and implementation plan. No production data or private user text was sent to translation services.
+31
View File
@@ -0,0 +1,31 @@
# Source-context triage continuation
2026-11-02, unchanged application baseline `5cb903b989742b7a96cb22ddf4c0e24993b18980`. No translation or runtime implementation.
## Completed inventory refinement
- All 188 previously counted dynamic/unknown `t` calls now have source file/line/hash and exact expression in DYNAMIC_MESSAGE_CALLS.json.
- 108 calls resolve to finite literal conditional branches, accounting for 240 possible-key references. Each referenced key exists in the English catalogue. Nested ternaries are included. This is key resolution, not translator or runtime acceptance.
- 80 calls still need lookup-table, wrapper, template-token or runtime-key review. Type assertions such as `as any` or a single asserted literal must not be treated as proof of actual possible values.
- Four direct catalogue reads were located in I18nProvider: save-failure/retry feedback and the evaluator/fallback. These are active consumers missed by a `t("key")`-only search; preserve them during migration.
- 26 JSX text/selected accessibility-label candidates were extracted and individually reviewed in source context. The JSON records preservation/extraction decisions and excludes adjacent private runtime values. This scan does not cover every computed JSX expression, object-held label, string-returning helper, backend string or app-shell document text.
## Findings to carry into approved implementation
| ID | Source | Finding / required handling |
| --- | --- | --- |
| I00-13 | `App.tsx:488` | Session-invalidated alert is hardcoded English. Localisation must preserve disposal of the old application tree and must not depend on its discarded session/provider state |
| I00-14 | `JobFlowBar.tsx:147` | `Flow` is controlled UI copy outside the catalogue; extract with workflow context |
| I00-15 | `Attachments.tsx:361` | Preview iframe title is only `pdf`; use descriptive localised purpose while keeping private filenames out of translator exports |
| I00-16 | `AppShell.tsx:692` | `EN`/`NO` with `English`/`Norsk` labels conflates country-like abbreviation and Norwegian variant. Future selector needs native/English names and explicit Bokmal/Nynorsk distinction; preserve existing nb aliases |
| I00-17 | `ApplicationAssets.tsx:360` | File-size display uses `toFixed(1)` with KB. Review locale number formatting; filename and underlying byte count remain unchanged |
| I00-18 | `I18nProvider.tsx:43` | Save-failure feedback accesses catalogue directly. Migration must preserve same-language retry and stale-save sequencing; static t-call inventory alone misses this contract |
| I00-19 | `LandingPage.tsx:133` | Technology-name list is not ordinary translatable prose. Coordinate user-outcome copy with homepage design work; do not translate trademarks or add unverified feature claims |
Brand/provider names, host examples and technical identifiers were not blindly classified as missing translations. Unit/version fragments require formatting and accessibility context rather than mechanical dictionary substitution. All findings are planning tasks, not permission to edit application files.
## Verification and remaining work
The same 134 non-test TS/TSX files were scanned using the installed TypeScript AST parser. Assertions confirmed exactly 188 dynamic calls and that all 240 resolved branch-key references exist. No full application typecheck or browser suite was run. The 26 literal records were reviewed against adjacent source lines; broader semantic census remains IN_PROGRESS.
Next: resolve the remaining 80 table/template/wrapper calls; cover computed frontend values and app document metadata; inventory backend errors, queued communication text and Python processing messages. Country legal records, reviewer allocation and runtime-library choice remain separate unfinished tasks.
+47
View File
@@ -0,0 +1,47 @@
{
"baseline": "5cb903b989742b7a96cb22ddf4c0e24993b18980",
"method": "TypeScript AST syntactic triage; no symbol resolution or runtime coverage claim",
"filesScanned": 134,
"entries": [
{
"file": "job-tracker-ui/src/i18n/I18nProvider.tsx",
"line": 43,
"sourceSha256": "95a930915cb2240547cc1a91af7cb0a475bc8f46ac75304b3241a401928ed3e4",
"kind": "direct-catalogue-access",
"text": "translations[l].settingsLanguageSaveFailed",
"ownerComponent": "job-tracker-ui/src/i18n/I18nProvider.tsx",
"contextStatus": "pending",
"sensitivity": "unclassified-template; do-not-export-runtime-values"
},
{
"file": "job-tracker-ui/src/i18n/I18nProvider.tsx",
"line": 44,
"sourceSha256": "95a930915cb2240547cc1a91af7cb0a475bc8f46ac75304b3241a401928ed3e4",
"kind": "direct-catalogue-access",
"text": "translations[l].retry",
"ownerComponent": "job-tracker-ui/src/i18n/I18nProvider.tsx",
"contextStatus": "pending",
"sensitivity": "unclassified-template; do-not-export-runtime-values"
},
{
"file": "job-tracker-ui/src/i18n/I18nProvider.tsx",
"line": 67,
"sourceSha256": "95a930915cb2240547cc1a91af7cb0a475bc8f46ac75304b3241a401928ed3e4",
"kind": "direct-catalogue-access",
"text": "translations[language][key]",
"ownerComponent": "job-tracker-ui/src/i18n/I18nProvider.tsx",
"contextStatus": "pending",
"sensitivity": "unclassified-template; do-not-export-runtime-values"
},
{
"file": "job-tracker-ui/src/i18n/I18nProvider.tsx",
"line": 67,
"sourceSha256": "95a930915cb2240547cc1a91af7cb0a475bc8f46ac75304b3241a401928ed3e4",
"kind": "direct-catalogue-access",
"text": "translations.en[key]",
"ownerComponent": "job-tracker-ui/src/i18n/I18nProvider.tsx",
"contextStatus": "pending",
"sensitivity": "unclassified-template; do-not-export-runtime-values"
}
]
}
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,87 @@
# Europe country and language research matrix
Research checkpoint 2026-11-02; not a market-launch list or legal opinion. All entries are candidate scope. CLDR 49 provides an initial language relationship dataset; national/regional official-record cross-checks remain incomplete. Blank CLDR status is not proof of absence or recognition. No tag decides sovereignty, EU membership, provider rights or support. XK is a CLDR user-assigned territory code, not ISO 3166-1; do not silently persist it as an ISO identifier.
Source: [Unicode CLDR 49 territory-language data](https://www.unicode.org/cldr/charts/49/tsv/territory_language_information.tsv); retrieved SHA-256 `29bcadbb4362e1a7a3685f4bf199152809635acca58fab10a3576a0f7b55868c`. Population percentages are deliberately omitted; they are not product usage evidence.
| Territory | Code | CLDR official/de-facto | CLDR regional/recognised | Legal cross-check |
| --- | --- | --- | --- | --- |
| Andorra | AD | ca (official) | not recorded; further review required | PENDING |
| Albania | AL | sq (official) | not recorded; further review required | PENDING |
| Austria | AT | de (official) | hr (official_regional), sl (official_regional), hu (official_regional) | PENDING |
| Åland Islands | AX | sv (official) | not recorded; further review required | PENDING |
| Bosnia & Herzegovina | BA | bs (official), bs-Cyrl (official), hr (official), sr (official), sr-Latn (official) | not recorded; further review required | PENDING |
| Belgium | BE | nl (official), fr (official), de (official) | not recorded; further review required | PENDING |
| Bulgaria | BG | bg (official) | not recorded; further review required | PENDING |
| Belarus | BY | ru (official), be (official) | not recorded; further review required | PENDING |
| Switzerland | CH | de (official), gsw (de_facto_official), fr (official), it (official) | rm (official_regional) | PENDING |
| Cyprus | CY | el (official), tr (official) | not recorded; further review required | PENDING |
| Czechia | CZ | cs (official) | not recorded; further review required | PENDING |
| Germany | DE | de (official) | frr (official_regional) | PENDING |
| Denmark | DK | da (official) | de (official_regional), kl (official_regional) | PENDING |
| Estonia | EE | et (official) | not recorded; further review required | PENDING |
| Spain | ES | es (official) | ca (official_regional), gl (official_regional), eu (official_regional), ast (official_regional), oc (official_regional) | PENDING |
| Finland | FI | fi (official), sv (official) | sms (official_regional) | PENDING |
| Faroe Islands | FO | fo (official) | not recorded; further review required | PENDING |
| France | FR | fr (official) | not recorded; further review required | PENDING |
| United Kingdom | GB | en (official) | cy (official_regional), ga (official_regional), gd (official_regional) | PENDING |
| Guernsey | GG | en (official) | not recorded; further review required | PENDING |
| Gibraltar | GI | en (official) | not recorded; further review required | PENDING |
| Greece | GR | el (official) | not recorded; further review required | PENDING |
| Croatia | HR | hr (official) | it (official_regional), vec (official_regional) | PENDING |
| Hungary | HU | hu (official) | not recorded; further review required | PENDING |
| Ireland | IE | en (official), ga (official) | not recorded; further review required | PENDING |
| Isle of Man | IM | en (official), gv (official) | not recorded; further review required | PENDING |
| Iceland | IS | is (official) | not recorded; further review required | PENDING |
| Italy | IT | it (official) | fr (official_regional), vec (official_regional) | PENDING |
| Jersey | JE | en (official) | not recorded; further review required | PENDING |
| Liechtenstein | LI | de (official), gsw (de_facto_official) | not recorded; further review required | PENDING |
| Lithuania | LT | lt (official) | not recorded; further review required | PENDING |
| Luxembourg | LU | fr (official), lb (official), de (official) | not recorded; further review required | PENDING |
| Latvia | LV | lv (official) | not recorded; further review required | PENDING |
| Monaco | MC | fr (official) | not recorded; further review required | PENDING |
| Moldova | MD | ro (official) | not recorded; further review required | PENDING |
| Montenegro | ME | sr-Latn (official) | not recorded; further review required | PENDING |
| North Macedonia | MK | mk (official) | sq (official_regional) | PENDING |
| Malta | MT | mt (official), en (official) | not recorded; further review required | PENDING |
| Netherlands | NL | nl (official) | fy (official_regional) | PENDING |
| Norway | NO | nb (official), no (official), nn (official) | se (official_regional) | PENDING |
| Poland | PL | pl (official) | de (official_regional), csb (official_regional), lt (official_regional) | PENDING |
| Portugal | PT | pt (official) | not recorded; further review required | PENDING |
| Romania | RO | ro (official) | not recorded; further review required | PENDING |
| Serbia | RS | sr (official), sr-Latn (official) | hu (official_regional), ro (official_regional), hr (official_regional), sk (official_regional), uk (official_regional) | PENDING |
| Russia | RU | ru (official) | tt (official_regional), ce (official_regional), ba (official_regional), av (official_regional), kbd (official_regional), myv (official_regional), kum (official_regional), sah (official_regional), inh (official_regional), bua (official_regional), az-Cyrl (official_regional), lez (official_regional), mdf (official_regional), krc (official_regional), tyv (official_regional), udm (official_regional), ady (official_regional), kv (official_regional), lbe (official_regional), koi (official_regional) | PENDING |
| Sweden | SE | sv (official) | fi (official_regional) | PENDING |
| Slovenia | SI | sl (official) | vec (official_regional) | PENDING |
| Svalbard & Jan Mayen | SJ | nb (official) | not recorded; further review required | PENDING |
| Slovakia | SK | sk (official) | not recorded; further review required | PENDING |
| San Marino | SM | it (official) | not recorded; further review required | PENDING |
| Türkiye | TR | tr (official) | not recorded; further review required | PENDING |
| Ukraine | UA | uk (official), ru (de_facto_official) | not recorded; further review required | PENDING |
| Vatican City | VA | it (de_facto_official) | not recorded; further review required | PENDING |
| Kosovo | XK | sq (official), sr (official), sr-Latn (official) | not recorded; further review required | PENDING |
| Armenia | AM | hy (official) | not recorded; further review required | PENDING |
| Azerbaijan | AZ | az (official), az-Cyrl (official) | not recorded; further review required | PENDING |
| Georgia | GE | ka (official) | ab (official_regional), os (official_regional) | PENDING |
| Kazakhstan | KZ | ru (official), kk (official) | not recorded; further review required | PENDING |
| Greenland | GL | kl (official) | not recorded; further review required | PENDING |
## Scope and legal cross-check queue
Russia, Turkey, Cyprus, Armenia, Azerbaijan, Georgia and Kazakhstan are explicit geographic/market-review cases; inclusion here does not approve a market. Greenland, Faroe Islands, Aland, Crown dependencies, Gibraltar and Svalbard/Jan Mayen are separately considered territory contexts. This is an initial 59-code research envelope, not a claim to have exhausted every dependency or minority language.
Norway: [Language Act](https://lovdata.no/dokument/NLE/lov/2021-05-21-42) distinguishes Bokmal/Nynorsk and protected Sami/minority languages. Plan distinct nb-NO/nn-NO and investigate Sami/Kven review capacity; do not infer their status from the abbreviated CLDR row.
Switzerland: [federal multilingualism explanation](https://www.aboutswitzerland.eda.admin.ch/en/multilingualism) distinguishes national languages and official usage. Plan de-CH, fr-CH, it-CH and rm-CH with separate reviewers.
Serbia: [government constitution](https://www.srbija.gov.rs/tekst/56753/ustav-republike-srbije.php) establishes Serbian/Cyrillic official use. sr-Latn-RS remains an explicit product candidate, separately from sr-Cyrl-RS; not a claim of identical legal status. These source checks inform planning, not exhaustive legal clearance.
Regional/minority queue includes ca-ES, eu-ES, gl-ES, cy-GB, gd-GB, se-NO, smj-NO, sma-NO and fkv-NO. Country-specific recognition, applicable areas, reviewer capacity, orthography, fonts and locale-data support must be reviewed separately. No automatic mapping of Montenegrin to Serbian; cnr-ME remains a candidate requiring runtime/data validation.
## EU 24 language baseline
[EU official language list](https://european-union.europa.eu/principles-countries-history/languages_en), checked 2026-11-02: Bulgarian bg-BG; Croatian hr-HR; Czech cs-CZ; Danish da-DK; Dutch nl-NL; English en (preserve existing canonical ID; en-GB candidate); Estonian et-EE; Finnish fi-FI; French fr-FR; German de-DE; Greek el-GR; Hungarian hu-HU; Irish ga-IE; Italian it-IT; Latvian lv-LV; Lithuanian lt-LT; Maltese mt-MT; Polish pl-PL; Portuguese pt-PT; Romanian ro-RO; Slovak sk-SK; Slovenian sl-SI; Spanish es-ES; Swedish sv-SE. These locale choices are proposals, not mandated by the EU list.
## Proposed waves
Foundation candidates: preserve existing en/nb behavior, then nn-NO, sv-SE, da-DK, fi-FI and is-IS if reviewers exist. EU-24 next; broader national/script/region candidates thereafter. Actual usage analytics and reviewer allocation are unavailable, so no evidence-backed commercial ranking or promised dates are asserted. English fallback remains available irrespective of market.
@@ -0,0 +1,319 @@
{
"baseline": "5cb903b989742b7a96cb22ddf4c0e24993b18980",
"method": "TypeScript AST syntactic triage; no symbol resolution or runtime coverage claim",
"filesScanned": 134,
"entries": [
{
"file": "job-tracker-ui/src/App.tsx",
"line": 488,
"sourceSha256": "3b5645d12f2c92ed8999d7a072bd7d47fac77023d460a19a9b3bfc2a4191962f",
"kind": "jsx-text",
"text": "Session changed. Clearing this page…",
"ownerComponent": "job-tracker-ui/src/App.tsx",
"contextStatus": "source-context-reviewed; implementation-pending",
"sensitivity": "public-ui-template; adjacent runtime identifiers excluded",
"decision": "localise-with-session-boundary-preservation",
"translatorContext": "Alert rendered while old application tree is invalidated; preserve unmount/privacy behavior and avoid dependencies on the discarded session/provider tree."
},
{
"file": "job-tracker-ui/src/assets/JobbjaktMark.tsx",
"line": 7,
"sourceSha256": "5a539514876a66eaf17ec68eb7ce3d28c558384bc24ab76b61f73be8df754473",
"kind": "jsx-attribute:aria-label",
"text": "Jobbjakt",
"ownerComponent": "job-tracker-ui/src/assets/JobbjaktMark.tsx",
"contextStatus": "source-context-reviewed; implementation-pending",
"sensitivity": "public-ui-template; adjacent runtime identifiers excluded",
"decision": "preserve-proper-name-or-example",
"translatorContext": "Public brand/provider label or synthetic host example; not user content. Retain original spelling; localise surrounding guidance separately."
},
{
"file": "job-tracker-ui/src/components/ApplicationAssets.tsx",
"line": 198,
"sourceSha256": "25216c80ef92d519baad9e428a0e77390150605c1a3529a4809819d120661f29",
"kind": "jsx-text",
"text": "· v",
"ownerComponent": "job-tracker-ui/src/components/ApplicationAssets.tsx",
"contextStatus": "source-context-reviewed; implementation-pending",
"sensitivity": "public-ui-template; adjacent runtime identifiers excluded",
"decision": "version-or-unit-formatting-review",
"translatorContext": "Keep numeric/version identity; review locale number formatting and descriptive accessible labels. Do not translate user file/name data."
},
{
"file": "job-tracker-ui/src/components/ApplicationAssets.tsx",
"line": 360,
"sourceSha256": "25216c80ef92d519baad9e428a0e77390150605c1a3529a4809819d120661f29",
"kind": "jsx-text",
"text": "KB",
"ownerComponent": "job-tracker-ui/src/components/ApplicationAssets.tsx",
"contextStatus": "source-context-reviewed; implementation-pending",
"sensitivity": "public-ui-template; adjacent runtime identifiers excluded",
"decision": "version-or-unit-formatting-review",
"translatorContext": "Keep numeric/version identity; review locale number formatting and descriptive accessible labels. Do not translate user file/name data."
},
{
"file": "job-tracker-ui/src/components/ApplicationAssets.tsx",
"line": 699,
"sourceSha256": "25216c80ef92d519baad9e428a0e77390150605c1a3529a4809819d120661f29",
"kind": "jsx-text",
"text": "v",
"ownerComponent": "job-tracker-ui/src/components/ApplicationAssets.tsx",
"contextStatus": "source-context-reviewed; implementation-pending",
"sensitivity": "public-ui-template; adjacent runtime identifiers excluded",
"decision": "version-or-unit-formatting-review",
"translatorContext": "Keep numeric/version identity; review locale number formatting and descriptive accessible labels. Do not translate user file/name data."
},
{
"file": "job-tracker-ui/src/components/Attachments.tsx",
"line": 361,
"sourceSha256": "fe706526f36d92c10d2a0adfd7abb634d0ebee28f5d7e1794c590179b4fd884c",
"kind": "jsx-attribute:title",
"text": "pdf",
"ownerComponent": "job-tracker-ui/src/components/Attachments.tsx",
"contextStatus": "source-context-reviewed; implementation-pending",
"sensitivity": "public-ui-template; adjacent runtime identifiers excluded",
"decision": "descriptive-localised-accessible-title",
"translatorContext": "Attachment preview iframe title; describe document preview purpose, without exposing private filename in exported translator context."
},
{
"file": "job-tracker-ui/src/components/CoverLetterDocument.tsx",
"line": 157,
"sourceSha256": "17ea0c608db7bc05171fb3c44f378c1acaa78fbdd337f9330002ef6346b92546",
"kind": "jsx-text",
"text": "pt ·",
"ownerComponent": "job-tracker-ui/src/components/CoverLetterDocument.tsx",
"contextStatus": "source-context-reviewed; implementation-pending",
"sensitivity": "public-ui-template; adjacent runtime identifiers excluded",
"decision": "version-or-unit-formatting-review",
"translatorContext": "Keep numeric/version identity; review locale number formatting and descriptive accessible labels. Do not translate user file/name data."
},
{
"file": "job-tracker-ui/src/components/CoverLetterDocument.tsx",
"line": 157,
"sourceSha256": "17ea0c608db7bc05171fb3c44f378c1acaa78fbdd337f9330002ef6346b92546",
"kind": "jsx-text",
"text": "mm ·",
"ownerComponent": "job-tracker-ui/src/components/CoverLetterDocument.tsx",
"contextStatus": "source-context-reviewed; implementation-pending",
"sensitivity": "public-ui-template; adjacent runtime identifiers excluded",
"decision": "version-or-unit-formatting-review",
"translatorContext": "Keep numeric/version identity; review locale number formatting and descriptive accessible labels. Do not translate user file/name data."
},
{
"file": "job-tracker-ui/src/components/EmailProviderConnections.tsx",
"line": 227,
"sourceSha256": "b71228ee28ee73525014c8ece8690364e0f70ddaca3ee7211e9076123d120b1d",
"kind": "jsx-attribute:label",
"text": "Gmail",
"ownerComponent": "job-tracker-ui/src/components/EmailProviderConnections.tsx",
"contextStatus": "source-context-reviewed; implementation-pending",
"sensitivity": "public-ui-template; adjacent runtime identifiers excluded",
"decision": "preserve-proper-name-or-example",
"translatorContext": "Public brand/provider label or synthetic host example; not user content. Retain original spelling; localise surrounding guidance separately."
},
{
"file": "job-tracker-ui/src/components/EmailProviderConnections.tsx",
"line": 239,
"sourceSha256": "b71228ee28ee73525014c8ece8690364e0f70ddaca3ee7211e9076123d120b1d",
"kind": "jsx-attribute:label",
"text": "Outlook / Microsoft 365",
"ownerComponent": "job-tracker-ui/src/components/EmailProviderConnections.tsx",
"contextStatus": "source-context-reviewed; implementation-pending",
"sensitivity": "public-ui-template; adjacent runtime identifiers excluded",
"decision": "preserve-proper-name-or-example",
"translatorContext": "Public brand/provider label or synthetic host example; not user content. Retain original spelling; localise surrounding guidance separately."
},
{
"file": "job-tracker-ui/src/components/EmailProviderConnections.tsx",
"line": 264,
"sourceSha256": "b71228ee28ee73525014c8ece8690364e0f70ddaca3ee7211e9076123d120b1d",
"kind": "jsx-attribute:placeholder",
"text": "imap.example.com",
"ownerComponent": "job-tracker-ui/src/components/EmailProviderConnections.tsx",
"contextStatus": "source-context-reviewed; implementation-pending",
"sensitivity": "public-ui-template; adjacent runtime identifiers excluded",
"decision": "preserve-proper-name-or-example",
"translatorContext": "Public brand/provider label or synthetic host example; not user content. Retain original spelling; localise surrounding guidance separately."
},
{
"file": "job-tracker-ui/src/components/JobFlowBar.tsx",
"line": 147,
"sourceSha256": "643053f6ac883f23ef74c66def7a42678cd7917ed11ca802b11be25ec6df0cb2",
"kind": "jsx-text",
"text": "Flow",
"ownerComponent": "job-tracker-ui/src/components/JobFlowBar.tsx",
"contextStatus": "source-context-reviewed; implementation-pending",
"sensitivity": "public-ui-template; adjacent runtime identifiers excluded",
"decision": "extract-controlled-label",
"translatorContext": "Workflow overline in JobFlowBar; ordinary user-facing UI label, not a persisted status."
},
{
"file": "job-tracker-ui/src/components/QuickCommandDialog.tsx",
"line": 166,
"sourceSha256": "27cbbb8b8596fdf4e7474eccfdb6d9a8a219f4baff6a9b8013b825ce5fc2c411",
"kind": "jsx-text",
"text": "Ctrl/Cmd + K",
"ownerComponent": "job-tracker-ui/src/components/QuickCommandDialog.tsx",
"contextStatus": "source-context-reviewed; implementation-pending",
"sensitivity": "public-ui-template; adjacent runtime identifiers excluded",
"decision": "version-or-unit-formatting-review",
"translatorContext": "Keep numeric/version identity; review locale number formatting and descriptive accessible labels. Do not translate user file/name data."
},
{
"file": "job-tracker-ui/src/layout/AppShell.tsx",
"line": 312,
"sourceSha256": "e75a58f2984bf47d7edc3c2c51439242aba2df32675a30b1f17088095ea1d634",
"kind": "jsx-text",
"text": "Jobbjakt",
"ownerComponent": "job-tracker-ui/src/layout/AppShell.tsx",
"contextStatus": "source-context-reviewed; implementation-pending",
"sensitivity": "public-ui-template; adjacent runtime identifiers excluded",
"decision": "preserve-proper-name-or-example",
"translatorContext": "Public brand/provider label or synthetic host example; not user content. Retain original spelling; localise surrounding guidance separately."
},
{
"file": "job-tracker-ui/src/layout/AppShell.tsx",
"line": 415,
"sourceSha256": "e75a58f2984bf47d7edc3c2c51439242aba2df32675a30b1f17088095ea1d634",
"kind": "jsx-text",
"text": "Jobbjakt",
"ownerComponent": "job-tracker-ui/src/layout/AppShell.tsx",
"contextStatus": "source-context-reviewed; implementation-pending",
"sensitivity": "public-ui-template; adjacent runtime identifiers excluded",
"decision": "preserve-proper-name-or-example",
"translatorContext": "Public brand/provider label or synthetic host example; not user content. Retain original spelling; localise surrounding guidance separately."
},
{
"file": "job-tracker-ui/src/layout/AppShell.tsx",
"line": 563,
"sourceSha256": "e75a58f2984bf47d7edc3c2c51439242aba2df32675a30b1f17088095ea1d634",
"kind": "jsx-text",
"text": "commit",
"ownerComponent": "job-tracker-ui/src/layout/AppShell.tsx",
"contextStatus": "source-context-reviewed; implementation-pending",
"sensitivity": "public-ui-template; adjacent runtime identifiers excluded",
"decision": "localise-label-preserve-identifier",
"translatorContext": "Technical display label may be translated; commit/job identifier remains invariant and must not enter translation resources."
},
{
"file": "job-tracker-ui/src/layout/AppShell.tsx",
"line": 692,
"sourceSha256": "e75a58f2984bf47d7edc3c2c51439242aba2df32675a30b1f17088095ea1d634",
"kind": "jsx-attribute:aria-label",
"text": "English",
"ownerComponent": "job-tracker-ui/src/layout/AppShell.tsx",
"contextStatus": "source-context-reviewed; implementation-pending",
"sensitivity": "public-ui-template; adjacent runtime identifiers excluded",
"decision": "locale-selector-contract",
"translatorContext": "Replace ambiguous country-like abbreviation/undifferentiated Norwegian label only within approved locale-selector work; preserve current nb behavior and native labels."
},
{
"file": "job-tracker-ui/src/layout/AppShell.tsx",
"line": 692,
"sourceSha256": "e75a58f2984bf47d7edc3c2c51439242aba2df32675a30b1f17088095ea1d634",
"kind": "jsx-text",
"text": "EN",
"ownerComponent": "job-tracker-ui/src/layout/AppShell.tsx",
"contextStatus": "source-context-reviewed; implementation-pending",
"sensitivity": "public-ui-template; adjacent runtime identifiers excluded",
"decision": "locale-selector-contract",
"translatorContext": "Replace ambiguous country-like abbreviation/undifferentiated Norwegian label only within approved locale-selector work; preserve current nb behavior and native labels."
},
{
"file": "job-tracker-ui/src/layout/AppShell.tsx",
"line": 693,
"sourceSha256": "e75a58f2984bf47d7edc3c2c51439242aba2df32675a30b1f17088095ea1d634",
"kind": "jsx-attribute:aria-label",
"text": "Norsk",
"ownerComponent": "job-tracker-ui/src/layout/AppShell.tsx",
"contextStatus": "source-context-reviewed; implementation-pending",
"sensitivity": "public-ui-template; adjacent runtime identifiers excluded",
"decision": "locale-selector-contract",
"translatorContext": "Replace ambiguous country-like abbreviation/undifferentiated Norwegian label only within approved locale-selector work; preserve current nb behavior and native labels."
},
{
"file": "job-tracker-ui/src/layout/AppShell.tsx",
"line": 693,
"sourceSha256": "e75a58f2984bf47d7edc3c2c51439242aba2df32675a30b1f17088095ea1d634",
"kind": "jsx-text",
"text": "NO",
"ownerComponent": "job-tracker-ui/src/layout/AppShell.tsx",
"contextStatus": "source-context-reviewed; implementation-pending",
"sensitivity": "public-ui-template; adjacent runtime identifiers excluded",
"decision": "locale-selector-contract",
"translatorContext": "Replace ambiguous country-like abbreviation/undifferentiated Norwegian label only within approved locale-selector work; preserve current nb behavior and native labels."
},
{
"file": "job-tracker-ui/src/views/AdminAuditPage.tsx",
"line": 146,
"sourceSha256": "b78d0c5f6ec86a4ee3d2214e6854e638d9f73a5c69c8d5b01023d8c60b46ac81",
"kind": "jsx-text",
"text": "jobId=",
"ownerComponent": "job-tracker-ui/src/views/AdminAuditPage.tsx",
"contextStatus": "source-context-reviewed; implementation-pending",
"sensitivity": "public-ui-template; adjacent runtime identifiers excluded",
"decision": "localise-label-preserve-identifier",
"translatorContext": "Technical display label may be translated; commit/job identifier remains invariant and must not enter translation resources."
},
{
"file": "job-tracker-ui/src/views/AdminUsersPage.tsx",
"line": 274,
"sourceSha256": "674290a26fc279a25e43176194716dea87f427d1885ecce70dea7c368ab0c6f8",
"kind": "jsx-attribute:label",
"text": "—",
"ownerComponent": "job-tracker-ui/src/views/AdminUsersPage.tsx",
"contextStatus": "source-context-reviewed; implementation-pending",
"sensitivity": "public-ui-template; adjacent runtime identifiers excluded",
"decision": "empty-state-accessibility-review",
"translatorContext": "No-role placeholder; visual glyph can stay but verify meaningful accessible context."
},
{
"file": "job-tracker-ui/src/views/LandingPage.tsx",
"line": 99,
"sourceSha256": "2c550aa126e1db8786ed10b895d2403491ce50bf5073fc95b8a0fcb0cb0e083e",
"kind": "jsx-text",
"text": "Jobbjakt",
"ownerComponent": "job-tracker-ui/src/views/LandingPage.tsx",
"contextStatus": "source-context-reviewed; implementation-pending",
"sensitivity": "public-ui-template; adjacent runtime identifiers excluded",
"decision": "preserve-proper-name-or-example",
"translatorContext": "Public brand/provider label or synthetic host example; not user content. Retain original spelling; localise surrounding guidance separately."
},
{
"file": "job-tracker-ui/src/views/LandingPage.tsx",
"line": 133,
"sourceSha256": "2c550aa126e1db8786ed10b895d2403491ce50bf5073fc95b8a0fcb0cb0e083e",
"kind": "jsx-text",
"text": "React · TypeScript · ASP.NET Core · EF Core · FastAPI AI · Gmail",
"ownerComponent": "job-tracker-ui/src/views/LandingPage.tsx",
"contextStatus": "source-context-reviewed; implementation-pending",
"sensitivity": "public-ui-template; adjacent runtime identifiers excluded",
"decision": "launch-copy-review",
"translatorContext": "Technology list is public brand names but poor user-value copy; coordinate replacement with Launch Site design approval."
},
{
"file": "job-tracker-ui/src/views/career/CareerProfileSections.tsx",
"line": 100,
"sourceSha256": "0c772feb6bde8324676b0884aaf343283465c5cd3b3318128363063df4ea22ab",
"kind": "jsx-attribute:label",
"text": "GitHub",
"ownerComponent": "job-tracker-ui/src/views/career/CareerProfileSections.tsx",
"contextStatus": "source-context-reviewed; implementation-pending",
"sensitivity": "public-ui-template; adjacent runtime identifiers excluded",
"decision": "preserve-proper-name-or-example",
"translatorContext": "Public brand/provider label or synthetic host example; not user content. Retain original spelling; localise surrounding guidance separately."
},
{
"file": "job-tracker-ui/src/views/career/ProfileCompleteness.tsx",
"line": 55,
"sourceSha256": "95f017b1495cf9d88a2b69e7c6ae8ef83d55f2b1ad7b6f54895e280b147743b5",
"kind": "jsx-text",
"text": "v",
"ownerComponent": "job-tracker-ui/src/views/career/ProfileCompleteness.tsx",
"contextStatus": "source-context-reviewed; implementation-pending",
"sensitivity": "public-ui-template; adjacent runtime identifiers excluded",
"decision": "version-or-unit-formatting-review",
"translatorContext": "Keep numeric/version identity; review locale number formatting and descriptive accessible labels. Do not translate user file/name data."
}
]
}
+19
View File
@@ -0,0 +1,19 @@
# Partial I18N-00 research handoff
Branch `feature/i18n-00-audit`, based on accepted conditional handoff `5cb903b989742b7a96cb22ddf4c0e24993b18980`. Only `docs/i18n/00/` changed. This checkpoint preserves research; I18N-00 acceptance remains IN_PROGRESS and I18N-01 implementation remains BLOCKED.
Completed: source-owner audit draft; ordered implementation contracts; source-bound English catalogue/static callers; initial 59-territory CLDR matrix; 60 planned locale candidates and schema; planning checks documented in BASELINE_TESTS.md. No locale translated, reviewed or released here.
Next authorised work, without implementation approval:
1. Resolve 188 dynamic/unknown calls, direct translation object access and wrappers. Review the 853 entries without static callers without treating them as unused.
2. Inventory hardcoded frontend/ARIA/empty/error/export text and backend/Python/email/queue strings. Assign real namespace, translator context, parameter sensitivity and owning component rather than inferring from keys.
3. Complete national/regional official-record checks beyond the initial Norway/Switzerland/Serbia checks. Expand territory/minority coverage where the current research envelope omits required contexts.
4. Evaluate actual installed/locked library compatibility and Montenegrin canonicalisation before choosing a runtime migration. Do not install packages now.
5. Obtain reviewer/market priorities when a concrete rollout proposal is ready. Keep human/native approval separate from planning completeness.
The delegated researcher was interrupted by a service usage limit; the parent continued, corrected references to nonexistent deliverables and produced the actual inventory/catalogue/matrix. No agent is working in the background. Full stage completion must not be inferred from the presence of the expected filenames.
Continuation: CONTEXT_TRIAGE.md records all 188 dynamic calls, 108 finite-branch resolutions (240 existing-key references), four direct catalogue reads and 26 source-context-reviewed JSX/accessibility literal candidates. Seven concrete planning findings I00-13 through I00-19 added. Remaining dynamic call queue is 80; prior 188 count is the original inventory total, not the remaining queue. No application changes.
Product tests NOT RUN; source equality and planning checks PASSED within their documented limits. Preserve existing PDF evidence. No application models, production services, orchestrator configuration or signing/approval material accessed.
+31
View File
@@ -0,0 +1,31 @@
# Ordered implementation specification — not execution authority
## Proposed architecture decision
Keep existing `useI18n` call sites and React/MUI owners. Replace only its message evaluation/storage behind that contract after entry approval. Compare: current substitution is smallest but cannot meet plural/select requirements; i18next offers namespace loading and CLDR plural suffixes but changes interpolation/catalogue shape; FormatJS ICU supports complete sentence plural/select messages behind the current helper with less caller churn. **Proposed preference: ICU message evaluation behind the existing API plus platform Intl formatting**, subject to actual lockfile/runtime compatibility, bundle and extraction prototype after approval. Do not install either now. Do not implement two competing message engines. .NET renders server communications from its own typed templates with shared IDs/parameter contracts; do not assume identical ICU parser support in .NET/Python.
Sources checked 2026-11-02: https://www.i18next.com/translation-function/plurals and https://formatjs.github.io/docs/core-concepts/icu-syntax/. These establish syntax capabilities, not repository compatibility.
## Independent preference contract
Residence `countryId`, `searchCountryIds`, typed location IDs, `uiLocale`, `adLanguageFilters`, document `outputLocale`, optional `communicationLocale` and `timeZone` are distinct. Country changes only suggestion ordering. Manual saved preference wins over URL/app choice, onboarding, browser negotiation and English fallback. Explicitly distinguish signed-out local storage from account hydration. Persist provenance and revision semantics without weakening tenant ownership. Existing `en` stays canonical until an approved compatibility migration; `en-GB` is a candidate variant, not a silent rewrite. `nb/no/nb-NO` legacy aliases preserve existing Bokmål behavior. `nn-NO` must never silently map to Bokmål. `sr-Latn` and `sr-Cyrl` retain script identity. Unsupported locale resolves to reliable English chrome; user content unchanged.
## Stage sequence and evidence
| Stage | Bounded change after prerequisites | Required exit evidence |
|---|---|---|
| 00 | Finish contextual census, country legal cross-check, reviewer ownership | Complete source-bound inventory; independent schema validation; planning review |
| 01 | Registry, aliases, separate preferences, migration, formatting | Legacy roundtrip, invalid IDs, tenant/multi-device conflicts, MariaDB migration/reversal; new locales hidden |
| 02 | Extract full UI and accessible strings into existing owners | Required-key completeness, placeholder parser, dirty-form language switch, pseudo/long-label responsive tests |
| 03 | Stable backend codes; queued communication templates | Event-time locale snapshot proposed, retry determinism, isolated Mailpit/plain/HTML tests, legal approvals |
| 04 | Per-document headings/fonts, import boundaries | RD21/history invariance; script/PDF extraction and layout; native/physical review distinct |
| 05 | GJ-owned geography/provider/search integration | All-industry synthetic fixtures, explicit alias suggestions, source language and rights/retention evidence |
| 06 | Translation supply chain and glossary | Licensed source, translator context, independent proficient review, source-change invalidation |
| 07 | Launch Site localisation/SEO contract | Approved visual design; published-only alternates/sitemaps; truthful feature/provider claims |
| 08 | Cross-surface/native/device/security acceptance | Locale × surface × market × profession × device matrix; exact commit and disjoint counts |
Phase 10 completion/appropriate accepted handoff, PRODUCT-REVIEW-01, accepted I18N-00 and explicit stage authority precede I18N-01. Sequential accepted stage integration is mandatory. Separate development commits, no main merge/deploy.
GJ owns source fetch, rights, stable geography/occupation IDs and search mechanics; I18N owns display labels, ad-language semantics and translated-summary labels. ESCO concept identity cannot be replaced by translated free text. Original advertisement always remains distinguishable. Provider rights are checked before requests, not inferred from locale availability. Launch Site owns visual design/routing architecture; I18N supplies market+content-locale+publication schema and claims binding to deployed capability. Future fixtures may be designed now but no dependent runtime is invented.
Terminology queue: Career Profile (canonical facts), CV (document variant), cover letter, application (pursuit), job (opportunity), apprenticeship, shift, seasonal work, salary, qualification, nursing/teaching licence. Define each English concept before translation; profession label never establishes accreditation. Planned fixtures include teacher, cook, nurse, electrician, construction worker, driver, cleaner, retail, office administrator and developer.
+846
View File
@@ -0,0 +1,846 @@
{
"baseline": "5cb903b989742b7a96cb22ddf4c0e24993b18980",
"status": "research-draft",
"locales": [
{
"tag": "en",
"ownerRole": "localisation-product-owner",
"reviewer": null,
"status": "planned",
"surfaces": {
"ui": "planned",
"backend": "planned",
"communications": "planned",
"documents": "planned",
"jobDiscovery": "planned",
"marketing": "planned"
}
},
{
"tag": "en-GB",
"ownerRole": "localisation-product-owner",
"reviewer": null,
"status": "planned",
"surfaces": {
"ui": "planned",
"backend": "planned",
"communications": "planned",
"documents": "planned",
"jobDiscovery": "planned",
"marketing": "planned"
}
},
{
"tag": "nb-NO",
"ownerRole": "localisation-product-owner",
"reviewer": null,
"status": "planned",
"surfaces": {
"ui": "planned",
"backend": "planned",
"communications": "planned",
"documents": "planned",
"jobDiscovery": "planned",
"marketing": "planned"
}
},
{
"tag": "nn-NO",
"ownerRole": "localisation-product-owner",
"reviewer": null,
"status": "planned",
"surfaces": {
"ui": "planned",
"backend": "planned",
"communications": "planned",
"documents": "planned",
"jobDiscovery": "planned",
"marketing": "planned"
}
},
{
"tag": "sv-SE",
"ownerRole": "localisation-product-owner",
"reviewer": null,
"status": "planned",
"surfaces": {
"ui": "planned",
"backend": "planned",
"communications": "planned",
"documents": "planned",
"jobDiscovery": "planned",
"marketing": "planned"
}
},
{
"tag": "da-DK",
"ownerRole": "localisation-product-owner",
"reviewer": null,
"status": "planned",
"surfaces": {
"ui": "planned",
"backend": "planned",
"communications": "planned",
"documents": "planned",
"jobDiscovery": "planned",
"marketing": "planned"
}
},
{
"tag": "fi-FI",
"ownerRole": "localisation-product-owner",
"reviewer": null,
"status": "planned",
"surfaces": {
"ui": "planned",
"backend": "planned",
"communications": "planned",
"documents": "planned",
"jobDiscovery": "planned",
"marketing": "planned"
}
},
{
"tag": "is-IS",
"ownerRole": "localisation-product-owner",
"reviewer": null,
"status": "planned",
"surfaces": {
"ui": "planned",
"backend": "planned",
"communications": "planned",
"documents": "planned",
"jobDiscovery": "planned",
"marketing": "planned"
}
},
{
"tag": "bg-BG",
"ownerRole": "localisation-product-owner",
"reviewer": null,
"status": "planned",
"surfaces": {
"ui": "planned",
"backend": "planned",
"communications": "planned",
"documents": "planned",
"jobDiscovery": "planned",
"marketing": "planned"
}
},
{
"tag": "hr-HR",
"ownerRole": "localisation-product-owner",
"reviewer": null,
"status": "planned",
"surfaces": {
"ui": "planned",
"backend": "planned",
"communications": "planned",
"documents": "planned",
"jobDiscovery": "planned",
"marketing": "planned"
}
},
{
"tag": "cs-CZ",
"ownerRole": "localisation-product-owner",
"reviewer": null,
"status": "planned",
"surfaces": {
"ui": "planned",
"backend": "planned",
"communications": "planned",
"documents": "planned",
"jobDiscovery": "planned",
"marketing": "planned"
}
},
{
"tag": "nl-NL",
"ownerRole": "localisation-product-owner",
"reviewer": null,
"status": "planned",
"surfaces": {
"ui": "planned",
"backend": "planned",
"communications": "planned",
"documents": "planned",
"jobDiscovery": "planned",
"marketing": "planned"
}
},
{
"tag": "et-EE",
"ownerRole": "localisation-product-owner",
"reviewer": null,
"status": "planned",
"surfaces": {
"ui": "planned",
"backend": "planned",
"communications": "planned",
"documents": "planned",
"jobDiscovery": "planned",
"marketing": "planned"
}
},
{
"tag": "fr-FR",
"ownerRole": "localisation-product-owner",
"reviewer": null,
"status": "planned",
"surfaces": {
"ui": "planned",
"backend": "planned",
"communications": "planned",
"documents": "planned",
"jobDiscovery": "planned",
"marketing": "planned"
}
},
{
"tag": "de-DE",
"ownerRole": "localisation-product-owner",
"reviewer": null,
"status": "planned",
"surfaces": {
"ui": "planned",
"backend": "planned",
"communications": "planned",
"documents": "planned",
"jobDiscovery": "planned",
"marketing": "planned"
}
},
{
"tag": "el-GR",
"ownerRole": "localisation-product-owner",
"reviewer": null,
"status": "planned",
"surfaces": {
"ui": "planned",
"backend": "planned",
"communications": "planned",
"documents": "planned",
"jobDiscovery": "planned",
"marketing": "planned"
}
},
{
"tag": "hu-HU",
"ownerRole": "localisation-product-owner",
"reviewer": null,
"status": "planned",
"surfaces": {
"ui": "planned",
"backend": "planned",
"communications": "planned",
"documents": "planned",
"jobDiscovery": "planned",
"marketing": "planned"
}
},
{
"tag": "ga-IE",
"ownerRole": "localisation-product-owner",
"reviewer": null,
"status": "planned",
"surfaces": {
"ui": "planned",
"backend": "planned",
"communications": "planned",
"documents": "planned",
"jobDiscovery": "planned",
"marketing": "planned"
}
},
{
"tag": "it-IT",
"ownerRole": "localisation-product-owner",
"reviewer": null,
"status": "planned",
"surfaces": {
"ui": "planned",
"backend": "planned",
"communications": "planned",
"documents": "planned",
"jobDiscovery": "planned",
"marketing": "planned"
}
},
{
"tag": "lv-LV",
"ownerRole": "localisation-product-owner",
"reviewer": null,
"status": "planned",
"surfaces": {
"ui": "planned",
"backend": "planned",
"communications": "planned",
"documents": "planned",
"jobDiscovery": "planned",
"marketing": "planned"
}
},
{
"tag": "lt-LT",
"ownerRole": "localisation-product-owner",
"reviewer": null,
"status": "planned",
"surfaces": {
"ui": "planned",
"backend": "planned",
"communications": "planned",
"documents": "planned",
"jobDiscovery": "planned",
"marketing": "planned"
}
},
{
"tag": "mt-MT",
"ownerRole": "localisation-product-owner",
"reviewer": null,
"status": "planned",
"surfaces": {
"ui": "planned",
"backend": "planned",
"communications": "planned",
"documents": "planned",
"jobDiscovery": "planned",
"marketing": "planned"
}
},
{
"tag": "pl-PL",
"ownerRole": "localisation-product-owner",
"reviewer": null,
"status": "planned",
"surfaces": {
"ui": "planned",
"backend": "planned",
"communications": "planned",
"documents": "planned",
"jobDiscovery": "planned",
"marketing": "planned"
}
},
{
"tag": "pt-PT",
"ownerRole": "localisation-product-owner",
"reviewer": null,
"status": "planned",
"surfaces": {
"ui": "planned",
"backend": "planned",
"communications": "planned",
"documents": "planned",
"jobDiscovery": "planned",
"marketing": "planned"
}
},
{
"tag": "ro-RO",
"ownerRole": "localisation-product-owner",
"reviewer": null,
"status": "planned",
"surfaces": {
"ui": "planned",
"backend": "planned",
"communications": "planned",
"documents": "planned",
"jobDiscovery": "planned",
"marketing": "planned"
}
},
{
"tag": "sk-SK",
"ownerRole": "localisation-product-owner",
"reviewer": null,
"status": "planned",
"surfaces": {
"ui": "planned",
"backend": "planned",
"communications": "planned",
"documents": "planned",
"jobDiscovery": "planned",
"marketing": "planned"
}
},
{
"tag": "sl-SI",
"ownerRole": "localisation-product-owner",
"reviewer": null,
"status": "planned",
"surfaces": {
"ui": "planned",
"backend": "planned",
"communications": "planned",
"documents": "planned",
"jobDiscovery": "planned",
"marketing": "planned"
}
},
{
"tag": "es-ES",
"ownerRole": "localisation-product-owner",
"reviewer": null,
"status": "planned",
"surfaces": {
"ui": "planned",
"backend": "planned",
"communications": "planned",
"documents": "planned",
"jobDiscovery": "planned",
"marketing": "planned"
}
},
{
"tag": "uk-UA",
"ownerRole": "localisation-product-owner",
"reviewer": null,
"status": "planned",
"surfaces": {
"ui": "planned",
"backend": "planned",
"communications": "planned",
"documents": "planned",
"jobDiscovery": "planned",
"marketing": "planned"
}
},
{
"tag": "sq-AL",
"ownerRole": "localisation-product-owner",
"reviewer": null,
"status": "planned",
"surfaces": {
"ui": "planned",
"backend": "planned",
"communications": "planned",
"documents": "planned",
"jobDiscovery": "planned",
"marketing": "planned"
}
},
{
"tag": "sr-Latn-RS",
"ownerRole": "localisation-product-owner",
"reviewer": null,
"status": "planned",
"surfaces": {
"ui": "planned",
"backend": "planned",
"communications": "planned",
"documents": "planned",
"jobDiscovery": "planned",
"marketing": "planned"
}
},
{
"tag": "sr-Cyrl-RS",
"ownerRole": "localisation-product-owner",
"reviewer": null,
"status": "planned",
"surfaces": {
"ui": "planned",
"backend": "planned",
"communications": "planned",
"documents": "planned",
"jobDiscovery": "planned",
"marketing": "planned"
}
},
{
"tag": "bs-BA",
"ownerRole": "localisation-product-owner",
"reviewer": null,
"status": "planned",
"surfaces": {
"ui": "planned",
"backend": "planned",
"communications": "planned",
"documents": "planned",
"jobDiscovery": "planned",
"marketing": "planned"
}
},
{
"tag": "cnr-ME",
"ownerRole": "localisation-product-owner",
"reviewer": null,
"status": "planned",
"surfaces": {
"ui": "planned",
"backend": "planned",
"communications": "planned",
"documents": "planned",
"jobDiscovery": "planned",
"marketing": "planned"
}
},
{
"tag": "mk-MK",
"ownerRole": "localisation-product-owner",
"reviewer": null,
"status": "planned",
"surfaces": {
"ui": "planned",
"backend": "planned",
"communications": "planned",
"documents": "planned",
"jobDiscovery": "planned",
"marketing": "planned"
}
},
{
"tag": "tr-TR",
"ownerRole": "localisation-product-owner",
"reviewer": null,
"status": "planned",
"surfaces": {
"ui": "planned",
"backend": "planned",
"communications": "planned",
"documents": "planned",
"jobDiscovery": "planned",
"marketing": "planned"
}
},
{
"tag": "lb-LU",
"ownerRole": "localisation-product-owner",
"reviewer": null,
"status": "planned",
"surfaces": {
"ui": "planned",
"backend": "planned",
"communications": "planned",
"documents": "planned",
"jobDiscovery": "planned",
"marketing": "planned"
}
},
{
"tag": "cy-GB",
"ownerRole": "localisation-product-owner",
"reviewer": null,
"status": "planned",
"surfaces": {
"ui": "planned",
"backend": "planned",
"communications": "planned",
"documents": "planned",
"jobDiscovery": "planned",
"marketing": "planned"
}
},
{
"tag": "rm-CH",
"ownerRole": "localisation-product-owner",
"reviewer": null,
"status": "planned",
"surfaces": {
"ui": "planned",
"backend": "planned",
"communications": "planned",
"documents": "planned",
"jobDiscovery": "planned",
"marketing": "planned"
}
},
{
"tag": "fo-FO",
"ownerRole": "localisation-product-owner",
"reviewer": null,
"status": "planned",
"surfaces": {
"ui": "planned",
"backend": "planned",
"communications": "planned",
"documents": "planned",
"jobDiscovery": "planned",
"marketing": "planned"
}
},
{
"tag": "be-BY",
"ownerRole": "localisation-product-owner",
"reviewer": null,
"status": "planned",
"surfaces": {
"ui": "planned",
"backend": "planned",
"communications": "planned",
"documents": "planned",
"jobDiscovery": "planned",
"marketing": "planned"
}
},
{
"tag": "ka-GE",
"ownerRole": "localisation-product-owner",
"reviewer": null,
"status": "planned",
"surfaces": {
"ui": "planned",
"backend": "planned",
"communications": "planned",
"documents": "planned",
"jobDiscovery": "planned",
"marketing": "planned"
}
},
{
"tag": "hy-AM",
"ownerRole": "localisation-product-owner",
"reviewer": null,
"status": "planned",
"surfaces": {
"ui": "planned",
"backend": "planned",
"communications": "planned",
"documents": "planned",
"jobDiscovery": "planned",
"marketing": "planned"
}
},
{
"tag": "az-Latn-AZ",
"ownerRole": "localisation-product-owner",
"reviewer": null,
"status": "planned",
"surfaces": {
"ui": "planned",
"backend": "planned",
"communications": "planned",
"documents": "planned",
"jobDiscovery": "planned",
"marketing": "planned"
}
},
{
"tag": "ru-RU",
"ownerRole": "localisation-product-owner",
"reviewer": null,
"status": "planned",
"surfaces": {
"ui": "planned",
"backend": "planned",
"communications": "planned",
"documents": "planned",
"jobDiscovery": "planned",
"marketing": "planned"
}
},
{
"tag": "fr-CH",
"ownerRole": "localisation-product-owner",
"reviewer": null,
"status": "planned",
"surfaces": {
"ui": "planned",
"backend": "planned",
"communications": "planned",
"documents": "planned",
"jobDiscovery": "planned",
"marketing": "planned"
}
},
{
"tag": "de-CH",
"ownerRole": "localisation-product-owner",
"reviewer": null,
"status": "planned",
"surfaces": {
"ui": "planned",
"backend": "planned",
"communications": "planned",
"documents": "planned",
"jobDiscovery": "planned",
"marketing": "planned"
}
},
{
"tag": "it-CH",
"ownerRole": "localisation-product-owner",
"reviewer": null,
"status": "planned",
"surfaces": {
"ui": "planned",
"backend": "planned",
"communications": "planned",
"documents": "planned",
"jobDiscovery": "planned",
"marketing": "planned"
}
},
{
"tag": "nl-BE",
"ownerRole": "localisation-product-owner",
"reviewer": null,
"status": "planned",
"surfaces": {
"ui": "planned",
"backend": "planned",
"communications": "planned",
"documents": "planned",
"jobDiscovery": "planned",
"marketing": "planned"
}
},
{
"tag": "fr-BE",
"ownerRole": "localisation-product-owner",
"reviewer": null,
"status": "planned",
"surfaces": {
"ui": "planned",
"backend": "planned",
"communications": "planned",
"documents": "planned",
"jobDiscovery": "planned",
"marketing": "planned"
}
},
{
"tag": "de-BE",
"ownerRole": "localisation-product-owner",
"reviewer": null,
"status": "planned",
"surfaces": {
"ui": "planned",
"backend": "planned",
"communications": "planned",
"documents": "planned",
"jobDiscovery": "planned",
"marketing": "planned"
}
},
{
"tag": "en-IE",
"ownerRole": "localisation-product-owner",
"reviewer": null,
"status": "planned",
"surfaces": {
"ui": "planned",
"backend": "planned",
"communications": "planned",
"documents": "planned",
"jobDiscovery": "planned",
"marketing": "planned"
}
},
{
"tag": "ca-ES",
"ownerRole": "localisation-product-owner",
"reviewer": null,
"status": "planned",
"surfaces": {
"ui": "planned",
"backend": "planned",
"communications": "planned",
"documents": "planned",
"jobDiscovery": "planned",
"marketing": "planned"
}
},
{
"tag": "eu-ES",
"ownerRole": "localisation-product-owner",
"reviewer": null,
"status": "planned",
"surfaces": {
"ui": "planned",
"backend": "planned",
"communications": "planned",
"documents": "planned",
"jobDiscovery": "planned",
"marketing": "planned"
}
},
{
"tag": "gl-ES",
"ownerRole": "localisation-product-owner",
"reviewer": null,
"status": "planned",
"surfaces": {
"ui": "planned",
"backend": "planned",
"communications": "planned",
"documents": "planned",
"jobDiscovery": "planned",
"marketing": "planned"
}
},
{
"tag": "gd-GB",
"ownerRole": "localisation-product-owner",
"reviewer": null,
"status": "planned",
"surfaces": {
"ui": "planned",
"backend": "planned",
"communications": "planned",
"documents": "planned",
"jobDiscovery": "planned",
"marketing": "planned"
}
},
{
"tag": "se-NO",
"ownerRole": "localisation-product-owner",
"reviewer": null,
"status": "planned",
"surfaces": {
"ui": "planned",
"backend": "planned",
"communications": "planned",
"documents": "planned",
"jobDiscovery": "planned",
"marketing": "planned"
}
},
{
"tag": "smj-NO",
"ownerRole": "localisation-product-owner",
"reviewer": null,
"status": "planned",
"surfaces": {
"ui": "planned",
"backend": "planned",
"communications": "planned",
"documents": "planned",
"jobDiscovery": "planned",
"marketing": "planned"
}
},
{
"tag": "sma-NO",
"ownerRole": "localisation-product-owner",
"reviewer": null,
"status": "planned",
"surfaces": {
"ui": "planned",
"backend": "planned",
"communications": "planned",
"documents": "planned",
"jobDiscovery": "planned",
"marketing": "planned"
}
},
{
"tag": "fkv-NO",
"ownerRole": "localisation-product-owner",
"reviewer": null,
"status": "planned",
"surfaces": {
"ui": "planned",
"backend": "planned",
"communications": "planned",
"documents": "planned",
"jobDiscovery": "planned",
"marketing": "planned"
}
}
]
}
+81
View File
@@ -0,0 +1,81 @@
{
"$schema": "http://json-schema.org/draft-07/schema#",
"title": "Research-only locale catalogue; no release authority",
"type": "object",
"additionalProperties": false,
"required": [
"baseline",
"status",
"locales"
],
"properties": {
"baseline": {
"const": "5cb903b989742b7a96cb22ddf4c0e24993b18980"
},
"status": {
"const": "research-draft"
},
"locales": {
"type": "array",
"minItems": 1,
"items": {
"type": "object",
"additionalProperties": false,
"required": [
"tag",
"ownerRole",
"reviewer",
"status",
"surfaces"
],
"properties": {
"tag": {
"type": "string",
"pattern": "^[a-z]{2,3}(-[A-Za-z0-9]{2,8})*$"
},
"ownerRole": {
"const": "localisation-product-owner"
},
"reviewer": {
"type": "null"
},
"status": {
"const": "planned"
},
"surfaces": {
"type": "object",
"additionalProperties": false,
"required": [
"ui",
"backend",
"communications",
"documents",
"jobDiscovery",
"marketing"
],
"properties": {
"ui": {
"const": "planned"
},
"backend": {
"const": "planned"
},
"communications": {
"const": "planned"
},
"documents": {
"const": "planned"
},
"jobDiscovery": {
"const": "planned"
},
"marketing": {
"const": "planned"
}
}
}
}
}
}
}
}
File diff suppressed because it is too large Load Diff
+20
View File
@@ -0,0 +1,20 @@
# Risks, blockers and independent approval
| ID | Risk / unresolved item | Owner and closure evidence |
|---|---|---|
| I00-01 | Catalogue scan is not every-string contextual inventory | UI/backend owners triage literals, all callers, runtime/ARIA/export states; no unknown required surface |
| I00-02 | CLDR is not complete national/regional legal authority | Product research owner checks official country records, political/territory scope and versioned licence before activating suggestions |
| I00-03 | No allocated translators/native reviewers | Product owner assigns named reviewers per locale/surface; critical legal/billing/security needs qualified review |
| I00-04 | Implementation predecessor gates unresolved | Owner records Phase10/product review and explicit I18N entry against accepted baseline; this document cannot approve them |
| I00-05 | Plurals, gender, inflection, word order | ICU whole-sentence contexts, Slavic/Irish/Welsh fixtures, native review; no fragment concatenation |
| I00-06 | Turkish casing, Greek accents, Serbian script, names | Locale-aware search/display separate from invariant IDs; preserve original names and qualification titles |
| I00-07 | Dates/timezones/DST, salary/currency | UTC storage, partial-date precision, explicit timezone; formatting never FX conversion |
| I00-08 | Fonts/glyphs, RTL readiness, long labels | Licensed extended Latin/Greek/Cyrillic font tests, logical layout and focus; RTL activation only when approved |
| I00-09 | Career fact loss, frozen PDF drift, stale writes | UI switch never mutates facts/history/undo; ApplicationAssetsService and revision contracts retained |
| I00-10 | Private content external translation | No PII export; separately approved consent/contracts/data controls before external translation; no live-model calls |
| I00-11 | Draft locale exposed as supported | Per-surface publication gate, English fallback; no selector/SEO claims from catalogue presence |
| I00-12 | Backend literal errors and queue drift | Stable error codes, typed escaped params, deterministic event-time locale and retry tests |
Public release requires required-key completeness, syntax/placeholders/plurals and escaping checks, whole critical journeys, native/proficient review, accessibility/device/PDF tests, country/provider truthfulness, owner release decision and actual deployed identity. Status advances separately per surface: planned → draft/machine_draft → review_required → reviewed → qa_passed → release_approved → released. No generated JSON grants review or approval. Approval evidence must be externally controlled and source-bound. All catalogue entries here are `planned`; existing en/nb code presence is independently recorded, not relabelled as newly qualified release.
Human/native/legal/device/physical-print review: pending, not executed. Provider and live-model tests: not run. Implementation/release: not authorised. Independent planning can continue on I00-01/02 without waiting for runtime gates.
+22
View File
@@ -0,0 +1,22 @@
# Surface inventory and message accounting
All rows need a source-bound contextual census before I18N-00 acceptance. Existing-catalogue inventory is in `MESSAGE_INVENTORY.json`; partial JSX/accessibility literals are now recorded in `FRONTEND_LITERAL_CANDIDATES.json`, with direct reads and dynamic calls in separate inventories. This is not a 100% coverage claim. Namespace assignments remain provisional until caller review; translator context cannot be inferred safely from key names alone. The AST inventory identifies syntactically named `t` calls, not symbol-resolved calls. See CONTEXT_TRIAGE.md for reviewed literal context and the 108 resolved conditional calls; 80 table/template/wrapper calls remain.
| Surface / proposed namespace | Source owner / inspection target | Content boundary and required evidence |
|---|---|---|
| Account, onboarding, recovery / auth | views LoginPage, ForgotPasswordPage, ResetPasswordPage, VerifyEmailPage; AuthController | Forms, ARIA, errors, consent, email templates, multi-device hydration; preserve token URLs |
| Dashboard, navigation, mobile / app | App routing, dashboard components | Hidden/empty/loading/error states, keyboard labels, tooltips and layout expansion |
| Jobs, discovery, applications / jobs | JobDiscoveryPage, ApplicationWorkspacePage; JobPipeline | Translate controlled status labels, never stored identity/status codes or original advertisements |
| Career facts, imports / career | CareerProfilePage, career/CvImportReview, CvImportMappingEditor; CareerProfileService; Python app.py | Original facts and uncertainty remain; parser/script quality separate from UI coverage |
| CV editor, templates, letters / documents | CvBuilderEditor, DocumentsPage; ThemedCvRenderer, CoverLetterDocumentRenderer, ApplicationAssetsService | Output locale independent; headings, dates, filename labels; preserve null-as-inherit and JobApplication.Version |
| PDF, public CV / exports | PublicCvPage, PlaywrightCvPdfExporter, CvDocumentFonts | Font licence/glyph matrix, selectable text, physical print, frozen snapshots and public access |
| Email, inbox, reminders / communications | CorrespondenceInboxPage, GmailReviewPage, SmtpEmailSender, FollowUpReminderHostedService | User correspondence is private content; subject/preheader/plain/HTML copy and queued locale policy |
| Settings, linked accounts / settings | ConnectedAccountsPage, EmailProviderConnections | Provider names stay proper nouns; OAuth errors and cancellation need usable fallback |
| Billing, subscriptions / billing | StripeBillingGateway, entitlement UI | Amount and currency invariant; legal/tax wording needs qualified approval |
| Admin and operations / admin | AdminUsersPage, AdminSystemPage, AdminProcessingPage, AdminAuditPage, OperationsPage; OperationEventLog | Stable diagnostic codes; localized presentation without multilingual log parsing or PII leaks |
| Analytics, comparisons / analytics | AnalyticsPage, OfferComparisonPage | Plurals, dates, currency and accessible chart/table labels |
| Marketing, SEO, legal / public | LandingPage, RouteErrorPage, NotFoundPage; future Launch Site | No locale claims, hreflang or indexing for draft pages; owner mockup gate untouched |
| Backend/API/queues / errors | Controllers, UserNotificationStore, AiOperationQueue, CvProcessingQueue | Stable code plus typed parameters; UTC storage; deterministic queue-recipient locale |
| Python/AI / processing | tools/summarizer/app.py | Machine codes vs user text, validation and document-language metadata; no live-model qualification |
For each required message record: stable ID, namespace, exact source, source hash/line, all callers, English text, context/screenshot, typed placeholders, plural/select variants, sensitivity, owner, translator and independent review state. Sensitive values are runtime parameters, never translation exports. Static public UI text is eligible; names, CV facts, messages, tokens, job ads and employer claims are not automatically translated. Existing flat keys remain stable through migration; do not bulk rename for aesthetics.
-51
View File
@@ -1,51 +0,0 @@
# Direct-roadmap continuity
## Latest checkpoint — CLEAN-20 explicitly approved and verified
**Published and independently verified:** `78f7396adb2f1d3452c10e60bc0dbbd3a4a602e4` on `origin/feature/phase10-cleanup`; normal push exit 0 and subsequent ls-remote exact match. Graphify AST update completed locally (18,532 nodes / 46,020 edges); generated graph remains untracked. P10-02 and P10-03 now record bounded compatibility/backend retain dispositions, with no further removal candidate proven. P10-04/05 and independent audit are still incomplete.
Owner replied **"Approve CLEAN-20 only"** in this chat. This supersedes historical approval-pending statements below, without authorising any other deletion. [P10-01](P10-01.md) records the exact one-file removal, fresh typecheck/lint/build and 5/5 browser results, preserved 34 routes/57 groups, and 1,279 unchanged source files. Publication receipt follows in the next checkpoint. No final Phase 10 or production acceptance implied. Resume with this latest section, not the superseded controller/publication history below.
2 November 2026. Worktree: `C:\Users\Connor\.codex\worktrees\p10-assessment\Job tracker`. Branch: `feature/phase10-cleanup`. Initial HEAD: `fc5b9d377199ce51f480a920a3772108094929e3`; reported handoff `5cb903b989742b7a96cb22ddf4c0e24993b18980` is an ancestor and matched its original branch's live remote readback. Frozen application source remains `ba04d817fed26d659bfa2a56b089d6cac851dc34`.
## Completed and current gate
**Latest authority, 2 November 2026:** the owner's Continuous Progress Addendum explicitly retains precise P10-01 approval as outstanding, superseding the earlier interpretation of “continue” below. P10-01 is AWAITING_APPROVAL. Git publication is now resolved: normal push succeeded and independent remote readback matched `1692142295950e390a4cf807d9df86cc5cf96290`. Earlier failed attempts remain historical. Continue explicitly eligible independent planning under [the direct-roadmap register](../../direct-roadmap/ROADMAP_STATUS.md); do not use the former blanket conclusion that every later planning task is blocked. The I18N-00 source explicitly permits an audit while earlier gates remain blocked.
Continuation, 2 November 2026: the owner instructed “continue as far as you can” in response to the specific CLEAN-20 proposal. This is taken as permission to continue that nominated scope, not approval of additional candidates or later initiatives. Implementation still cannot begin across the mandatory publication gate. A normal push of clean local `8cdff28f0781e4c99efd06079149d9933e01cd4e` was retried once and again failed with the same remote SIGSEGV/pre-receive rejection. Independent remote readback again returned only the original handoff branch at `5cb903b`; the Phase 10 ref is absent. No server repair or hook bypass was attempted. The approval-pending statements below describe the preceding checkpoint; this continuation supplies the latest chat instruction, while publication remains BLOCKED.
Dependency disposition: P10-01 waits for required publication; P10-02–05 wait for their preceding checkpoints and applicable candidate decisions; PRODUCT-REVIEW-01 waits for accepted Phase 10; Global Jobs, I18N, Launch Site, Security Audit and Release Readiness wait for their ordered predecessors and entry gates. None is an independent next item that can be started by skipping this failure. The remaining external action is operator resolution of the Git-server hook fault, followed by normal push and exact remote verification. Preserve local work and stop at this boundary.
- Completed [P10-00](P10-00.md); preserved the existing staged worker draft with a dated review note. Only Markdown changed.
- Fresh checks: 263 indexed evidence hashes, 1,280 current frozen source files and 7 verifier-source entries all match; 57 groups retain 56 PARTIAL/C11 DEFERRED; 34 distinct routes match the preserved register. Product suites were NOT RUN. Historical results remain historical.
- Sole proposed candidate: **P10-01/CLEAN-20**, delete the unimported original CRA `job-tracker-ui/src/App.css`, blob `74b5e053450a48a6bdb4d71aad648e7af821975c`. Exact callers/data/routes, required checks, rollback and stop conditions are in P10-00. All other assessed compatibility code remains retained.
- **Await explicit candidate-specific owner approval in this chat and successful required publication. No implementation is authorised yet.** Do not treat approval of this stylesheet as permission for P10-02 or another initiative.
- Assessment checkpoint: **`7ba1367fd2e84375b3065eeedf9176a34996f77b`**, `docs(phase10): complete direct P10-00 assessment`. Four Markdown files, 258 inserted lines including the preserved staged draft. Documentation links, original-draft preservation, candidate hash and no-product-change assertions passed; staged `git diff --check` passed. Working tree was clean after that commit.
- **Publication FAILED / advancement BLOCKED.** Normal `rtk proxy git push -u origin feature/phase10-cleanup` exited 1: remote `fatal error: fault`, `SIGSEGV`, `github.com/go-enry/go-enry/v2/data.map.init.6()`; final result `pre-receive hook declined`. Independent subsequent `git ls-remote origin refs/heads/feature/phase10-cleanup refs/heads/test/pre-phase10-ux-acceptance` returned only `5cb903b989742b7a96cb22ddf4c0e24993b18980` for the handoff branch. No Phase 10 branch was published. No infrastructure repair, hook bypass or force push was attempted.
- The documentation-only commit containing this publication receipt is also local; resolve its exact SHA with `git rev-parse HEAD`. It changes no product source. Do not describe either local checkpoint as remotely verified.
After the Git-server operator resolves the hook fault independently, normal publication and exact remote readback remain required. Do not retry indefinitely or repair the server in this task. Owner approval of CLEAN-20 can be recorded while publication is blocked, but implementation must wait until both gates are satisfied. Assessment content completion is not published checkpoint acceptance.
## Resume without repeating the assessment
Read any newer owner reply and this handoff. Inspect current Git state and the candidate/source identity. Reuse the source-bound accepted evidence if unchanged. If CLEAN-20 is approved, perform only its documented patch/verification/publication, updating evidence and this handoff. Do not reinstall/retest unchanged product scope merely to restart this chat. Significant or affected changes require fresh applicable checks. Missing dependencies/graph/build/runtime prerequisites must be reported accurately, without modifying another worktree or inventing results.
No autonomous controller commands or state, keys, signatures, approvals, configuration or queue may be used, repaired or changed. It must remain paused. Do not modify `C:\Users\Connor\.codex\worktrees\pre-p10-ux\Job tracker`. No main merge, production deployment, production services, application AI models or deferred CV-import overhaul/personal portfolio work is authorised.
## Authoritative order after Phase 10 acceptance
All seven source files exist; their bytes were fingerprinted during P10-00. Only the active Phase 10 source was read as execution requirements here. Before entering each later workstream, read its complete source and every required linked/subordinate prompt, recheck dependencies and obtain its applicable entry decisions. Do not substitute this order table or old orchestrator records for those requirements.
| Order | Workstream / source below `E:\Storage\Projects\Active\temp docs\final\` | Source SHA256 observed |
| --- | --- | --- |
| 1 | PHASE-10: `Prompt 5 — Phase 10.txt` | `f3d5d183a1cd653aac2207a8435ba95fbb74ef4bb8cc91d605edd959f9f4ec72` |
| 2 | PRODUCT-REVIEW-01: `Prompt 6 — PRODUCT-REVIEW-01.txt` | `544d11a2d1e9a913397766c7e475f63338f0b735d2bb26dcabdedb6fe9e25a58` |
| 3 | INT-GLOBAL-JOBS-01: `done\Prompt 7 — INT-GLOBAL-JOBS-01.txt` | `c67c70862eecf677e1f2944fd0e17799068c054738d520513955fcf6542c52ce` |
| 4 | I18N-01: `I18N\00_MASTER_ORCHESTRATOR.md`, including its entire linked prompt pack | `6365901a0521d603f8059de31492bc6353229c684da23b8553df49b4844fd330` |
| 5 | LAUNCH-SITE-01: `Prompt 10 - homepage.txt` | `f1d2b143796725e37b9a86643975a716f0be2109687fc772c6e26dae5172eaa0` |
| 6 | SECURITY-AUDIT-01: `jobjakt-security\MASTER_PROMPT.md`, including its entire linked prompt pack | `37bec461f84df60b787bda45db3bd9af1a6c836c6c023f3ab6dd7dc4beb2c6db` |
| 7 | RELEASE-READINESS-01: `prompt 11 - release readiness.txt` | `12c846d754b170c2e767db05816f4053d9e8c4cf58a2349121b2de91875beaf2` |
Phase 10 checkpoints remain P10-00 baseline, P10-01 frontend, P10-02 CV/document compatibility, P10-03 backend/dependencies/config, P10-04 data/functional verification, P10-05 full acceptance. Subsequent scopes require evidence and the applicable candidate gates. If nothing is safely removable, say so; never invent a deletion to complete a checkpoint.
Human/device/language/printing, AI semantics, provider licences, hosted CI, security and production decisions remain separate. SQLite retirement stays a separately gated initiative. Production NO-GO does not prohibit an otherwise authorised bounded assessment.
-122
View File
@@ -1,122 +0,0 @@
# P10-00 — Direct assessment and deletion eligibility
**Subsequent implementation:** owner explicitly approved CLEAN-20 only. The approved candidate has now passed its required checks; see [P10-01](P10-01.md). Approval-pending descriptions below are retained as assessment history, not the latest state.
2 November 2026, Europe/Paris. **Assessment complete and published; P10-01 awaits candidate-specific owner approval.** Normal publication subsequently succeeded at `1692142295950e390a4cf807d9df86cc5cf96290`, independently read back from the remote. The Continuous Progress Addendum explicitly retains the owner gate. No application/test/dependency/schema change or deletion was performed. One narrowly bounded frontend stylesheet is nominated below; the other assessed areas remain retained. Phase 10 completion and post-redesign product-review acceptance are not established. Production remains NO-GO.
## Authority, baseline and draft review
The owner's direct-chat instruction authorises repository inspection and Markdown assessment only, then requires a stop for approval of the exact P10-01 scope. It explicitly prohibits using, repairing or activating the autonomous backlog orchestrator. Its old adapter, policy, signing and queue requirements describe autonomous execution; they are not prerequisites for this separately authorised direct assessment. No controller command, key, receipt, configuration or queue was accessed or changed. Future source-defined product, security, provider and human gates remain mandatory in their applicable scopes.
Read the complete external `Prompt 5 — Phase 10.txt`, including its prerequisites, fifteen inventory categories, checkpoint order and acceptance requirements, and the original [implementation plan](../IMPLEMENTATION_PLAN.md#phase-10--cleanup). External source SHA256: `f3d5d183a1cd653aac2207a8435ba95fbb74ef4bb8cc91d605edd959f9f4ec72`. [AGENTS.md](../../../AGENTS.md), its RTK instructions, the [current architecture pointer](../../architecture/current.md), [overview](../../architecture/overview.md) and linked frontend/backend/data/integration/schema/deployment descriptions govern ownership.
| Identity | Fresh observation |
| --- | --- |
| Worktree | `C:\Users\Connor\.codex\worktrees\p10-assessment\Job tracker` |
| Branch / initial HEAD | `feature/phase10-cleanup` / `fc5b9d377199ce51f480a920a3772108094929e3` |
| Initial changes | Only staged `docs/automation/stages/PHASE-10/P10-00.md`, 93 lines; no unstaged or unrelated files |
| Reported handoff | `5cb903b989742b7a96cb22ddf4c0e24993b18980`, verified ancestor of initial HEAD |
| Remote handoff readback | `git ls-remote origin refs/heads/test/pre-phase10-ux-acceptance` returned exactly `5cb903b989742b7a96cb22ddf4c0e24993b18980`; the Phase 10 branch did not yet exist remotely |
| Frozen tested application | `ba04d817fed26d659bfa2a56b089d6cac851dc34`, ancestor of HEAD; all subsequent committed differences are inside `docs/automation/handoffs/pre-phase10/` |
| Final assessment/publication identities | Recorded in [HANDOFF.md](HANDOFF.md); resolve current branch HEAD, never infer publication from an older readback |
Reviewed and preserved the [existing draft](../../automation/stages/PHASE-10/P10-00.md). Original staged content SHA256 was `55afecbcb09d91762fdddb2670c409566bf58f9fce6c2a705627e9fcfb8e10d0` (16,809 bytes). Only a dated review notice is added; its original text remains intact. Its positive active-consumer findings are useful. Its supplied manifest identity, asserted verified owner/controller decisions, Git-access failure, required controller canaries and prohibition on worker commits are historical context, not independently verified facts or direct-chat requirements. Its no-candidate conclusion is superseded only by the additional stylesheet investigation below. A worker's completion statement does not establish acceptance.
Graphify query was attempted before source searches. It failed because this worktree has no `graphify-out/graph.json`; no graph was created and no other worktree's graph was used as current proof. Source inspection used RTK-wrapped `rg`, Git, bounded file reads and assert-based integrity checks. No dependency installation or infrastructure repair occurred.
## Accepted evidence and its applicability
Reviewed the [Pre-Phase-10 acceptance](../../pre-phase10-ux/ACCEPTANCE.md), [CV-QA handoff](../../pre-phase10-ux/CV_QA_HANDOFF.md), [integration QA acceptance](../../cv-integration-qa/ACCEPTANCE.md) and [Phase 10 handoff](../../cv-integration-qa/PHASE_10_HANDOFF.md), [CV-UX acceptance](../../cv-redesign/ACCEPTANCE.md) and [compatibility handoff](../../cv-redesign/CV_IMPORT_HANDOFF.md), [CV-import acceptance](../../cv-import/ACCEPTANCE.md), and [Phase 9 security/requalification addendum](../phase-9/p9-sec-02/ACCEPTANCE_ADDENDUM_2026-10-25.md). Their conditional development decisions remain limited to their stated scope.
The later [final development-entry review](../../automation/handoffs/pre-phase10/FINAL_DEVELOPMENT_ENTRY.md), [authority reconciliation](../../automation/handoffs/pre-phase10/AUTHORITY.md), [baseline](../../automation/handoffs/pre-phase10/PHASE10_BASELINE.md), [handoff](../../automation/handoffs/pre-phase10/HANDOFF.md), [reproduction contract](../../automation/handoffs/pre-phase10/REPRODUCE.md), [ready-to-run conditions](../../automation/handoffs/pre-phase10/READY_TO_RUN.md) and current acceptance/evidence index distinguish historical statements from later decisions. Read the linked [PDF report](../../p10-entry-final/REPORT.md), review guide, owner-review requirements and [S01 disposition](../../automation/handoffs/pre-phase10/S01_APPROVAL.md). The 30 October owner metric/visual records supersede earlier metric/visual-pending statements only for their approved development scope. Physical printing/device/AT/language checks are still unperformed. No accepted PDF criterion was reopened or changed.
Fresh checks against the current worktree:
| Check | Result / exact boundary |
| --- | --- |
| Indexed compressed evidence hashes | **PASSED: 263/263** SHA256 values match `TEST_EVIDENCE.json`; this does not rerun their producers |
| Application source-before/source-after manifests | **PASSED: identical**, with **1,280/1,280** current file hashes matching; zero mismatches |
| Handoff verifier-source identity | **PASSED: 7/7**, both worktree bytes and the committed `39bf430401d86f894277fdd78e7eb88c58d81e8b` objects match the indexed manifest |
| Preservation classification | **PASSED membership check: 57 unique groups**, retaining **56 PARTIAL / C11 DEFERRED**; no promotion to PASS |
| Route census | **PASSED: 34 distinct application routes**, exactly the original 33 plus `/admin/processing`; outer/shell wildcard infrastructure and duplicate `/` are not extra capabilities |
| Product suites, typecheck, lint, build, browser and visual runs | **NOT RUN in P10-00**; assessment changed Markdown only |
| Full package semantic/schema/native-membership verifier | **NOT RUN**; its entry contract requires the original handoff branch and restricts all descendants to the handoff directory. No verifier was changed or bypassed to make this direct assessment appear accepted |
The hash/source checks support reuse, not a new full regression or independent security attestation. The historical package retains 1,448 backend / 1,031 frontend cases, 51 affected Windows browser cases, separate import 8 / MariaDB 90+3 / RD21 6 / admission 1 / Linux 8, Python 83 offline +14 real Docling, and native exports with their actual source/runtime/process identities. These lanes are not added into one total. Older broad browser evidence remains historical. The approved S01 36/36 per platform re-evaluated existing documents; original Windows 28/Linux 20 failures are preserved. No new PDF was generated.
## Inventory and retained compatibility
The [nineteen-entry inventory](../../automation/handoffs/pre-phase10/CLEANUP_INVENTORY.md) and preserved draft remain the detailed retain register, including historical purpose, consumers, preservation IDs, proposed tests and risks. The table below reconciles every external inventory category and records the additional concrete candidate. An active consumer defeats deletion eligibility; no exhaustive repository-wide absence claim is made for the retained areas.
| Required category | Current evidence / disposition |
| --- | --- |
| Old page components | CLEAN-01/08: `App.tsx:61,67,441,446` lazy-loads the current CV editor and admin processing page. **Retain**; names/age do not establish supersession |
| Superseded layouts | CLEAN-06/07: `DashboardView.tsx:20–22,333,367` uses layout state, editor and grid together. **Retain** show/hide/save/reset/conflict/navigation and persisted schema-2 geometry |
| Old CV Editor implementations | CLEAN-01/03: builder routes and gallery/customisation consumers remain active. **Retain** blank/inherit, history, undo, settings and entitlements |
| Obsolete CV Import screens | CLEAN-04/05: `CareerProfilePage.tsx:410,447,868` separates old-run review/accept from Docling review; `ProfileCvController.cs:270` still exposes the paired accept action. **Retain** both paths |
| Unused document components | CLEAN-02/10/12: thumbnail is imported/rendered by gallery and library; renderer design-version branches and `ApplicationAssetsService` revision-aware writers remain active. **Retain** |
| Duplicated styling | CLEAN-16: app MUI styling, fixed document CSS, sandboxed previews and RGL CSS have distinct consumers. No duplicate consolidation is proven. **Retain** |
| Unused design tokens | CLEAN-16: `ThemeProvider.tsx` uses `CssBaseline`/`getTheme`; no unused-token proof. **Retain** |
| Dead hooks/utilities | CLEAN-07/19: dashboard layout hook is imported; duplicate reminder-read optimisation remains unmeasured. **Retain**, no performance change nominated |
| Unused frontend routes | CLEAN-09: all 34 remain registered; `/kanban`, `/correspondence/review`, `/applications/:id` retain explicit redirect behavior. **Retain** bookmarks, query/hash/state and owner boundaries |
| Unreferenced API endpoints | CLEAN-05/11/12: paired legacy accept UI/API, canonical mapper and revision-aware document service remain. External-consumer absence is unproved. **Retain** endpoints/services/DTOs/mappings |
| Obsolete feature flags | CLEAN-15: `cv_import_ai.py:20` reads `CV_IMPORT_AI_ENABLED`, default false; accepted optional adapter is disabled/disconnected. Withholding is not obsolescence. **Retain disabled** |
| Unused dependencies | CLEAN-13/14/17: RGL JS/CSS imports at `DashboardGrid.tsx:4,7–8`; existing provider/parser/runtime/tooling consumers remain. No package removal nominated; runtime/test/scripts/Docker/platform census would be required for one |
| Old localisation keys | CLEAN-16: `I18nProvider.tsx:67` indexes `translations[language][key]` with fallback. Dynamic-key absence is unproved. **Retain** EN/Bokmål catalogues |
| Deprecated test fixtures | CLEAN-18: Jest roots/transform and Playwright `testDir` remain configured; historical PDF/old-run/provider/revision fixtures are acceptance consumers. No fixture is nominated |
| Dead asset references | CLEAN-16/18: layout references favicons/manifest; manifest references both logo sizes; landing page references all three mockups. **Retain** those assets. Additional unreferenced stylesheet candidate CLEAN-20 below |
### CLEAN-20 — Original CRA `job-tracker-ui/src/App.css`
**Nominate for P10-01 only; do not remove during assessment.** Historical purpose: initial Create React App demonstration styling, present since `2e8a29b` (first commit). Contents: `.App`, `.App-logo`, `.App-header`, `.App-link`, reduced-motion-aware logo animation and `App-logo-spin`; 38 lines / 602 current worktree bytes. Git blob: `74b5e053450a48a6bdb4d71aad648e7af821975c`. Worktree SHA256: `61f6c43a638172676cd2813c94dc4db88f6cf73faec19d0cd116b1ff19e46efc`.
Unused evidence uses several independent boundaries:
1. Case-insensitive `rg` across frontend, API, scripts, sidecar and deploy sources finds the distinctive selectors/keyframe only inside this file, and no `App.css` consumer. A separate tracked `git grep` likewise finds no filename consumer. There are no application-local unstaged/untracked additions at entry.
2. Inspected actual build entry chain: `app/page.tsx` → `app/[[...slug]]/ClientShell.tsx` (literal dynamic import) → `src/ClientApp.tsx` → `src/App.tsx` → current views/layout. `app/layout.tsx:4` imports **`index.css`**, which is retained. `ThemeProvider.tsx` owns active MUI/CssBaseline styling. App source and shell do not use the CRA root classes.
3. Inspected `next.config.js`: static export plus development rewrite, no source-directory/glob CSS loader or additional injection. Script/config searches show no `require.context`/`import.meta.glob` CSS ingestion. Jest mocks explicitly imported styles; it does not load this file itself. Package scripts invoke the current Next/Jest/ESLint/TypeScript tools.
4. Inspected delivery boundaries: frontend Dockerfile builds then copies only `/app/out` to nginx; nginx serves that output, and the local export server resolves only `out/`. `src/App.css` is outside public assets and has no exported/source-file URL contract. It is not document CSS, an API payload, font or stored settings format. No database inventory is required to remove this unserved source stylesheet; no persisted record is modified.
Current consumers/replacement: **none found; no replacement needed**. Preserve the already-active `index.css`, `theme.ts`, `ThemeProvider.tsx`, RGL styles, renderer styles and licensed fonts. Affected preservation review: PRES-E01–E09 (shared UI/theme/responsive/accessibility assurance); all other 48 groups and all 34 routes remain unchanged. Removal risk: **LOW**, contingent on unchanged candidate/entry/config identity and successful affected checks. Runtime/build-size improvement is **NOT MEASURED**; an unbundled source file does not imply a smaller runtime bundle.
## Data, backend and SQLite implications
Career Profile remains canonical. Preserve CV overrides and null-as-inherit, explicit blank flags, current-master history semantics, old stored CV formats/design-version-1 rendering, submitted/frozen CV/letter HTML/settings/binaries and application associations. Cover-letter writers continue under `JobApplication.Version` and `ApplicationAssetsService`; retain generic null-clear versus draft null-unchanged, no-op, restore-as-new, attachment flags, owner filtering and transaction/RD21 stale-write/rollback/retry protections. Keep historical extraction runs and paired review/accept DTOs. No data migration, schema change, writer consolidation or route transition is proposed.
Reviewed MariaDB standardisation [README](../../database/mariadb-standardisation/README.md), [acceptance](../../database/mariadb-standardisation/ACCEPTANCE.md) and [six-stage SQLite retirement](../../database/mariadb-standardisation/SQLITE_RETIREMENT.md). Actual MariaDB coverage does not establish installation inventory, full-fidelity export/isolated restore/transfer, complete harness parity, approved cutover/rollback-after-writes or retention sign-off. **SQLite retirement remains REMOVAL NO-GO as a separate initiative.** Keep provider packages/helpers/branches, partial export tools and immutable migrations. It is not a prerequisite for unrelated stylesheet cleanup. No MariaDB upgrade is proposed.
## Proposed P10-01 scope — CLEAN-20 only
Approval requested for this exact candidate at application baseline `fc5b9d377199ce51f480a920a3772108094929e3`, plus this Markdown-only assessment descendant. Before acting, require a clean published assessment checkpoint, unchanged application/build/test inputs and the exact candidate blob above. If a consumer/config/source change appears, stop and reassess rather than broadening approval.
Allowed implementation after explicit approval:
- Delete only `job-tracker-ui/src/App.css` with the patch workflow. Update this phase's evidence, TODO and continuity Markdown. No caller, export, fixture, configuration, dependency, API, route, data, renderer, font or localisation change is expected or approved.
- Recheck filename/selectors, static/dynamic entry and delivery boundaries, 57 IDs/34 routes and exact diff scope. Run existing frontend `typecheck`, `lint` and `build` using the unchanged lockfile and an isolated local dependency/build tree. Dependencies are absent in this worktree today; restore only the existing lock if needed in the authorised implementation, without upgrades or shared-worktree edits.
- Run existing `landing-presentation.spec.ts` (both EN/NB cases cover light/dark at 320/390/768/1440) and focused `smoke.spec.ts` cases `public plans stay honest, responsive and keyboard accessible`, `login establishes an authenticated session`, and `Career Workspace loads from the authenticated application shell`, with zero retries, exact discovered membership, fresh isolated fixtures/static output and native exits. This is a candidate regression sample, not a full suite or human accessibility acceptance. Do not run model/provider operations or additional PDF-producing smoke cases.
- Reuse unchanged backend/provider/sidecar/PDF evidence with source checks. Do not rerender PDFs, reopen approved metrics or rerun thousands of tests for this unimported file. Broader phase acceptance still requires the complete applicable P10-04/P10-05 programme; significance or affected-source changes require appropriate full suites.
- Run `graphify update .` as required after a code change, with AST-only/local operation. Graph absence is a known tooling limit: if the installed update cannot operate without a graph, record its actual result and the maintenance limitation; do not rebuild another worktree, fetch an extractor or add graph/orchestration infrastructure under this approval. Graph maintenance is not product-regression evidence.
- Commit the validated candidate checkpoint, normally push `feature/phase10-cleanup`, and independently compare its remote SHA. Publication failure is a real gate, not permission to repair Gitea or bypass hooks.
Rollback: revert the single implementation commit, restoring the exact original stylesheet blob; documentation records the reversal. No database restore, data rewrite, redirect or compatibility migration is needed. Failed build/browser/source-scope evidence prevents acceptance. Do not waive failed assertions, remove fixtures or extend the patch to make unrelated checks pass.
This approval would cover **P10-01/CLEAN-20 only**. It would not authorise P10-02, further removals or later initiatives. Subsequent candidate-specific implementation gates remain. When no additional safe candidate is proven, report that result and retain the code.
## Limitations, decisions and stop
This is a bounded cleanup inventory with one positively analysed stylesheet nomination, not exhaustive dead-code/package/API/locale-key/asset non-use proof. Historical CV/old-run/provider runtime behavior was not freshly executed. No source/data loss or performance improvement is claimed. Native package schemas/counters were not freshly re-parsed by the full branch-specific handoff verifier; fresh checks above cover byte integrity, source identity, group states and route membership only.
Retained independent debt: physical device/AT/contrast/proficient EN-NB/printing **NOT TESTED**; CV-model qualification **BLOCKED**, adapter disabled; deterministic PDF recall and source-review burden **PARTIAL**; canonical-only generic-AI context limitation retained; Python vendor advisory coverage **INCOMPLETE/CONDITIONAL**; hosted CI/isolation **BLOCKED/UNVERIFIED**; MySqlConnector/TLS, native image/parser production isolation, filesystem/off-disk backup/restore and deployed identity remain release qualifications. No fresh advisory search, live AI, licensed-provider or production access occurred.
| Decision | Current result |
| --- | --- |
| P10-00 direct assessment | **COMPLETE** within the authorised documentation/inspection scope |
| P10-00 checkpoint publication | **PASSED**: subsequent normal push and independent readback at `1692142295950e390a4cf807d9df86cc5cf96290`; previous pre-receive failures remain historical |
| CLEAN-20 static deletion eligibility | **NOMINATED**, with exact implementation verification and owner gate above |
| P10-01 implementation | **AWAITING_APPROVAL** of the exact candidate scope; publication prerequisite satisfied |
| Phase 10 complete acceptance | **NO-GO / NOT YET ESTABLISHED**; P10-01–05 not complete |
| Redesign development completion | Existing **CONDITIONAL GO** remains scoped; final cleanup acceptance not established |
| Post-Phase-10 PRODUCT-REVIEW-01 readiness | **NO-GO** until Phase 10 is accepted and applicable entry conditions are satisfied |
| Production release | **NO-GO** |
**STOP here. Request approval of P10-01/CLEAN-20 only.** The orchestrator must remain paused. The deferred CV-import overhaul and personal portfolio website remain outside this roadmap execution task. [HANDOFF.md](HANDOFF.md) records continuity, exact checkpoints and the later source order; later prompt packs must be read completely before their workstream is entered.
-39
View File
@@ -1,39 +0,0 @@
# P10-01 — CLEAN-20 implementation
2 November 2026. Owner explicitly answered **"Approve CLEAN-20 only"** to the candidate-specific proposal. Implemented only removal of the unused 38-line `job-tracker-ui/src/App.css`, blob `74b5e053450a48a6bdb4d71aad648e7af821975c`. No caller, route, dependency, lockfile, test, API, database schema, document renderer, localisation or active theme changes.
## Entry and preservation
Clean `feature/phase10-cleanup` entered at `36a355ea54a2357907ac5a5bf655d6946388b202`; independent remote readback matched. Candidate blob matched exactly. Application/build/test inputs unchanged from assessed `fc5b9d3` baseline before this deletion. Reference search found distinctive selectors only in the candidate; source entry/config/delivery boundary evidence in P10-00 remains applicable because those bytes did not change.
Fresh source-manifest comparison: 1,279 matching files, sole expected missing file App.css, zero mismatches. 34 distinct route identities match the preserved register. All 57 preservation groups remain present, with prior 56 PARTIAL / one DEFERRED states unpromoted. No CV, letter, legacy import, provider or RD21 contract changed.
## Fresh checks
| Check | Result |
| --- | --- |
| Isolated frontend dependency restoration | PASS: `npm ci --offline --no-audit --no-fund`, unchanged lockfile, 825 packages; no upgrades |
| Frontend typecheck | PASS, exit 0 |
| Frontend lint | PASS, exit 0, max warnings 0 |
| Static production frontend build | PASS, exit 0; local test API URL; fresh isolated output |
| Local API restore/build for browser fixture | PASS with existing SDK 9.0.317; Release build zero warnings/errors |
| Exact browser discovery | Five cases in two files |
| Browser execution | PASS 5/5, zero skips/flaky/retries; native exit 0; 44.5 seconds |
| Route/preservation/source scope | PASS as above |
| Graphify | AST-only update attempted/completed status recorded in handoff; generated graph untracked |
Browser cases: both EN/NB `landing-presentation` cases (light/dark at 320/390/768/1440), public-plan responsive/keyboard smoke, authenticated login, and Career Workspace shell. Existing Playwright config creates a fresh temporary SQLite fixture, disables AI/import/provider-alert workers, refuses server reuse and serves this worktree's prebuilt static export. Fixture-only schema initialisation is not a production migration. No live models/providers or PDF-producing tests were invoked.
Native browser report and source/check summary: [clean20-evidence/SUMMARY.json](clean20-evidence/SUMMARY.json), [compressed native report](clean20-evidence/browser-native.json.gz). This is a candidate regression sample, not full regression or Phase 10 acceptance. Unchanged backend/provider/sidecar/PDF evidence remains historical and source-bound; no accepted PDF criterion reopened.
## Failed setup attempts and retained limitations
System `dotnet` failed to resolve pinned SDK; used repository-documented existing `C:/Users/Connor/.dotnet/dotnet.exe` and DOTNET_ROOT. First no-restore API build failed because fresh worktree lacked assets; normal locked restore succeeded, followed by successful build. No project/runtime configuration changed. Offline npm restore emitted deprecation warnings and an unapproved optional unrs-resolver install-script notice; no install-script approval or dependency change made. Required lint/type/build/browser subsequently passed.
Fresh fixture startup emitted existing SQLite migration transaction/rebuild warnings and local DataProtection unencrypted-key warning. These were not hidden or repaired under CSS scope. They do not qualify backup/restore, provider parity, hosted CI, production secrets or deployed services. Graph tool lacks optional SQL/PDF extractors; no installation attempted.
## Rollback and remaining gates
Revert this candidate implementation commit to restore the exact original stylesheet; no data restore needed. A failing required candidate check would prevent acceptance and trigger restoration; all required candidate checks passed.
P10-01/CLEAN-20 implementation is verified. Required publication must be independently read back before published completion is claimed. P10-02–05 and overall Phase 10 acceptance remain open; no additional deletion is approved or invented. Next: retained CV/document compatibility review under P10-02, followed by the required downstream qualification programme. Orchestrator remains paused/untouched; no main merge or deployment.
-12
View File
@@ -1,12 +0,0 @@
# P10-02 — CV/document compatibility disposition
Review after published CLEAN-20. No additional safe CV/document deletion proven. Retain all assessed paths; no implementation removal nominated. This is a completed bounded retain/remove review, not fresh functional acceptance or a claim of exhaustive dead-code proof.
Reused the source-bound P10-00 inventory and accepted handoff: all 1,279 remaining frozen files match; only approved App.css is absent. Fresh active-consumer confirmation:
- `CareerProfilePage.tsx:410,447,868` distinguishes non-Docling and Docling persisted runs and calls the legacy accept endpoint with expected revision. `ProfileCvController.cs:270–314` exposes that endpoint, rejects inappropriate document-import acceptance, checks revisions and preserves concurrency conflicts. **Retain both workflows.**
- `CvTheme.cs:199` and `ThemedCvRenderer.cs:27,242–282` resolve explicit design-version-2 settings while retaining historical layout branches. **Retain legacy rendering and frozen settings.**
- `ApplicationAssetsService` remains the revision/history writer, with current version snapshots and design entitlement validation. Existing null/blank/no-op/restore semantics and canonical Career Profile ownership are unchanged. **Retain, no writer consolidation.**
- Current editor/gallery/thumbnail and original fixtures retain their P10-00 positive consumers. No duplicate replacement proven; no imported data, old extraction record or submitted binary removed.
Tests: no new P10-02 product tests; sources unchanged and historical CV/provider/PDF/RD21 evidence reused only within original qualifications. CLEAN-20 Career Workspace sample is fresh but not historical-format/PDF requalification. P10-04/05 and independent audit remain required. No migration or PDF rendering requested. Deferred CV-import overhaul stays outside scope.
-11
View File
@@ -1,11 +0,0 @@
# P10-03 — Backend, dependency and configuration disposition
Bounded review complete with **no proven additional safe deletion**. Reuse P10-00 CLEAN-11–19 active-consumer inventory; source comparison confirms backend, dependencies, locks, scripts and configuration are unchanged. Do not manufacture a removal to satisfy a stage name. Implementation scope is empty; full independent audit and P10-04/05 acceptance remain open.
- Keep canonical mapper, versioned writers, legacy parser and disabled optional interpretation adapter: different responsibilities/current readers persist. Disabled is not obsolete.
- Keep migration history and both database providers. Reviewed `SQLITE_RETIREMENT.md` again: installation inventory, full-fidelity export/restore, transfer reconciliation, coverage parity, approved cutover/reverse transfer and retention sign-off are not established. Existing SQLite browser fixture is itself a current consumer. SQLite removal remains separately gated and does not block unrelated cleanup.
- Current project embeds licensed document fonts and declares runtime/platform/provider packages. No package has a complete runtime/build/test/script/container/platform absence proof. No upgrades, lock changes, flag activation or platform consolidation performed.
- Keep current routes/redirects, locale keys, original tests and frozen PDF oracles. Dynamic consumers and historical compatibility defeat name/age-based deletion.
- Duplicate reminder-read optimisation is still unmeasured and therefore not nominated for cleanup.
Fresh supporting check from P10-01: locked API restore/Release build and frontend offline restore/typecheck/lint/build passed. These prove builds for retained inputs, not unused-package absence or fresh security/provider qualification. Backup-parser remediation lives on its independent release branch; it is not silently integrated into this Phase 10 branch.
-24
View File
@@ -1,24 +0,0 @@
# P10-04 — Functional and data integrity qualification
2 November 2026. PARTIALLY COMPLETE. Selected document-contract regression executed against Phase 10 application sources after CLEAN-20. This checkpoint is not full regression or final acceptance.
## Fresh results
PASSED: 27 tests, zero failures/skips, native exit 0, across ApplicationAssetsTests, CvRevisionReadinessTests and CvExportRevisionTests. Coverage includes association/tenant isolation, canonical-profile ownership, letter history and restoration, null/inherited overrides, stale-write rejection and PDF-export revision preconditions. Local in-memory/temporary SQLite fixtures, mocked PDF exporter; no physical PDF acceptance, production database, model or provider validation.
Command: pinned local .NET SDK 9.0.317, Release test with `--no-restore`, filter `FullyQualifiedName~ApplicationAssetsTests|FullyQualifiedName~CvRevisionReadinessTests|FullyQualifiedName~CvExportRevisionTests`, TRX logger. Restore separately passed with locked mode; lockfiles and product source remained unchanged. Initial invocation incorrectly passed `--locked-mode` to dotnet test and was rejected by MSBuild before running tests; this was corrected by separate locked restore, without configuration edits.
Raw native evidence: [document-contracts.trx.gz](p10-04-evidence/document-contracts.trx.gz). Uncompressed SHA256 `692a0fe8016140c3198e76e6b3c1d56f438d80390666bc7f1b2dc06b4ac4ead5`. Test records identify individual cases and execution timestamps.
## Remaining qualification
Additional PASSED executions, same Release assembly and native exit 0:
- ProfileCvControllerTests: 36 passed, zero failures/skips. Includes import admission, reviewed persistence and deterministic/fixture parsing with mocked AI dependencies. No live classifier/model or provider was used. [Native TRX](p10-04-evidence/p10-04-import-compatibility.trx.gz), uncompressed SHA256 `844cd54ff382bff0d48429336f8588ab010f0c72ea255ca02fe300b1561dc513`.
- SqliteDateTimeOffsetCompatibilityTests and CareerProfileServiceTests: 26 passed, zero failures/skips. Local canonical-profile history plus SQLite submission capture, sparse/missing-attachment package handling, owner-scoped date ordering and extraction endpoints. [Native TRX](p10-04-evidence/p10-04-local-data-compatibility.trx.gz), uncompressed SHA256 `1ac55913fdc3b705afbed27829fb280bef08d33c62fa26faa2c04e23c0c95908`.
The three filters are disjoint: 89 distinct backend cases passed, zero failed/skipped. They are selected regression coverage, not a complete backend pass.
Frontend PASSED: five suites, 92 tests, zero failures/pending, native exit 0, 41.237 seconds. Exact selected paths: `career-history-view.test.tsx`, `application-assets.test.tsx`, `cover-letter-document.test.tsx`, `cv-document-controls.test.tsx`, `cv-import-review.test.tsx`; Jest `--runInBand --runTestsByPath`, local mocked contracts. [Native JSON](p10-04-evidence/frontend-document-workflows.json.gz), uncompressed SHA256 `b919a96d94218ff166de684f6b82d3ce6f34d47b51d52480721e8955df2df257`. Browser/real PDF fidelity and semantic AI quality are separate evidence. Backend and frontend counts remain separate.
Migration rehearsal/rollback, MariaDB integration, sidecar, complete suites, security acceptance, hosted CI and human/device qualification remain NOT RUN here. Reuse unchanged accepted renderer evidence only within its source/fixture/environment boundaries. No migration or destructive cleanup is proposed. P10-05 remains open; production remains NO-GO.
@@ -1,40 +0,0 @@
{
"scope": "P10-01 CLEAN-20 only",
"approval": "Owner chat: Approve CLEAN-20 only",
"baselineCommit": "36a355ea54a2357907ac5a5bf655d6946388b202",
"deletedPath": "job-tracker-ui/src/App.css",
"deletedBlob": "74b5e053450a48a6bdb4d71aad648e7af821975c",
"sourceManifestFiles": 1280,
"sourceManifestMatched": 1279,
"sourceManifestMissing": [
"job-tracker-ui/src/App.css"
],
"sourceManifestMismatched": [],
"routes": 34,
"preservationGroups": 57,
"checks": {
"typecheck": "PASSED exit 0",
"lint": "PASSED exit 0",
"frontendBuild": "PASSED exit 0",
"apiBuild": "PASSED exit 0, 0 warnings/errors",
"browser": "PASSED 5/5, zero skips/retries/flaky"
},
"browserStats": {
"startTime": "2026-11-02T20:41:52.224Z",
"duration": 44532.167,
"expected": 5,
"skipped": 0,
"unexpected": 0,
"flaky": 0
},
"browserMetadata": {
"isolatedDataRoot": "C:\\Users\\Connor\\AppData\\Local\\Temp\\jobtracker-e2e-4580-mvzq5nbx",
"actualWorkers": 1
},
"nativeReportSha256": "3b051b65fccbb79b298989ad52987c6e1c4c9fe60ff4e7d8796a40ca2e060bd1",
"compressedReportSha256": "baf659c51c4f412f30b8971588ef84c3863830b64afd5cbc874800172f95c3c0",
"limitations": [
"candidate regression sample, not full Phase 10 acceptance",
"no new PDF/model/provider/production qualification"
]
}
-10
View File
@@ -1,13 +1,3 @@
## Direct Phase 10 — 2 November 2026
- [x] P10-00: preserve/review the staged draft, verify baseline/evidence applicability and complete the [direct assessment](../redesign/phase-10/P10-00.md).
- [x] Publication gate: normal push and exact remote readback succeeded at `1692142` after the earlier Gitea failure; no hook bypass or server repair. Further progress is tracked in [the direct-roadmap register](../direct-roadmap/ROADMAP_STATUS.md).
- [ ] Owner gate: explicit approval of P10-01/CLEAN-20 only (`job-tracker-ui/src/App.css`), with the assessment's exact verification/rollback boundaries.
- [ ] After approval only: implement and qualify that candidate; commit, publish and independently verify the checkpoint. Stop at subsequent candidate/entry gates.
- [ ] P10-02–05 and later roadmap: preserve contracts and follow authoritative order from [continuity](../redesign/phase-10/HANDOFF.md). No later implementation is currently authorised.
The autonomous backlog orchestrator remains paused and untouched. Earlier TODO entries retain their historical dates and decisions.
## Phase7 final acceptance — 21 October 2026
P7-00–P7-12 implemented scope complete, CONDITIONAL GO; full1060backend/899frontend/351browser plus23contracts/56offline-sidecar passing. See [final report](../redesign/phase-7/p7-12/FINAL_ACCEPTANCE.md). Retain manual/provider/output/reliability qualifications and production NO-GO. Phase8 planning handoff conditional; implementation not started.
@@ -1,12 +0,0 @@
# Codex Security scan register
2 November 2026. Source baseline `ba826de1e5c959352e4442ab2fec5d02445dd32d`, branch codex/security-offline-preflight. Owner confirms installation; actual tool metadata/skill files verified. Production/third parties excluded. Paid/deep compute allowance pending. ROE: ../security/00-rules-of-engagement.md.
| Phase/workflow | Status | Actual evidence and limits |
| --- | --- | --- |
| 00 define-security-policy review | NOT RUN (full workflow); resolver substep COMPLETED | Installed helper resolve-security-md --list exited 0, returned two docs-only policies. No root policy created; proposal/review/approval remains. No scan ID. |
| 01 baseline standard scan | NOT RUN | Skill/tool exposure checked; threat-model/policy and capability preflight pending. No scan artifacts or findings. |
| 03 deep scan | BLOCKED | Baseline and separately approved compute/cost scope missing. No scan launched. |
| 15 final standard and diff scans | NOT RUN | Await baseline, remediation range and independent verification. |
No scan findings, closure verdicts or human release acceptance are implied by tool availability or regression tests.
-11
View File
@@ -1,11 +0,0 @@
# Security Phase 00 — offline engagement draft
2 November 2026. Owner: Connor, direct-chat roadmap authorisation. Source baseline `ba826de1e5c959352e4442ab2fec5d02445dd32d`; isolated branch `codex/security-offline-preflight`. Phase 00 is PARTIAL, not accepted.
Authorised now: source inspection, harmless synthetic local fixtures, minimal ordinary remediation within approved roadmap boundaries, sanitized reports and branch publication. No network attack target has been approved. Production, adjacent LAN services, real accounts/data, identity/payment/email providers, live AI/models, orchestrator state/keys/configuration/queue and the pre-P10 acceptance worktree are excluded.
Active staging testing is BLOCKED until exact host/IP, test users/roles, rate/concurrency/duration limits, independent database/storage, disabled egress and recovery/stop controls are approved and verified. Do not infer those from example localhost URLs or repository credentials. Emergency stop: terminate only the named audit-owned fixture process; never stop existing production/user services.
Proposed fixture boundary: disposable synthetic tenant A, tenant B and administrator; separate temporary data root and database; inert CV files and canary records; mocked OAuth, billing, email, job providers and AI. No routable credentials. Snapshot and restore qualification must precede staged mutation. This plan has not been instantiated or approved for active network testing.
Evidence: only sanitized reports/test artifacts in Git. Do not inspect real .env values, auth/signing stores or personal documents. Findings require calibrated confidence and safe reproduction; absence of a scan result proves nothing. No root SECURITY.md policy edits, suppressed findings or accepted risks are authorised by this draft.
-17
View File
@@ -1,17 +0,0 @@
# Phase 01 — partial source-backed threat model
2 November 2026, baseline ba826de1e5c959352e4442ab2fec5d02445dd32d. PARTIAL; baseline scan NOT RUN. Read the complete Phase 01 prompt and architecture frontend/backend/data-flow/integrations, API reference, security notes and deployment overview. The graph query failed because the new isolated worktree has no graph; direct scoped source review followed. No active network request or live-service test.
Verified dependency and documented data-flow inventory is in ASSESSMENT_INDEX.md. Threat actors to test: anonymous caller, tenant A, tenant B, administrator, revoked/limited session, malicious document author, incoming webhook sender and compromised external service. Assets: canonical career profile and history, CV/letter snapshots, application records, attachments, OAuth/mail tokens, sessions, billing entitlements, backups and administrative privileges. Secret values have not been inspected.
Source boundary observations (not proof of a secure deployment):
- AttachmentsController requires the local authentication scheme. List first queries the requested job; download/rename call FindOwnedAttachmentAsync. Downloads reject unmanaged paths and pending/missing files. Global filter/helper implementation, alternate upload paths and negative tests still need independent audit.
- UsersController declares Admin role authorization. Role mutation and reset/email operations require endpoint-specific review; class attributes alone do not establish safe privilege transitions.
- BillingController status/checkout/portal explicitly use local authentication; webhook explicitly allows anonymous requests and caps request size at 1 MB. Webhook verifies the Stripe signature via ConstructEvent, rejects invalid signatures, then refreshes subscription state. This can trigger external Stripe egress when configured; do not execute it against a real provider during offline tests. Review identity binding, replay, price qualification and mock negative coverage before acceptance.
Initial attack tree: reach another tenant's data via object IDs, background execution or shared files; obtain higher privilege via role/session/OAuth flows; cross file/network/model boundaries through uploaded content; forge billing authority through webhook or stale subscription state; expose secrets through public bundles/logs/backups. Each branch requires source tracing plus synthetic negative proof. These are hypotheses, not confirmed vulnerabilities.
ASVS Level 2 is a proposed planning target for private employment data, not a compliance claim. No unverified requirement IDs or vulnerability identifiers are assigned. Partial endpoint matrix is ENDPOINT_AUTH_MATRIX.csv; tests listed there are candidate existing suites, NOT executed audit evidence. Full route enumeration, middleware/global filter review, deployed exposure and complete endpoint/test mapping remain open.
Next permitted review: resolve owner filters and attachment sibling paths, inspect auth/session middleware, and complete the source matrix. Baseline standard scan requires the documented capability preflight and recorded results; no scan pass is inferred from this threat model. Root policy changes, if proposed, require exact-diff approval under the policy skill; keep review-only work progressing meanwhile.
-19
View File
@@ -1,19 +0,0 @@
# Independent security assessment continuation
Continuation: ATTACHMENT_OWNERSHIP_REVIEW.md traces the parent ownership filter and corrects the reflection-only test assumption. Fourteen existing relational fixture tests freshly passed on identical Phase 10 backend/test sources; native evidence published at db818e5e. Matrix distinguishes direct controller denials from unexecuted HTTP/list/upload/missing-owner/MariaDB checks. No full security scan or final integrated acceptance is implied.
Phase 00 offline preflight, 2 November 2026. Branch `codex/security-offline-preflight`, application baseline `ba826de1e5c959352e4442ab2fec5d02445dd32d`. No application/security implementation changed. No staging attacks or production access.
Read the external master, complete Phase 00 prompt, ROE/finding/release/scan-register templates, repository auditor skill, Codex Security policy and standard-scan skill instructions. Remaining stage prompts must be read before entering their stages. The old master heading “DO NOT START THIS NOW” is superseded for permitted offline work by the owner's later direct execution instruction; protected gates remain.
Verified inventory: package.json identifies Next 16.4.1, React 19/MUI/TypeScript; API csproj targets .NET 9 with EF SQLite and Pomelo MariaDB, Identity/JWT, Stripe, MailKit; Python requirements identify FastAPI/transformers/document dependencies. These are source dependencies, not deployed identities or proven reachable features. Architecture overview documents nginx/static export -> API -> DB/files/internal AI and provider boundaries; runtime exposure remains unverified. Preserve canonical Career Profile, CV null-as-inherit overrides, letter history and JobApplication.Version/RD21 contracts. No technology-version vulnerability claim is made without advisory/reachability analysis.
Baseline evidence reused from this exact source ancestry: P10-04 has 89 backend and 92 frontend tests passing, independently source-bound native artifacts. CLEAN-20 has five focused browser checks plus type/lint/build evidence. These are regression evidence, not a completed security audit; this new worktree did not rerun them. Backup parser repair exists on a separate published branch and is not integrated here.
Plugin exposure: standard/deep scan, draft/artifact/progress tools and documented skill files are available. The actual policy resolver ran successfully and found only docs/cv-import/SECURITY.md and docs/redesign/phase-9/p9-requal-01/SECURITY.md. Neither is an inherited root policy for API/UI source. No baseline/deep scan has run. Root policy creation needs exact proposed diff and separate owner approval under define-security-policy; defer that decision while independent source review continues. No new charge approved; deep scan remains blocked.
Execution order: finish inventory/threat boundaries and baseline policy review; standard scan after required preflight/gates; deep scan only with cost scope; phases 02–12 offline review/fixture work in source order; active phase 13 only with approved isolated target; remediation and independent retest; final full standard/diff scans; human release gate. Read every applicable subordinate prompt before its work. Do not treat these milestones as complete based on this plan.
Open: approved ROE/staging isolation, complete trust-boundary/endpoint matrix, root policy decision, baseline/final scans, deep-scan allowance, full independent audit, provider/device/CI/deployment identity and live backup/restore. Security release recommendation: BLOCKED/NO-GO pending evidence. No new vulnerability has been asserted in Phase 00.
Next permitted action: read Phase 01 and the linked architecture topics, verify endpoint/actor boundaries from source, and prepare the policy proposal without writing an unapproved root policy. No user input is immediately required for that review.
@@ -1,11 +0,0 @@
# Attachment ownership follow-through
2 November 2026. Source review plus bounded existing relational fixtures; not complete Phase 05, integrated security testing or deployed acceptance.
AttachmentsController.FindOwnedAttachmentAsync:42–47 includes JobApplication while selecting the raw child ID. JobTrackerContext:169–170 denies missing owners and filters JobApplication by CurrentUserId; the Attachment relation at 264–268 uses the parent foreign key. Attachment itself does not have a separate owner filter. Download, Rename and Delete all call this helper. ListForJob first checks the owned JobApplication exists, then limits child rows to that ID. Maintain these relationships; raw child queries without equivalent parent checks are not automatically safe.
AttachmentsControllerTests contains attribute/extension/size reflection tests, not cross-tenant behavioral proof. OwnershipGuardTests similarly checks helper presence. The stronger existing AttachmentConsistencyTests.Another_users_attachment_cannot_be_downloaded_renamed_or_deleted seeds a foreign job/file, clears tracking, checks three NotFound results and verifies the row/file remain.
Fresh targeted execution on the Phase 10 working tree: all 14 AttachmentConsistencyTests passed, zero failures/skips, exit 0, temporary SQLite and synthetic files only. Before execution, git diff between security and Phase 10 branches showed no JobTrackerApi/JobTrackerApi.Tests source difference. Existing Release assembly used --no-build/--no-restore. Evidence published and independently verified on Phase 10 at `db818e5ebd19eeedc05ae58dc3f7a908ce0e713d`, docs/redesign/phase-10/p10-04-evidence/attachment-ownership-and-storage.trx.gz. Uncompressed SHA256 `b589ad1139cb200d9de64b863d65e3304cea0230eda55d89476e5f79347fe84a`.
Result: selected local controller/storage behavior PASSED. Not an authenticated HTTP attack, complete negative list/upload/missing-owner matrix, MariaDB retest, production probe or final scan. Keep those gaps open. No new vulnerability or production exception is asserted; no backend fix was needed for these reviewed paths. Final integrated scan/testing stays deferred until relevant application changes are complete.
-10
View File
@@ -1,10 +0,0 @@
method,route,source,declared_auth,control_observed,sensitive_asset_or_effect,candidate_test_suite,audit_execution
GET,/api/attachments/{jobId:int},AttachmentsController.cs:87,local scheme,parent owner-filtered existence check before child listing,attachment metadata,AttachmentConsistencyTests,source reviewed; negative list and HTTP NOT RUN
GET,/api/attachments/download/{id:int},AttachmentsController.cs:103,local scheme,parent Include ownership filter and managed path checks,attachment bytes,AttachmentConsistencyTests,PASSED foreign-owner controller rejection; HTTP NOT RUN
PATCH,/api/attachments/{id:int},AttachmentsController.cs:125,local scheme,parent Include ownership filter via shared helper,metadata and AI-use flag,AttachmentConsistencyTests,PASSED foreign-owner controller rejection; HTTP NOT RUN
DELETE,/api/attachments/{id:int},AttachmentsController.cs:170,local scheme,parent Include ownership filter via shared helper,attachment removal,AttachmentConsistencyTests,PASSED foreign-owner controller rejection with row/file retained; HTTP NOT RUN
GET,/api/billing/status,BillingController.cs:42,local scheme,method declares local authentication,entitlement status,BillingControllerTests,NOT RUN
POST,/api/billing/checkout,BillingController.cs:58,local scheme,method declares local authentication; provider mocked only,checkout session,BillingControllerTests,NOT RUN
POST,/api/billing/portal,BillingController.cs:104,local scheme,method declares local authentication; provider mocked only,billing portal,BillingControllerTests,NOT RUN
POST,/api/billing/webhook,BillingController.cs:132,AllowAnonymous,signature verification and size limit; full binding audit pending,subscription entitlement,BillingControllerTests,NOT RUN
PUT,/api/users/{id}/roles,UsersController.cs:142,Admin role at class,privilege transition review pending,account roles,UsersControllerTests,NOT RUN
1 method route source declared_auth control_observed sensitive_asset_or_effect candidate_test_suite audit_execution
2 GET /api/attachments/{jobId:int} AttachmentsController.cs:87 local scheme parent owner-filtered existence check before child listing attachment metadata AttachmentConsistencyTests source reviewed; negative list and HTTP NOT RUN
3 GET /api/attachments/download/{id:int} AttachmentsController.cs:103 local scheme parent Include ownership filter and managed path checks attachment bytes AttachmentConsistencyTests PASSED foreign-owner controller rejection; HTTP NOT RUN
4 PATCH /api/attachments/{id:int} AttachmentsController.cs:125 local scheme parent Include ownership filter via shared helper metadata and AI-use flag AttachmentConsistencyTests PASSED foreign-owner controller rejection; HTTP NOT RUN
5 DELETE /api/attachments/{id:int} AttachmentsController.cs:170 local scheme parent Include ownership filter via shared helper attachment removal AttachmentConsistencyTests PASSED foreign-owner controller rejection with row/file retained; HTTP NOT RUN
6 GET /api/billing/status BillingController.cs:42 local scheme method declares local authentication entitlement status BillingControllerTests NOT RUN
7 POST /api/billing/checkout BillingController.cs:58 local scheme method declares local authentication; provider mocked only checkout session BillingControllerTests NOT RUN
8 POST /api/billing/portal BillingController.cs:104 local scheme method declares local authentication; provider mocked only billing portal BillingControllerTests NOT RUN
9 POST /api/billing/webhook BillingController.cs:132 AllowAnonymous signature verification and size limit; full binding audit pending subscription entitlement BillingControllerTests NOT RUN
10 PUT /api/users/{id}/roles UsersController.cs:142 Admin role at class privilege transition review pending account roles UsersControllerTests NOT RUN
+38
View File
@@ -0,0 +1,38 @@
.App {
text-align: center;
}
.App-logo {
height: 40vmin;
pointer-events: none;
}
@media (prefers-reduced-motion: no-preference) {
.App-logo {
animation: App-logo-spin infinite 20s linear;
}
}
.App-header {
background-color: #282c34;
min-height: 100vh;
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
font-size: calc(10px + 2vmin);
color: white;
}
.App-link {
color: #61dafb;
}
@keyframes App-logo-spin {
from {
transform: rotate(0deg);
}
to {
transform: rotate(360deg);
}
}