diff --git a/docs/redesign/phase-9/COMMANDS.md b/docs/redesign/phase-9/COMMANDS.md new file mode 100644 index 0000000..fb79163 --- /dev/null +++ b/docs/redesign/phase-9/COMMANDS.md @@ -0,0 +1,38 @@ +# Reproducing the local qualification + +Run from the repository root with existing installed dependencies and the pinned SDK. Create artifact directories first. PowerShell wrappers must preserve native exit codes; `$ErrorActionPreference='Stop'` plus redirected native stderr incorrectly treated benign process warnings as terminating errors in early attempts. Original failures remain under `.artifacts/phase9/`; final counts come only from completed zero-retry reports and exit metadata. + +```powershell +$env:DOTNET_ROOT='C:\Users\Connor\.dotnet' +$env:DOTNET_HOST_PATH="$env:DOTNET_ROOT\dotnet.exe" +rtk proxy python docs/redesign/phase-9/p9-00/inventory.py +rtk proxy $env:DOTNET_HOST_PATH test JobTrackerApi.Tests/JobTrackerApi.Tests.csproj --configuration Release --no-restore --logger 'trx;LogFileName=phase9.trx' --results-directory .artifacts/phase9/backend +``` + +Inventory regeneration reflects the current checkout: the entry inventory has58 browser source files; Phase9 adds one ordinary spec, so regeneration has59. Do not overwrite the entry snapshot and mislabel it original evidence. + +From `job-tracker-ui`: + +```powershell +rtk proxy node node_modules/jest/bin/jest.js --runInBand --json --outputFile=../.artifacts/phase9/frontend.json +rtk proxy npm run typecheck +rtk proxy npm run lint +$env:NEXT_PUBLIC_API_BASE_URL='http://localhost:5302/api' +rtk proxy npm run build +$env:PLAYWRIGHT_STATIC_EXPORT='true' +$env:PLAYWRIGHT_PREBUILT_EXPORT='true' +$env:CV_FIDELITY_OUTPUT='E:\Storage\Projects\Active\Job tracker\.artifacts\phase9\fidelity' +$env:CV_SETTINGS_FIDELITY_OUTPUT='E:\Storage\Projects\Active\Job tracker\.artifacts\phase9\settings-fidelity' +$env:PLAYWRIGHT_JSON_OUTPUT_NAME='E:\Storage\Projects\Active\Job tracker\.artifacts\phase9\ordinary-accepted.json' +rtk proxy node node_modules/@playwright/test/cli.js test --retries=0 --reporter=list,json --output=../.artifacts/phase9/ordinary-accepted-results +``` + +Run separate browser configurations sequentially, each with its own JSON/output name: `playwright.cv-ai.config.ts`, `playwright.auth-recovery.config.ts`, `playwright.rate-limits.config.ts`, `playwright.ingress.config.ts`, `playwright.pdf.config.ts`, and `../docs/redesign/phase-5/p5-15/p5-15-01/diagnostics/playwright.config.ts`. Use the same CLI `--config=... --retries=0 --reporter=list,json`. The Phase9 lane uses `../docs/redesign/phase-9/p9-05/diagnostics/playwright.config.ts` (18 cases). Native PDF admission uses inert processes; it is distinct from native rendering fidelity. + +The configs start isolated synthetic local API/storage and a static frontend. Do not point these workflows at production. Successful native reads/writes, scoped intercepted failure responses and withheld model operations must remain distinguishable. + +From `tools/summarizer`, `SKIP_MODEL_LOAD=1`, run `rtk proxy .venv/Scripts/python.exe -m pytest -q tests --junitxml=../../.artifacts/phase9/sidecar.xml`. No inference semantics are qualified by these56 contracts. + +The unchanged `scripts/verify-cv-fidelity.py` takes a corpus directory containing `measurements.json` and native PDF/preview fixtures. It requires the existing Python PDF/Pillow dependencies (bundled workspace runtime used in this run). Invoke it separately for the fidelity corpus and the combined Settings measurements. Never increase its tolerances to clear a failure. + +After accepted reports exist, `rtk proxy python docs/redesign/phase-9/evidence.py` builds portable cases, route/axe/RD21/performance records and hashes raw reports. `rtk proxy python docs/redesign/phase-9/reconcile.py` checks362 ordinary cases,396 route vectors and57 unchanged preservation dispositions before generating final ledgers. Missing or failed data must not be replaced with baseline counts. Source/artifact identities are retained in `p9-00/source-manifest.json`. diff --git a/docs/redesign/phase-9/README.md b/docs/redesign/phase-9/README.md index 8c5e119..4e75ce7 100644 --- a/docs/redesign/phase-9/README.md +++ b/docs/redesign/phase-9/README.md @@ -1,6 +1,6 @@ # Phase 9 — Comprehensive QA and regression qualification -Entry: `1c24e406f194f0f42277d837b3008a7a28dca26a`, clean working tree and direct Phase 8 remote equality verified 22 October 2026. Work branch: `feature/phase9-full-qa`. Main remains `5f835e54a9b74e6b71418422e28431b2af06453f`; it is not the redesign base. +Entry: `1c24e406f194f0f42277d837b3008a7a28dca26a`, clean working tree and direct Phase 8 remote equality verified 22 October 2026. Work branch: `feature/phase9-full-qa`. Main was observed at `5f835e54a9b74e6b71418422e28431b2af06453f` at entry; later HTTP502 prevents a fresh remote claim. It is not the redesign base. ## Execution plan diff --git a/docs/redesign/phase-9/RISKS.md b/docs/redesign/phase-9/RISKS.md new file mode 100644 index 0000000..7c0f1ca --- /dev/null +++ b/docs/redesign/phase-9/RISKS.md @@ -0,0 +1,41 @@ +# Retained risk and release register + +Stable RD IDs come from [Phase 7](../phase-7/DEBT.md); the [Phase 8 acceptance](../phase-8/p8-05/FINAL_ACCEPTANCE.md) is the entry qualification. Severity below describes potential impact if the gate is ignored, not a claim that an untested system is currently broken. None of the production conditions was rechecked live or repaired in Phase 9. + +Phase 9 can complete an assessment while withholding acceptance. Open high data-integrity risks and required human/provider evidence must stay visible in the final decision. Phase 10 receives a bounded handoff, not deletion authority. + +| ID | Current status / reproducibility | Severity / user impact | Owner, next action and evidence required for closure | Gate | +|---|---|---|---|---| +| RD01 / F04 | OPEN; local static/loopback ingress contracts only | High: wrong client identity or exposed ingress | Release operator: actual TLS/IPv6/firewall/topology/trusted peer and deployed auth evidence | Production | +| RD02 | NOT TESTED: independently verified off-disk complete backup/restore | Critical if recovery needed: irreversible loss | Release operator: isolated restore of DB/files/CVs/keys/tombstones, hashes and recovery rehearsal | Production | +| RD03 / F19 | PARTIAL: SQLite and generated MariaDB SQL; MariaDB runtime unavailable | High: schema/provider/startup disagreement | Database owner: actual approved MariaDB migration, restart, CRUD/constraints/concurrency and effective configuration proof | Production; provider acceptance | +| RD04 | NOT TESTED: intended Linux rollback | High: failed release cannot be reversed | Release operator: isolated failure/rollback rehearsal using complete prior images/configuration/recovery set | Production | +| RD05 | OPEN: old runner crashes/deployed identity not superseded | High: healthy endpoint may serve wrong release | Infrastructure owner: native core/operator diagnosis, successful protected CI, exact deployed SHA and authenticated smoke | Production | +| RD06 | PARTIAL: finite axe/DOM/keyboard evidence; human checks open | High accessibility impact | Accessibility tester: [M09-01–06](p9-03/MANUAL_CHECKLIST.md), contextual contrast/reader evidence; triage every applicable incomplete | Acceptance qualification; production | +| RD07 | NOT TESTED: physical input/AT/alternate browsers/forced colors | Medium/High usability exclusion | Product/accessibility owners: actual supported devices/browser/input versions and complete workflows | Acceptance qualification; production | +| RD08 / C11 / P5-13 | DEFERRED; no new model qualification or activation | High: unqualified proposal semantics | Separate AI qualification owner: production-equivalent identity/inference, original 366-call protocol, independent human semantics, review UI/integration evidence | AI activation; production | +| RD09 | Local withheld-operation contract retained; deployed withholding NOT TESTED | High: unreviewed AI write/external request | Release/AI owners: keep 503/no-provider/no-write guards, verify actual deployment independently | Production / AI | +| RD10 | PARTIAL: native local PDF corpus and visual sheets; deployed fonts/photo/print absent | Medium/High document reliability | Document owner: intended Linux/fonts/photo/crop/print and alternate-browser proof, original bytes/geometry | Acceptance qualification; production | +| RD11 | Scoped SQLite bootstrap/WAL mechanism repaired before entry; broad reliability remains PARTIAL | High if preference save fails | Database owner: retain held-reader/write proof, distinguish old reproduced mechanism from unproven provider/contention cases | Reliability qualification | +| RD12 | PARTIAL: notification draft/failure recovery and SQLite tests; complete contention/provider behavior unqualified | Medium: settings may not persist | Database/settings owners: intended-provider overlapping writes and failure/reload recovery with no data loss | Reliability qualification | +| RD13 | Historical Rules 500 mechanism remains UNCONFIRMED | Medium: failed save/draft retention | Rules/API owners: original failure trace plus controlled causal reproduction and successor regression; passing retry alone insufficient | Reliability qualification | +| RD14 | Historical command/dialog focus incident remains UNCONFIRMED; settled drawer proof is a separate finite result | Medium/High keyboard access | Shared UI owner: preserve original observations, reproduce affected modal transitions and actual reader/trap/return behavior | Accessibility qualification | +| RD15 | Historical intermittent CV section expansion cause unproven | Medium: editing disrupted | CV owner: retain failed observation and reproduce causally before closing; do not weaken expansion assertions | Reliability qualification | +| RD16 | Scoped company-error repair retained; wider reader/dialog/date contract PARTIAL | Medium: recovery/access | Company/UI owners: native failed-save → retained draft → successful retry plus human dialogue checks | Preservation qualification | +| RD17 | Board remains O(N); 200/1,000-job and new bounded 250-job observations are finite | Medium: growing rendering cost | Jobs owner: agreed budget, bounded sustained profile and CPU/frame attribution before optimization; preserve full membership | Performance qualification | +| RD18 | NOT TESTED: physical drag/drop/cancel/browser variants | Medium access/workflow risk | Input/device tester: real Board/CV selection and named alternatives, no hidden result cap | Human/device qualification | +| RD19 | DEFERRED: reviewed `followMode` consumer | Medium workflow limitation | Product/mail owner: separate explicit mode→review/action/fallback design; no auto-send or uncertain resend | Deferred scope; not silently completed | +| RD20 | Optional P5-05 quick preview DEFERRED; Phase 8 Dashboard scope was delivered separately | Low optional scope | Product owner: explicit separate brief; retain existing full workspace and all routes | Deferred scope | +| RD21 | OPEN: canonical Career/generic job revision contract and creation-intent idempotency | High: stale editor can overwrite acknowledged edits | Domain/API/UI owners: separate bounded contract issue covering both callers, server compare-and-swap/transaction semantics, conflict recovery and backward compatibility; characterization is not safety acceptance | Data-integrity acceptance; production | +| RD22 / F20 | NOT TESTED: enabled-worker outage recovery/durability | High: duplicate/lost async work | Worker owner: isolated enabled-producer failure/restart/recovery, no-loss/no-duplicate proof before activation | Production / enabled producer | +| RD23 / F21 | OPEN: actual calendar offset/DST/date-only semantics | Medium: wrong event time | Calendar owner: dedicated boundary/DST/provider proof in authorised sandbox before semantic changes | Calendar qualification | +| RD24 | NOT TESTED: billing/deletion/retention/provider cleanup policy and configuration | High privacy/lifecycle impact | Product/security/operator owners: approved policy, explicit destructive-action authority, isolated recovery/cleanup proof | Production / lifecycle activation | +| RD25 | PARTIAL: local SMTP/HTTP/provider contracts; actual OAuth/Turnstile/mail/calendar/model unavailable | High identity/privacy/delivery impact | Approved provider/human tester: sandbox consent/revoke/reconnect/origin/state/delivery/uncertain-attempt proof | Provider acceptance; production | +| RD26 | Legacy Job/Application cutover OPEN | High compatibility/data loss if removed | Migration owner: expand/verify/contract, restore/rollback and all readers/writers/aliases before removal | Phase 10 deletion eligibility; production | +| RD27 | NOT TESTED: actual monitoring/alert/recovery coverage | High operational detection risk | Operations owner: effective sink, alert trigger, responder/runbook and recovery observations | Production | +| RD28 | Ongoing evidence/provenance obligation | High if failures are misrepresented | QA owner: exact source hashes/counts, original failures, no retries/skips/assertion relaxation; separate characterization from safe behavior | Every decision | +| P9-OPS-01 | Previously reported EXT4/Docker storage errors UNRECHECKED | Critical if disk faults persist | Production operator only: independent storage-health/repair and recovery qualification under separate authority | Production | +| P9-SEC-01 | Live advisories NOT REFRESHED; inherited NuGet Pkcs high/moderate and expiring dev exception retained | High dependency risk until assessed | Dependency owner: authorised live advisory refresh, actual locked versions/paths and exception expiry review; offline policy tests do not clear advisories | Production | +| P9-PUB-01 | Feature publication initially blocked by Git server HTTP 502 | Medium review/recoverability risk | Git service owner / QA: successful normal push and direct ref equality for each published checkpoint; never force push | Publication / handoff completeness | + +The pre-existing duplicate initial reminder read is tracked as P9-PERF-01 in [DEFECTS.md](p9-06/DEFECTS.md). No shared loader/query framework was introduced without measured benefit and consumer proof. The new admin vendor-locale repair closes only P9-L01 after its integrated successor; it does not certify every third-party or provider string. diff --git a/docs/redesign/phase-9/evidence.py b/docs/redesign/phase-9/evidence.py new file mode 100644 index 0000000..2111f01 --- /dev/null +++ b/docs/redesign/phase-9/evidence.py @@ -0,0 +1,119 @@ +"""Summarize completed raw QA artifacts; missing lanes stay missing.""" +import hashlib +import base64 +import json +from pathlib import Path +import xml.etree.ElementTree as ET +from datetime import datetime, timezone + +ROOT = Path(__file__).resolve().parents[3] +HERE = Path(__file__).resolve().parent +RAW = ROOT / '.artifacts/phase9' + + +def digest(path): + return hashlib.sha256(path.read_bytes()).hexdigest() + + +def browser_cases(suites): + rows = [] + for suite in suites: + rows.extend(browser_cases(suite.get('suites', []))) + for spec in suite.get('specs', []): + for test in spec.get('tests', []): + rows.append(dict(file=spec.get('file'), title=spec['title'], status=test['status'], + results=[dict(status=r['status'], retry=r.get('retry', 0), durationMs=r.get('duration', 0), + errors=r.get('errors', []), attachments=r.get('attachments', [])) for r in test.get('results', [])])) + return rows + + +def attached_json(attachment): + body = base64.b64decode(attachment['body']) if 'body' in attachment else Path(attachment['path']).read_bytes() + return json.loads(body) + + +def write_json(path, value): + path.parent.mkdir(parents=True, exist_ok=True) + path.write_text(json.dumps(value, ensure_ascii=False, indent=2) + '\n', encoding='utf-8') + + +assert browser_cases([{'specs': [{'title': 'self-check', 'tests': [{'status': 'expected', 'results': [{'status': 'passed'}]}]}]}])[0]['results'][0]['status'] == 'passed' + + +if __name__ == '__main__': + report = dict(observedUtc=datetime.now(timezone.utc).isoformat(), lanes={}, rawFiles={}) + report['documentOracle'] = dict(path='scripts/verify-cv-fidelity.py', sha256=digest(ROOT / 'scripts/verify-cv-fidelity.py'), qualification='Original unchanged oracle; native rendering and admission counts are separate.') + sources = dict(ordinary='ordinary-accepted', ai='ai', auth='auth', rate='rate', ingress='ingress', pdf='pdf', preferences='preferences', phase9='phase9-frozen') + for lane, source in sources.items(): + file = RAW / f'{source}.json' + if not file.exists(): + continue + data = json.loads(file.read_text(encoding='utf-8-sig')) + cases = browser_cases(data['suites']) + report['lanes'][lane] = dict(stats=data['stats'], cases=len(cases), + retries=sum(max(len(c['results']) - 1, 0) for c in cases), + statuses={status: sum(c['status'] == status for c in cases) for status in ['expected', 'unexpected', 'flaky', 'skipped']}, + fileFailures=data.get('errors', [])) + folder = HERE / ('p9-01' if lane == 'ordinary' else 'p9-05' if lane == 'phase9' else 'p9-06') + folder.mkdir(parents=True, exist_ok=True) + if lane == 'phase9': + matrix, axe, screenshots = [], [], [] + for case in cases: + for attachment in case['results'][0]['attachments']: + name = attachment['name'] + if name == 'phase9-route-matrix': + sample = attached_json(attachment) + for row in sample['samples']: + row.pop('bodyText', None) + matrix.append(row) + elif name == 'phase9-settled-axe': + axe.append(attached_json(attachment)) + elif name == 'phase9-rd21-characterization': + write_json(HERE / 'p9-04/rd21.json', attached_json(attachment)) + elif name == 'phase9-sustained-performance': + write_json(HERE / 'p9-05/performance.json', attached_json(attachment)) + if attachment['contentType'] == 'image/png': + path = Path(attachment['path']) + screenshots.append(dict(case=case['title'], name=name, path=str(path.relative_to(ROOT)), sha256=digest(path))) + assert len(matrix) == 396 + write_json(HERE / 'p9-02/route-results.json', matrix) + write_json(HERE / 'p9-02/screenshots.json', screenshots) + write_json(HERE / 'p9-03/settled-axe.json', axe) + if lane == 'ordinary': + for case in cases: + for attachment in case['results'][0]['attachments']: + if attachment['name'].startswith('route-census-') and attachment['contentType'] == 'application/json': + write_json(HERE / 'p9-01' / (attachment['name'] + '.json'), attached_json(attachment)) + for case in cases: + for result in case['results']: + for attachment in result['attachments']: + if 'body' in attachment: + body = base64.b64decode(attachment.pop('body')) + attachment.update(bytes=len(body), sha256=hashlib.sha256(body).hexdigest()) + (folder / f'{lane}-cases.json').write_text(json.dumps(cases, ensure_ascii=False, indent=2) + '\n', encoding='utf-8') + frontend = RAW / 'frontend.json' + if frontend.exists(): + data = json.loads(frontend.read_text(encoding='utf-8-sig')) + report['lanes']['frontend'] = {k: data.get(k) for k in ['success', 'numPassedTestSuites', 'numFailedTestSuites', 'numPassedTests', 'numFailedTests', 'numPendingTests', 'numTodoTests', 'startTime']} + backend = RAW / 'backend/phase9.trx' + if backend.exists(): + doc = ET.parse(backend) + report['lanes']['backend'] = doc.find('.//{*}Counters').attrib + cases = [dict(name=e.get('testName'), outcome=e.get('outcome'), duration=e.get('duration')) for e in doc.findall('.//{*}UnitTestResult')] + (HERE / 'p9-00/backend-cases.json').write_text(json.dumps(cases, indent=2) + '\n', encoding='utf-8') + sidecar = RAW / 'sidecar.xml' + if sidecar.exists(): + report['lanes']['sidecar'] = ET.parse(sidecar).find('.//testsuite').attrib + report['failedOrSupersededAttempts'] = {} + for lane in ['phase9', 'phase9-successor', 'phase9-final', 'phase9-qualified', 'phase9-accepted', 'ordinary', 'ordinary-final', 'landing-red', 'landing-green', 'landing-qualified']: + file = RAW / f'{lane}.json' + if file.exists(): + data = json.loads(file.read_text(encoding='utf-8-sig')) + report['failedOrSupersededAttempts'][lane] = data.get('stats') + for file in sorted(RAW.glob('*-exit.json')): + report['lanes'][file.stem.replace('-exit', '') + 'Process'] = json.loads(file.read_text(encoding='utf-8-sig')) + for file in sorted(RAW.rglob('*')): + if file.is_file() and file.suffix in ['.json', '.xml', '.trx', '.log'] and 'results' not in file.parts: + report['rawFiles'][str(file.relative_to(ROOT))] = dict(bytes=file.stat().st_size, sha256=digest(file)) + (HERE / 'validation.json').write_text(json.dumps(report, indent=2, ensure_ascii=False) + '\n', encoding='utf-8') + print(json.dumps(report['lanes'], indent=2)) diff --git a/docs/redesign/phase-9/p9-00/backend-cases.json b/docs/redesign/phase-9/p9-00/backend-cases.json new file mode 100644 index 0000000..f769a90 --- /dev/null +++ b/docs/redesign/phase-9/p9-00/backend-cases.json @@ -0,0 +1,5422 @@ +[ + { + "name": "JobTrackerApi.Tests.JobCvMatchServiceTests.Curated_tag_matches_synonym_spelling_in_cv", + "outcome": "Passed", + "duration": "00:00:00.0002761" + }, + { + "name": "JobTrackerApi.Tests.AiWorkspaceTests.Another_users_job_is_not_found", + "outcome": "Passed", + "duration": "00:00:00.0025871" + }, + { + "name": "JobTrackerApi.Tests.SavedJobSearchSqliteTests.Saved_search_filters_run_state_alert_toggle_dismiss_and_delete_survive_sqlite_readback", + "outcome": "Passed", + "duration": "00:00:00.2496321" + }, + { + "name": "JobTrackerApi.Tests.CsvExportTests.Text_policy_is_idempotent_and_survives_independent_CSV_parsing(value: \"\u00a0\u200b\ufeff=1+1\", expected: \"'\u00a0\u200b\ufeff=1+1\")", + "outcome": "Passed", + "duration": "00:00:00.0016037" + }, + { + "name": "JobTrackerApi.Tests.CvAiGroundingTests.Only_exact_candidate_quotes_and_supported_claims_are_accepted(quote: \"\", verdict: \"supported\", expected: False)", + "outcome": "Passed", + "duration": "00:00:00.0000696" + }, + { + "name": "JobTrackerApi.Tests.CareerProfileServiceTests.CvDateNormalizer_parses_common_formats_without_guessing(input: \"2019-03\", expected: \"2019-03\")", + "outcome": "Passed", + "duration": "00:00:00.0000083" + }, + { + "name": "JobTrackerApi.Tests.ApplicationAssetsTests.An_ai_draft_only_becomes_a_version_when_the_user_saves_it", + "outcome": "Passed", + "duration": "00:00:00.0070861" + }, + { + "name": "JobTrackerApi.Tests.ForwardedIngressTests.Untrusted_socket_peer_cannot_forge_IP_scheme_or_host(peer: \"198.51.100.20\")", + "outcome": "Passed", + "duration": "00:00:00.0000547" + }, + { + "name": "JobTrackerApi.Tests.ApplicationAssetsTests.Tailoring_never_writes_to_the_career_profile_or_the_variant", + "outcome": "Passed", + "duration": "00:00:00.0445227" + }, + { + "name": "JobTrackerApi.Tests.JobImportServiceTests.Preview_rejects_equivalent_private_literals_before_http_send(url: \"http://[::ffff:127.0.0.1]/\")", + "outcome": "Passed", + "duration": "00:00:00.0390950" + }, + { + "name": "JobTrackerApi.Tests.JobApplicationsEndpointBehaviorTests.Create_normalizes_structured_salary", + "outcome": "Passed", + "duration": "00:00:00.0815715" + }, + { + "name": "JobTrackerApi.Tests.CvAiGroundingTests.Only_exact_candidate_quotes_and_supported_claims_are_accepted(quote: \"Built APIs.\", verdict: \"unsupported\", expected: False)", + "outcome": "Passed", + "duration": "00:00:00.0621365" + }, + { + "name": "JobTrackerApi.Tests.CvAiGroundingTests.Synthetic_semantic_assessments_enforce_the_grounding_contract(fixture: { \"id\": \"nb-to-en\", \"source\": \"Utviklet p\u00e5litelige API-er med C# og SQL.\", \"proposal\": \"Built reliable APIs using C# and SQL.\", \"verdict\": \"supported\", \"expectedSupported\": true })", + "outcome": "Passed", + "duration": "00:00:00.0000410" + }, + { + "name": "JobTrackerApi.Tests.AccountPlansTests.Premium_subscription_status_requires_current_access(status: \"past_due\", expected: False)", + "outcome": "Passed", + "duration": "00:00:00.0000024" + }, + { + "name": "JobTrackerApi.Tests.CvProfileDiffServiceTests.Merge_never_blanks_or_deletes_existing_data", + "outcome": "Passed", + "duration": "00:00:00.0132259" + }, + { + "name": "JobTrackerApi.Tests.ProEntitlementAuthorizationTests.Explicit_ai_action_requires_the_pro_policy(controller: typeof(JobTrackerApi.Controllers.ProfileCvController), action: \"Improve\")", + "outcome": "Passed", + "duration": "00:00:00.0000195" + }, + { + "name": "JobTrackerApi.Tests.MigrationChainTests.Gmail_review_decision_adoption_preserves_legacy_rows", + "outcome": "Passed", + "duration": "00:00:00.6077028" + }, + { + "name": "JobTrackerApi.Tests.ApplicationIntelligenceTests.Match_requires_an_explicitly_linked_cv_before_scoring_anything", + "outcome": "Passed", + "duration": "00:00:00.0023505" + }, + { + "name": "JobTrackerApi.Tests.JobImportHttpTransportTests.Redirect_to_private_destination_is_returned_as_fetch_failure_without_following(status: 301)", + "outcome": "Passed", + "duration": "00:00:00.3209984" + }, + { + "name": "JobTrackerApi.Tests.JobImportHttpTransportTests.Handler_rejects_literal_without_dns_or_dial(url: \"http://0x7f000001/\")", + "outcome": "Passed", + "duration": "00:00:00.0846005" + }, + { + "name": "JobTrackerApi.Tests.ApplicationWorkspaceTests.Overview_counts_documents_and_ai_history", + "outcome": "Passed", + "duration": "00:00:00.1822800" + }, + { + "name": "JobTrackerApi.Tests.CsvExportTests.Text_policy_is_idempotent_and_survives_independent_CSV_parsing(value: \"\", expected: \"\")", + "outcome": "Passed", + "duration": "00:00:00.0021399" + }, + { + "name": "JobTrackerApi.Tests.CvAiReadinessTests.Unavailable_review_service_blocks_generation_and_apply_without_side_effects(apply: True)", + "outcome": "Passed", + "duration": "00:00:00.1495728" + }, + { + "name": "JobTrackerApi.Tests.MicrosoftGraphControllerTests.Disconnect_calls_service_for_authenticated_user", + "outcome": "Passed", + "duration": "00:00:00.0026290" + }, + { + "name": "JobTrackerApi.Tests.JobCvMatchServiceTests.Quality_fixtures_keep_useful_terms_and_suppress_noise(name: \"Short\", title: \"Data developer\", description: \"Python and SQL.\", expected: [\"Python\", \"SQL\"], excluded: [\"and\"])", + "outcome": "Passed", + "duration": "00:00:00.0024558" + }, + { + "name": "JobTrackerApi.Tests.JobQueryParityTests.Table_pages_and_board_have_identical_owned_membership(scenario: \"custom\")", + "outcome": "Passed", + "duration": "00:00:00.2176690" + }, + { + "name": "JobTrackerApi.Tests.JobImportHttpTransportTests.Handler_rejects_denied_dns_addresses_before_any_socket_attempt(address: \"172.16.0.1\")", + "outcome": "Passed", + "duration": "00:00:00.0655195" + }, + { + "name": "JobTrackerApi.Tests.JobLifecycleEventTests.Entering_an_interview_stage_records_interview_scheduled", + "outcome": "Passed", + "duration": "00:00:00.0202231" + }, + { + "name": "JobTrackerApi.Tests.CvAiReadinessTests.Source_change_during_generation_does_not_issue_a_stale_proposal", + "outcome": "Passed", + "duration": "00:00:00.2123429" + }, + { + "name": "JobTrackerApi.Tests.EmailDraftsControllerTests.Direct_ids_and_job_lists_do_not_cross_tenants", + "outcome": "Passed", + "duration": "00:00:00.1200394" + }, + { + "name": "JobTrackerApi.Tests.AiUsageMeterTests.Reservation_is_idempotent_and_success_can_replace_the_conservative_estimate", + "outcome": "Passed", + "duration": "00:00:00.1467034" + }, + { + "name": "JobTrackerApi.Tests.HumanLanguageCatalogTests.Common_languages_resolve_without_relying_on_host_culture_data(language: \"Polish\")", + "outcome": "Passed", + "duration": "00:00:00.0004484" + }, + { + "name": "JobTrackerApi.Tests.ApplicationIntelligenceTests.Analysis_degrades_gracefully_without_an_advert", + "outcome": "Passed", + "duration": "00:00:00.0052027" + }, + { + "name": "JobTrackerApi.Tests.CvAiReadinessTests.Job_requirements_are_context_not_candidate_evidence", + "outcome": "Passed", + "duration": "00:00:00.1772490" + }, + { + "name": "JobTrackerApi.Tests.EmailStatusClassifierTests.Handles_empty_input", + "outcome": "Passed", + "duration": "00:00:00.0000340" + }, + { + "name": "JobTrackerApi.Tests.ProfileCvControllerTests.Parse_falls_back_to_section_parsing_when_ai_json_is_invalid", + "outcome": "Passed", + "duration": "00:00:00.0189791" + }, + { + "name": "JobTrackerApi.Tests.InterviewAiContextTests.Context_is_scoped_to_the_requesting_user", + "outcome": "Passed", + "duration": "00:00:01.6044629" + }, + { + "name": "JobTrackerApi.Tests.MicrosoftGraphProviderTests.GetConnectionAsync_returns_null_when_not_connected", + "outcome": "Passed", + "duration": "00:00:00.0022165" + }, + { + "name": "JobTrackerApi.Tests.JobPipelineTests.OrderOf_sorts_canonical_before_custom", + "outcome": "Passed", + "duration": "00:00:00.0003362" + }, + { + "name": "JobTrackerApi.Tests.SessionsControllerTests.LocalSessionValidator_rejects_a_token_with_no_sid_claim", + "outcome": "Passed", + "duration": "00:00:00.0009263" + }, + { + "name": "JobTrackerApi.Tests.JobQueryParityTests.Table_pages_and_board_have_identical_owned_membership(scenario: \"company\")", + "outcome": "Passed", + "duration": "00:00:00.2686365" + }, + { + "name": "JobTrackerApi.Tests.EmailSendAttemptStoreTests.Direct_attempt_ids_are_tenant_scoped_and_store_no_message_content", + "outcome": "Passed", + "duration": "00:00:00.2802590" + }, + { + "name": "JobTrackerApi.Tests.JobImportHttpTransportTests.Handler_rejects_denied_dns_addresses_before_any_socket_attempt(address: \"64:ff9b:1::a01:203\")", + "outcome": "Passed", + "duration": "00:00:00.0459717" + }, + { + "name": "JobTrackerApi.Tests.CompanyCreateCompatibilityTests.Ascii_case_insensitive_reuse_and_trimmed_input_remain_compatible", + "outcome": "Passed", + "duration": "00:00:00.1855805" + }, + { + "name": "JobTrackerApi.Tests.EmailProviderDeliveryTests.Graph_send_uses_mail_send_scope_and_classifies_rejection_as_known", + "outcome": "Passed", + "duration": "00:00:00.1176092" + }, + { + "name": "JobTrackerApi.Tests.GmailControllerTests.Refresh_linked_threads_reports_empty_and_disconnected_states", + "outcome": "Passed", + "duration": "00:00:00.0126180" + }, + { + "name": "JobTrackerApi.Tests.CsvExportTests.Every_text_column_is_safe_while_typed_numbers_and_dates_keep_their_formats", + "outcome": "Passed", + "duration": "00:00:00.0030273" + }, + { + "name": "JobTrackerApi.Tests.JobPipelineTests.Ghosted_and_waiting_are_still_canonical_stages", + "outcome": "Passed", + "duration": "00:00:00.0000445" + }, + { + "name": "JobTrackerApi.Tests.JobImportServiceTests.Preview_allows_public_hostname_resolution_and_fetches_html", + "outcome": "Passed", + "duration": "00:00:00.0180365" + }, + { + "name": "JobTrackerApi.Tests.JobPipelineTests.Normalize_canonicalizes_prospect_synonyms(input: \"in preparation\", expected: \"Preparing\")", + "outcome": "Passed", + "duration": "00:00:00.0000059" + }, + { + "name": "JobTrackerApi.Tests.CvExtractionCoverageTests.Plain_text_fallback_reads_bounded_utf8", + "outcome": "Passed", + "duration": "00:00:00.0017793" + }, + { + "name": "JobTrackerApi.Tests.ApplicationChecklistTests.Reordering_persists_the_new_order", + "outcome": "Passed", + "duration": "00:00:00.0109925" + }, + { + "name": "JobTrackerApi.Tests.JobApplicationsFollowUpDraftTests.Follow_up_draft_uses_imported_thread_and_saved_package_context", + "outcome": "Passed", + "duration": "00:00:00.0331619" + }, + { + "name": "JobTrackerApi.Tests.JobCvMatchServiceTests.Empty_cv_reports_no_signal", + "outcome": "Passed", + "duration": "00:00:00.0005547" + }, + { + "name": "JobTrackerApi.Tests.JobImportHttpTransportTests.Handler_rejects_literal_without_dns_or_dial(url: \"http://[::1]/\")", + "outcome": "Passed", + "duration": "00:00:00.0562937" + }, + { + "name": "JobTrackerApi.Tests.JobApplicationsApplicationPackageTests.Save_application_drafts_cannot_mutate_another_users_application", + "outcome": "Passed", + "duration": "00:00:00.0029318" + }, + { + "name": "JobTrackerApi.Tests.JobPipelineTests.IsProspect_false_for_post_application_stages(status: \"Ghosted\")", + "outcome": "Passed", + "duration": "00:00:00.0000025" + }, + { + "name": "JobTrackerApi.Tests.CareerProfileServiceTests.SaveVersionAsync_preserves_existing_ids_across_saves", + "outcome": "Passed", + "duration": "00:00:00.0041517" + }, + { + "name": "JobTrackerApi.Tests.SqliteMigrationHelperTests.Export_payload_shape_can_be_serialized", + "outcome": "Passed", + "duration": "00:00:00.0042720" + }, + { + "name": "JobTrackerApi.Tests.ApplicationChecklistTests.Seeding_is_idempotent_across_reads", + "outcome": "Passed", + "duration": "00:00:00.0077922" + }, + { + "name": "JobTrackerApi.Tests.SessionContextMiddlewareTests.Missing_old_and_forged_contexts_never_reach_an_authenticated_mutation(method: \"PUT\")", + "outcome": "Passed", + "duration": "00:00:00.0001067" + }, + { + "name": "JobTrackerApi.Tests.ApplicationChecklistTests.Next_pending_follows_the_category_priority", + "outcome": "Passed", + "duration": "00:00:00.0050602" + }, + { + "name": "JobTrackerApi.Tests.StrategySnapshotOperationTests.Producer_returns_202_and_duplicate_click_reuses_the_operation", + "outcome": "Passed", + "duration": "00:00:00.2427089" + }, + { + "name": "JobTrackerApi.Tests.CareerProfileServiceTests.CvDateNormalizer_parses_common_formats_without_guessing(input: null, expected: null)", + "outcome": "Passed", + "duration": "00:00:00.0000043" + }, + { + "name": "JobTrackerApi.Tests.AttachmentConsistencyTests.Rename_changes_metadata_without_moving_bytes", + "outcome": "Passed", + "duration": "00:00:00.3796417" + }, + { + "name": "JobTrackerApi.Tests.ProfileCvControllerTests.Parse_uses_forced_ai_normalizer_output_when_enabled", + "outcome": "Passed", + "duration": "00:00:00.0479428" + }, + { + "name": "JobTrackerApi.Tests.CareerProfileServiceTests.Versions_are_listed_newest_first_with_the_current_flagged", + "outcome": "Passed", + "duration": "00:00:00.0136774" + }, + { + "name": "JobTrackerApi.Tests.DocumentsControllerTests.MariaDb_composition_keeps_unicode_markers_ordinal_and_paging_parameterized_without_connecting", + "outcome": "Passed", + "duration": "00:00:00.0893273" + }, + { + "name": "JobTrackerApi.Tests.JobApplicationsAuthorizationTests.GetHistory_returns_not_found_for_other_users_job", + "outcome": "Passed", + "duration": "00:00:00.0079097" + }, + { + "name": "JobTrackerApi.Tests.ApplicationChecklistTests.Custom_items_can_be_added_and_deleted", + "outcome": "Passed", + "duration": "00:00:00.0096293" + }, + { + "name": "JobTrackerApi.Tests.OwnershipGuardTests.Attachments_controller_has_owned_attachment_lookup_helper", + "outcome": "Passed", + "duration": "00:00:00.0000805" + }, + { + "name": "JobTrackerApi.Tests.HumanLanguageCatalogTests.Norwegian_aliases_resolve_to_the_canonical_name(alias: \"bokm\u00e5l\")", + "outcome": "Passed", + "duration": "00:00:00.0055651" + }, + { + "name": "JobTrackerApi.Tests.AiOperationQueueTests.Admission_is_pro_only_idempotent_bounded_and_contains_no_raw_payload", + "outcome": "Passed", + "duration": "00:00:00.1820604" + }, + { + "name": "JobTrackerApi.Tests.CorrespondenceControllerTests.Paged_inbox_returns_every_owned_message_without_the_legacy_cap", + "outcome": "Passed", + "duration": "00:00:00.2214034" + }, + { + "name": "JobTrackerApi.Tests.CvProcessingOperationTests.Retryable_provider_failure_keeps_run_queued_and_records_provenance", + "outcome": "Passed", + "duration": "00:00:00.3646445" + }, + { + "name": "JobTrackerApi.Tests.AuthAndSystemControllerTests.VerifyEmail_confirms_account_on_valid_token", + "outcome": "Passed", + "duration": "00:00:00.0031149" + }, + { + "name": "JobTrackerApi.Tests.JobQueryParityTests.Table_pages_and_board_have_identical_owned_membership(scenario: \"needs-work\")", + "outcome": "Passed", + "duration": "00:00:00.2746770" + }, + { + "name": "JobTrackerApi.Tests.JobApplicationsEndpointBehaviorTests.Save_application_drafts_updates_cover_letter_and_notes", + "outcome": "Passed", + "duration": "00:00:00.0407072" + }, + { + "name": "JobTrackerApi.Tests.CvAiReadinessTests.Evaluator_unavailable_fails_closed_and_provider_error_never_changes_content", + "outcome": "Passed", + "duration": "00:00:00.1375803" + }, + { + "name": "JobTrackerApi.Tests.ProductionConfigTests.Summarizer_service_exposes_section_summarization_api", + "outcome": "Passed", + "duration": "00:00:00.0094085" + }, + { + "name": "JobTrackerApi.Tests.UserOperationStoreTests.Running_cancellation_is_acknowledged_or_recovered_after_expiry", + "outcome": "Passed", + "duration": "00:00:00.3975546" + }, + { + "name": "JobTrackerApi.Tests.HumanLanguageCatalogTests.Technical_skills_are_not_treated_as_human_languages(skill: \"Go\")", + "outcome": "Passed", + "duration": "00:00:00.0005246" + }, + { + "name": "JobTrackerApi.Tests.HumanLanguageCatalogTests.Technical_skills_are_not_treated_as_human_languages(skill: \"Java\")", + "outcome": "Passed", + "duration": "00:00:00.0000106" + }, + { + "name": "JobTrackerApi.Tests.ImapProviderTests.GetConnectionAsync_returns_null_when_not_connected", + "outcome": "Passed", + "duration": "00:00:00.0016388" + }, + { + "name": "JobTrackerApi.Tests.ApplicationChecklistTests.Deleting_a_system_item_dismisses_it_instead_of_resurrecting_it", + "outcome": "Passed", + "duration": "00:00:00.0083412" + }, + { + "name": "JobTrackerApi.Tests.CvAiReadinessTests.Authored_save_cannot_forge_server_AI_provenance(source: \" AI:grammar \")", + "outcome": "Passed", + "duration": "00:00:00.2037080" + }, + { + "name": "JobTrackerApi.Tests.DashboardPreferencesTests.Invalid_payload_does_not_save(payload: \"{\\\"version\\\":1,\\\"revision\\\":0,\\\"widgets\\\":[{\\\"id\\\"\"\u00b7\u00b7\u00b7, expected: 400)", + "outcome": "Passed", + "duration": "00:00:01.5013040" + }, + { + "name": "JobTrackerApi.Tests.MicrosoftTokenValidatorTests.Issuer_must_exactly_match_the_signed_tid", + "outcome": "Passed", + "duration": "00:00:00.0011590" + }, + { + "name": "JobTrackerApi.Tests.MigrationChainTests.User_rule_settings_adoption_preserves_legacy_rows", + "outcome": "Passed", + "duration": "00:00:00.5204069" + }, + { + "name": "JobTrackerApi.Tests.AiWorkspaceTests.Generate_stores_an_interaction_and_returns_it", + "outcome": "Passed", + "duration": "00:00:00.0124334" + }, + { + "name": "JobTrackerApi.Tests.CsvExportTests.Long_text_null_typed_cells_and_deleted_row_selection_remain_valid", + "outcome": "Passed", + "duration": "00:00:00.0428494" + }, + { + "name": "JobTrackerApi.Tests.CvBuilderTests.Public_render_bypasses_the_tenant_filter", + "outcome": "Passed", + "duration": "00:00:00.1257758" + }, + { + "name": "JobTrackerApi.Tests.AttachmentConsistencyTests.Cancelled_copy_cleans_staging_and_writes_no_rows", + "outcome": "Passed", + "duration": "00:00:01.8448444" + }, + { + "name": "JobTrackerApi.Tests.JobImportHttpTransportTests.Handler_rejects_denied_dns_addresses_before_any_socket_attempt(address: \"100.127.255.255\")", + "outcome": "Passed", + "duration": "00:00:00.0593412" + }, + { + "name": "JobTrackerApi.Tests.MicrosoftTokenValidatorTests.Tenant_modes_accept_only_their_documented_accounts(mode: \"11111111-1111-1111-1111-111111111111\", tokenTenant: \"11111111-1111-1111-1111-111111111111\", accepted: True)", + "outcome": "Passed", + "duration": "00:00:00.0005199" + }, + { + "name": "JobTrackerApi.Tests.ProfileCvControllerTests.Normalized_markdown_parse_preserves_web_developer_bullets_and_skills", + "outcome": "Passed", + "duration": "00:00:00.0262886" + }, + { + "name": "JobTrackerApi.Tests.JobImportHttpTransportTests.Handler_rejects_denied_dns_addresses_before_any_socket_attempt(address: \"febf::1\")", + "outcome": "Passed", + "duration": "00:00:00.0565640" + }, + { + "name": "JobTrackerApi.Tests.JobApplicationsAuthorizationTests.GetMatchScore_returns_not_found_for_other_users_job", + "outcome": "Passed", + "duration": "00:00:00.0035839" + }, + { + "name": "JobTrackerApi.Tests.TwoFactorControllerTests.Challenge_with_unknown_pending_token_is_rejected", + "outcome": "Passed", + "duration": "00:00:00.0066159" + }, + { + "name": "JobTrackerApi.Tests.SessionContextMiddlewareTests.Missing_old_and_forged_contexts_never_reach_an_authenticated_mutation(method: \"POST\")", + "outcome": "Passed", + "duration": "00:00:00.0002292" + }, + { + "name": "JobTrackerApi.Tests.CompanyCreateCompatibilityTests.An_identical_foreign_name_creates_a_separate_owned_company_and_preserves_source_normalization", + "outcome": "Passed", + "duration": "00:00:00.1596753" + }, + { + "name": "JobTrackerApi.Tests.ApplicationWorkspaceTests.Next_step_asks_for_the_advert_when_there_is_no_description", + "outcome": "Passed", + "duration": "00:00:00.0115374" + }, + { + "name": "JobTrackerApi.Tests.JobImportHttpTransportTests.Http_client_timeout_cancels_resolution_connect_and_headers(phase: \"dns\")", + "outcome": "Passed", + "duration": "00:00:00.3102764" + }, + { + "name": "JobTrackerApi.Tests.ForwardedIngressTests.Trusting_the_entire_internet_fails_configuration(value: \"0.0.0.0/0\")", + "outcome": "Passed", + "duration": "00:00:00.0002821" + }, + { + "name": "JobTrackerApi.Tests.InterviewPrepTests.Follow_up_is_not_reachable_for_another_users_application", + "outcome": "Passed", + "duration": "00:00:00.0854646" + }, + { + "name": "JobTrackerApi.Tests.MigrationChainTests.Job_workspace_note_adoption_preserves_outputs_and_cascade_relationships", + "outcome": "Passed", + "duration": "00:00:02.5728932" + }, + { + "name": "JobTrackerApi.Tests.ExternalOriginTests.Production_requires_one_clean_https_origin(value: null)", + "outcome": "Passed", + "duration": "00:00:00.0001340" + }, + { + "name": "JobTrackerApi.Tests.CvAiReadinessTests.Fabricated_or_mixed_provider_output_cannot_obtain_an_applicable_proposal(invented: \"Built internal web applications and led internatio\"\u00b7\u00b7\u00b7)", + "outcome": "Passed", + "duration": "00:00:00.1985058" + }, + { + "name": "JobTrackerApi.Tests.PdfRenderAdmissionTests.Failing_observability_cannot_strand_an_admission_slot", + "outcome": "Passed", + "duration": "00:00:00.0126147" + }, + { + "name": "JobTrackerApi.Tests.MigrationChainTests.Interview_prep_item_adoption_preserves_user_content_and_practice_state", + "outcome": "Passed", + "duration": "00:00:00.9062113" + }, + { + "name": "JobTrackerApi.Tests.JobImportServiceTests.Preview_rejects_equivalent_private_literals_before_http_send(url: \"http://169.254.169.254/\")", + "outcome": "Passed", + "duration": "00:00:00.0007111" + }, + { + "name": "JobTrackerApi.Tests.CvAiReadinessTests.Edited_proposal_is_re_evaluated_and_unsupported_edit_has_no_mutation", + "outcome": "Passed", + "duration": "00:00:00.1617498" + }, + { + "name": "JobTrackerApi.Tests.UsersControllerTests.Delete_rejects_deleting_the_final_administrator", + "outcome": "Passed", + "duration": "00:00:00.0031539" + }, + { + "name": "JobTrackerApi.Tests.ApplicationAssetsTests.Cover_letter_history_is_scoped_to_its_owner", + "outcome": "Passed", + "duration": "00:00:00.0046212" + }, + { + "name": "JobTrackerApi.Tests.JobImportHttpTransportTests.Handler_rejects_denied_dns_addresses_before_any_socket_attempt(address: \"255.255.255.255\")", + "outcome": "Passed", + "duration": "00:00:00.0043795" + }, + { + "name": "JobTrackerApi.Tests.SummarizerServiceTests.Metadata_path_returns_a_typed_sanitized_provider_failure_while_legacy_path_returns_null", + "outcome": "Passed", + "duration": "00:00:00.0747895" + }, + { + "name": "JobTrackerApi.Tests.JobImportHttpTransportTests.Handler_rejects_denied_dns_addresses_before_any_socket_attempt(address: \"10.1.2.3\")", + "outcome": "Passed", + "duration": "00:00:00.0113714" + }, + { + "name": "JobTrackerApi.Tests.ApplicationWorkspaceTests.Overview_separates_application_answers_from_human_notes", + "outcome": "Passed", + "duration": "00:00:00.0057673" + }, + { + "name": "JobTrackerApi.Tests.JobImportHttpTransportTests.Handler_rejects_denied_dns_addresses_before_any_socket_attempt(address: \"0.1.2.3\")", + "outcome": "Passed", + "duration": "00:00:00.0803189" + }, + { + "name": "JobTrackerApi.Tests.CvAiGroundingTests.Missing_malformed_unknown_or_extra_assessments_fail_closed(assessment: \"{\\\"verdict\\\":\\\"SUPPORTED\\\",\\\"coverageComplete\\\":tr\"\u00b7\u00b7\u00b7)", + "outcome": "Passed", + "duration": "00:00:00.0000247" + }, + { + "name": "JobTrackerApi.Tests.StrategySnapshotOperationTests.Worker_persists_one_result_and_provider_metadata_then_GET_is_read_only", + "outcome": "Passed", + "duration": "00:00:00.8223535" + }, + { + "name": "JobTrackerApi.Tests.CvAiGroundingTests.Synthetic_semantic_assessments_enforce_the_grounding_contract(fixture: { \"id\": \"unsupported-qualification\", \"source\": \"Built reliable APIs.\", \"proposal\": \"Holds a doctorate in computing.\", \"verdict\": \"unsupported\", \"expectedSupported\": false })", + "outcome": "Passed", + "duration": "00:00:00.0000234" + }, + { + "name": "JobTrackerApi.Tests.JobPipelineTests.Normalize_canonicalizes_casing_and_synonyms(input: \"APPLIED\", expected: \"Applied\")", + "outcome": "Passed", + "duration": "00:00:00.0000528" + }, + { + "name": "JobTrackerApi.Tests.CsvExportTests.Text_policy_is_idempotent_and_survives_independent_CSV_parsing(value: \"\\udb40\\udc01=1+1\", expected: \"'\\udb40\\udc01=1+1\")", + "outcome": "Passed", + "duration": "00:00:00.0012416" + }, + { + "name": "JobTrackerApi.Tests.JobCvMatchServiceTests.Section_coverage_reports_where_matches_are_concentrated", + "outcome": "Passed", + "duration": "00:00:00.0018567" + }, + { + "name": "JobTrackerApi.Tests.SessionContextMiddlewareTests.Missing_old_and_forged_contexts_never_reach_an_authenticated_mutation(method: \"PATCH\")", + "outcome": "Passed", + "duration": "00:00:00.0043051" + }, + { + "name": "JobTrackerApi.Tests.CvAiReadinessTests.Fabricated_or_mixed_provider_output_cannot_obtain_an_applicable_proposal(invented: \"Senior engineer at Microsoft.\")", + "outcome": "Passed", + "duration": "00:00:00.1795663" + }, + { + "name": "JobTrackerApi.Tests.ProfileCvControllerTests.Parse_uses_classifier_fallback_when_plain_text_has_no_real_sections", + "outcome": "Passed", + "duration": "00:00:00.0253857" + }, + { + "name": "JobTrackerApi.Tests.PdfRenderAdmissionTests.Invalid_configuration_prevents_host_start(name: \"MaxConcurrentRenders\", value: \"0\")", + "outcome": "Passed", + "duration": "00:00:00.0035924" + }, + { + "name": "JobTrackerApi.Tests.JobApplicationsMariaDraftTests.Save_application_drafts_can_store_recruiter_message", + "outcome": "Passed", + "duration": "00:00:00.0036501" + }, + { + "name": "JobTrackerApi.Tests.GmailControllerTests.Import_thread_reports_imported_and_skipped_counts_for_repeat_calls", + "outcome": "Passed", + "duration": "00:00:00.0434526" + }, + { + "name": "JobTrackerApi.Tests.ApplicationIntelligenceTests.Match_counts_ai_suggestions_without_generating_any", + "outcome": "Passed", + "duration": "00:00:00.0062485" + }, + { + "name": "JobTrackerApi.Tests.CvProfileDiffServiceTests.A_language_level_change_is_an_update_a_new_language_is_an_add", + "outcome": "Passed", + "duration": "00:00:00.0004756" + }, + { + "name": "JobTrackerApi.Tests.PdfRenderAdmissionTests.Shutdown_cancels_active_process_and_rejects_new_work", + "outcome": "Passed", + "duration": "00:00:00.1315548" + }, + { + "name": "JobTrackerApi.Tests.ProEntitlementAuthorizationTests.Explicit_ai_action_requires_the_pro_policy(controller: typeof(JobTrackerApi.Controllers.ProfileCvController), action: \"ExportProfileCvPdf\")", + "outcome": "Passed", + "duration": "00:00:00.0000514" + }, + { + "name": "JobTrackerApi.Tests.CvCorpusHarnessTests.Local_cv_corpus_harness_produces_repeatable_parse_report_when_available", + "outcome": "Passed", + "duration": "00:00:00.0039197" + }, + { + "name": "JobTrackerApi.Tests.JobPipelineTests.Normalize_canonicalizes_casing_and_synonyms(input: \"interviews\", expected: \"Interview\")", + "outcome": "Passed", + "duration": "00:00:00.0000022" + }, + { + "name": "JobTrackerApi.Tests.CvRevisionReadinessTests.Independent_stale_save_or_restore_cannot_replace_the_newer_revision(restore: True)", + "outcome": "Passed", + "duration": "00:00:00.2122754" + }, + { + "name": "JobTrackerApi.Tests.CsvExportTests.Text_policy_is_idempotent_and_survives_independent_CSV_parsing(value: \"normal text\", expected: \"normal text\")", + "outcome": "Passed", + "duration": "00:00:00.0019474" + }, + { + "name": "JobTrackerApi.Tests.JobApplicationsFollowUpDraftTests.Legacy_follow_up_delivery_is_gone_and_has_no_smtp_dependency", + "outcome": "Passed", + "duration": "00:00:00.0539679" + }, + { + "name": "JobTrackerApi.Tests.EmailDraftsControllerTests.Nonfailed_attempts_cannot_rotate_identity_or_change_draft_and_history(status: \"pending\")", + "outcome": "Passed", + "duration": "00:00:00.1518996" + }, + { + "name": "JobTrackerApi.Tests.JobImportHttpTransportTests.Handler_rejects_denied_dns_addresses_before_any_socket_attempt(address: \"::ffff:10.1.2.3\")", + "outcome": "Passed", + "duration": "00:00:00.0469827" + }, + { + "name": "JobTrackerApi.Tests.AuthAndSystemControllerTests.Me_result_includes_configured_build_metadata", + "outcome": "Passed", + "duration": "00:00:00.0046831" + }, + { + "name": "JobTrackerApi.Tests.CvBuilderTests.Multi_entry_sections_flow_between_entries_instead_of_leaving_a_blank_page", + "outcome": "Passed", + "duration": "00:00:00.0011206" + }, + { + "name": "JobTrackerApi.Tests.AccountPlansTests.Premium_subscription_status_requires_current_access(status: \"canceled\", expected: False)", + "outcome": "Passed", + "duration": "00:00:00.0000019" + }, + { + "name": "JobTrackerApi.Tests.CvProfileDiffServiceTests.Merge_preserves_existing_items_and_adds_new_information", + "outcome": "Passed", + "duration": "00:00:00.0076411" + }, + { + "name": "JobTrackerApi.Tests.MicrosoftTokenValidatorTests.Tid_and_oid_are_required_guids(tenantId: \"11111111-1111-1111-1111-111111111111\", objectId: null)", + "outcome": "Passed", + "duration": "00:00:00.0003274" + }, + { + "name": "JobTrackerApi.Tests.JobCvMatchServiceTests.Quality_fixtures_keep_useful_terms_and_suppress_noise(name: \"Norwegian\", title: \"Senior systemutvikler\", description: \"Vi ser etter deg som har erfaring med C# og ASP.NE\"\u00b7\u00b7\u00b7, expected: [\"C#\", \"ASP.NET Core\", \"designe skalerbare distribuerte systemer\"], excluded: [\"med\", \"til\", \"for\", \"som\", \"erfaring\", \u00b7\u00b7\u00b7])", + "outcome": "Passed", + "duration": "00:00:00.0061556" + }, + { + "name": "JobTrackerApi.Tests.AttachmentConsistencyTests.Database_failure_during_delete_restores_quarantined_bytes_and_row", + "outcome": "Passed", + "duration": "00:00:00.3544725" + }, + { + "name": "JobTrackerApi.Tests.NotificationSettingsControllerTests.Get_returns_the_authenticated_users_preference", + "outcome": "Passed", + "duration": "00:00:00.0015393" + }, + { + "name": "JobTrackerApi.Tests.CvBuilderTests.Render_pulls_content_from_the_master_profile", + "outcome": "Passed", + "duration": "00:00:00.3862129" + }, + { + "name": "JobTrackerApi.Tests.GmailControllerTests.Job_candidates_rejects_invalid_job_id", + "outcome": "Passed", + "duration": "00:00:00.0218757" + }, + { + "name": "JobTrackerApi.Tests.AccountPlansTests.Admin_role_receives_pro_capabilities", + "outcome": "Passed", + "duration": "00:00:00.0002346" + }, + { + "name": "JobTrackerApi.Tests.JobImportHttpTransportTests.Handler_rejects_denied_dns_addresses_before_any_socket_attempt(address: \"100.64.0.1\")", + "outcome": "Passed", + "duration": "00:00:00.0142096" + }, + { + "name": "JobTrackerApi.Tests.CvAiGroundingTests.Numeric_unit_changes_fail_even_when_the_reviewer_approves", + "outcome": "Passed", + "duration": "00:00:00.0000958" + }, + { + "name": "JobTrackerApi.Tests.GmailControllerTests.Unlink_thread_cannot_remove_another_users_messages", + "outcome": "Passed", + "duration": "00:00:00.0960701" + }, + { + "name": "JobTrackerApi.Tests.SummarizerServiceTests.Summarize_section_uses_cv_rewrite_endpoint", + "outcome": "Passed", + "duration": "00:00:00.0014732" + }, + { + "name": "JobTrackerApi.Tests.ExternalOriginTests.Production_requires_one_clean_https_origin(value: \"https://jobs.example.test#fragment\")", + "outcome": "Passed", + "duration": "00:00:00.0003626" + }, + { + "name": "JobTrackerApi.Tests.InterviewPrepTests.Setting_a_follow_up_updates_the_existing_field_and_records_an_event", + "outcome": "Passed", + "duration": "00:00:00.0305036" + }, + { + "name": "JobTrackerApi.Tests.JobPipelineTests.Normalize_empty_becomes_default(input: \" \")", + "outcome": "Passed", + "duration": "00:00:00.0000438" + }, + { + "name": "JobTrackerApi.Tests.JobPipelineTests.IsProspect_true_for_pre_application_stages(status: \"Saved\")", + "outcome": "Passed", + "duration": "00:00:00.0000051" + }, + { + "name": "JobTrackerApi.Tests.ProfileCvControllerTests.Normalized_markdown_parse_preserves_real_estate_job_and_language_levels", + "outcome": "Passed", + "duration": "00:00:00.0036791" + }, + { + "name": "JobTrackerApi.Tests.JobImportHttpTransportTests.Production_dial_path_cannot_reach_a_loopback_listener", + "outcome": "Passed", + "duration": "00:00:00.0037692" + }, + { + "name": "JobTrackerApi.Tests.CvAiReadinessTests.Confirmed_stale_apply_reproduction_is_now_an_API_conflict", + "outcome": "Passed", + "duration": "00:00:00.1682749" + }, + { + "name": "JobTrackerApi.Tests.MeteredSummarizerServiceTests.Cv_factual_review_is_admitted_and_finalized_by_the_shared_usage_gate", + "outcome": "Passed", + "duration": "00:00:00.1446332" + }, + { + "name": "JobTrackerApi.Tests.UserOperationStoreTests.Concurrent_duplicate_creation_returns_one_operation", + "outcome": "Passed", + "duration": "00:00:00.2173270" + }, + { + "name": "JobTrackerApi.Tests.MicrosoftTokenValidatorTests.Tenant_modes_accept_only_their_documented_accounts(mode: \"consumers\", tokenTenant: \"11111111-1111-1111-1111-111111111111\", accepted: False)", + "outcome": "Passed", + "duration": "00:00:00.0130253" + }, + { + "name": "JobTrackerApi.Tests.CvBuilderTests.Resolver_respects_explicit_section_order", + "outcome": "Passed", + "duration": "00:00:00.0004332" + }, + { + "name": "JobTrackerApi.Tests.EmailControllerTests.Search_rejects_unknown_or_disconnected_provider", + "outcome": "Passed", + "duration": "00:00:00.0052779" + }, + { + "name": "JobTrackerApi.Tests.JobApplicationsAppliedDateHistoryTests.Re_applying_after_a_backwards_move_stamps_a_fresh_date_and_leaves_history_intact", + "outcome": "Passed", + "duration": "00:00:00.0849371" + }, + { + "name": "JobTrackerApi.Tests.BuildMetadataTests.Unresolved_placeholders_and_blanks_are_rejected(raw: null)", + "outcome": "Passed", + "duration": "00:00:00.0001000" + }, + { + "name": "JobTrackerApi.Tests.CsvExportTests.Text_policy_is_idempotent_and_survives_independent_CSV_parsing(value: \"a\\\"b\", expected: \"a\\\"b\")", + "outcome": "Passed", + "duration": "00:00:00.0015804" + }, + { + "name": "JobTrackerApi.Tests.RulesEngineProspectTests.An_applied_job_past_the_threshold_still_ghosts", + "outcome": "Passed", + "duration": "00:00:00.0001295" + }, + { + "name": "JobTrackerApi.Tests.AttachmentFlagsRecomputeTests.Deleting_the_only_resume_attachment_clears_HasResume", + "outcome": "Passed", + "duration": "00:00:00.0095620" + }, + { + "name": "JobTrackerApi.Tests.ExternalOriginTests.Production_requires_one_clean_https_origin(value: \"https://jobs.example.test?query=1\")", + "outcome": "Passed", + "duration": "00:00:00.0000144" + }, + { + "name": "JobTrackerApi.Tests.ApplicationIntelligenceTests.Match_only_reads_the_requesting_users_profile", + "outcome": "Passed", + "duration": "00:00:00.0044094" + }, + { + "name": "JobTrackerApi.Tests.ApplicationChecklistTests.Another_users_checklist_is_not_reachable", + "outcome": "Passed", + "duration": "00:00:00.0029852" + }, + { + "name": "JobTrackerApi.Tests.JobPipelineTests.Normalize_canonicalizes_casing_and_synonyms(input: \"Interviewing\", expected: \"Interview\")", + "outcome": "Passed", + "duration": "00:00:00.0000049" + }, + { + "name": "JobTrackerApi.Tests.DocumentsControllerTests.Cleared_letter_history_answer_markers_and_structured_tailoring_keep_their_real_sources", + "outcome": "Passed", + "duration": "00:00:01.2657479" + }, + { + "name": "JobTrackerApi.Tests.JobPipelineTests.Normalize_canonicalizes_withdrawn_synonyms(input: \"cancelled\", expected: \"Withdrawn\")", + "outcome": "Passed", + "duration": "00:00:00.0001738" + }, + { + "name": "JobTrackerApi.Tests.DocumentsControllerTests.Search_treats_wildcards_literally_folds_Nordic_metadata_and_never_searches_content", + "outcome": "Passed", + "duration": "00:00:00.5402799" + }, + { + "name": "JobTrackerApi.Tests.SessionsControllerTests.RevokeOthers_revokes_every_other_session_but_leaves_the_current_one_usable", + "outcome": "Passed", + "duration": "00:00:00.0121528" + }, + { + "name": "JobTrackerApi.Tests.JobImportHttpTransportTests.Handler_rejects_denied_dns_addresses_before_any_socket_attempt(address: \"::ffff:127.0.0.1\")", + "outcome": "Passed", + "duration": "00:00:00.0618372" + }, + { + "name": "JobTrackerApi.Tests.GmailControllerTests.Refresh_linked_threads_imports_new_messages_for_known_thread_ids", + "outcome": "Passed", + "duration": "00:00:00.0561347" + }, + { + "name": "JobTrackerApi.Tests.ApplicationWorkspaceTests.Overview_returns_recent_activity_newest_first", + "outcome": "Passed", + "duration": "00:00:00.0090709" + }, + { + "name": "JobTrackerApi.Tests.JobApplicationsApplicationPackageTests.Save_application_drafts_updates_and_clears_answer_without_changing_human_notes", + "outcome": "Passed", + "duration": "00:00:00.0034251" + }, + { + "name": "JobTrackerApi.Tests.OwnershipGuardTests.Summarizer_service_uses_sha256_cache_key_builder", + "outcome": "Passed", + "duration": "00:00:00.0005257" + }, + { + "name": "JobTrackerApi.Tests.CvAiReadinessTests.Whole_document_proposal_cannot_review_multiple_headline_items_then_drop_one_on_apply", + "outcome": "Passed", + "duration": "00:00:00.1742880" + }, + { + "name": "JobTrackerApi.Tests.BillingControllerTests.Webhook_rejects_an_invalid_Stripe_signature", + "outcome": "Passed", + "duration": "00:00:00.0080977" + }, + { + "name": "JobTrackerApi.Tests.JobApplicationsControllerTests.Save_application_drafts_request_supports_the_complete_application_package", + "outcome": "Passed", + "duration": "00:00:00.0004321" + }, + { + "name": "JobTrackerApi.Tests.AuthAndSystemControllerTests.Exchange_legacy_microsoft_link_sends_proof_but_does_not_sign_in", + "outcome": "Passed", + "duration": "00:00:00.0280743" + }, + { + "name": "JobTrackerApi.Tests.AuthAndSystemControllerTests.Unlink_microsoft_refuses_a_passwordless_last_credential", + "outcome": "Passed", + "duration": "00:00:00.0040692" + }, + { + "name": "JobTrackerApi.Tests.CvAiReadinessTests.Unavailable_review_service_blocks_generation_and_apply_without_side_effects(apply: False)", + "outcome": "Passed", + "duration": "00:00:00.2527835" + }, + { + "name": "JobTrackerApi.Tests.DashboardPreferencesTests.All_known_widgets_and_empty_reset_save_roundtrip_in_order", + "outcome": "Passed", + "duration": "00:00:01.0354889" + }, + { + "name": "JobTrackerApi.Tests.JobOpportunitySyncTests.Backfill_links_each_legacy_application_once", + "outcome": "Passed", + "duration": "00:00:01.3850294" + }, + { + "name": "JobTrackerApi.Tests.RulesEngineProspectTests.A_prospect_is_never_followed_up_or_ghosted_however_old(status: \"Interested\")", + "outcome": "Passed", + "duration": "00:00:00.0000066" + }, + { + "name": "JobTrackerApi.Tests.ApplicationWorkspaceTests.Overview_reports_checklist_progress", + "outcome": "Passed", + "duration": "00:00:00.0066324" + }, + { + "name": "JobTrackerApi.Tests.ApplicationWorkspaceTests.Overview_surfaces_the_attached_cv_variant", + "outcome": "Passed", + "duration": "00:00:00.0120464" + }, + { + "name": "JobTrackerApi.Tests.ApplicationAssetsTests.Restoring_a_version_that_does_not_exist_is_a_miss", + "outcome": "Passed", + "duration": "00:00:00.0643211" + }, + { + "name": "JobTrackerApi.Tests.GmailControllerTests.Unlink_thread_removes_messages_and_sets_review_decision", + "outcome": "Passed", + "duration": "00:00:00.0638468" + }, + { + "name": "JobTrackerApi.Tests.SqliteDateTimeOffsetCompatibilityTests.Affected_workspace_queries_order_dates_and_preserve_owner_scope", + "outcome": "Passed", + "duration": "00:00:00.3029966" + }, + { + "name": "JobTrackerApi.Tests.PdfRenderAdmissionTests.Invalid_configuration_prevents_host_start(name: \"MaxConcurrentRenders\", value: \"9\")", + "outcome": "Passed", + "duration": "00:00:00.0379223" + }, + { + "name": "JobTrackerApi.Tests.AuthAndSystemControllerTests.Exchange_microsoft_token_rejects_unmatched_account_when_registration_disabled", + "outcome": "Passed", + "duration": "00:00:00.0060302" + }, + { + "name": "JobTrackerApi.Tests.JobCvMatchServiceTests.Title_keywords_are_weighted_and_missing_ones_rank_first", + "outcome": "Passed", + "duration": "00:00:00.0003975" + }, + { + "name": "JobTrackerApi.Tests.AiPrivacyPolicyTests.External_processing_requires_admin_gate_user_consent_and_pro(adminEnabled: True, userAllowed: True, pro: False, expectedProvider: \"local\")", + "outcome": "Passed", + "duration": "00:00:00.1921157" + }, + { + "name": "JobTrackerApi.Tests.MicrosoftTokenValidatorTests.Tid_and_oid_are_required_guids(tenantId: \"11111111-1111-1111-1111-111111111111\", objectId: \"not-a-guid\")", + "outcome": "Passed", + "duration": "00:00:00.0005754" + }, + { + "name": "JobTrackerApi.Tests.JobPipelineTests.Normalize_canonicalizes_prospect_synonyms(input: \"shortlisted\", expected: \"Interested\")", + "outcome": "Passed", + "duration": "00:00:00.0000025" + }, + { + "name": "JobTrackerApi.Tests.JobImportHttpTransportTests.Handler_rejects_literal_without_dns_or_dial(url: \"http://2130706433/\")", + "outcome": "Passed", + "duration": "00:00:00.0470854" + }, + { + "name": "JobTrackerApi.Tests.ProfileCvControllerTests.Approved_fixture_regression_for_new_resume_docx_keeps_contact_and_role_core_fields_stable", + "outcome": "Passed", + "duration": "00:00:00.0017171" + }, + { + "name": "JobTrackerApi.Tests.ProfileCvControllerTests.Background_processing_rechecks_pro_after_queueing", + "outcome": "Passed", + "duration": "00:00:00.0474573" + }, + { + "name": "JobTrackerApi.Tests.CvAiReadinessTests.Pending_proposal_cannot_overwrite_newer_CV_or_canonical_source(canonical: True)", + "outcome": "Passed", + "duration": "00:00:00.1969042" + }, + { + "name": "JobTrackerApi.Tests.DatabaseBackupRunnerTests.RunOnce_creates_a_restorable_backup_file", + "outcome": "Passed", + "duration": "00:00:00.0525120" + }, + { + "name": "JobTrackerApi.Tests.JobDiscoveryControllerTests.Saved_search_tracks_new_seen_and_dismissed_results_per_owner", + "outcome": "Passed", + "duration": "00:00:01.1610482" + }, + { + "name": "JobTrackerApi.Tests.AccountDataExportTests.Account_export_requires_a_session_created_within_fifteen_minutes", + "outcome": "Passed", + "duration": "00:00:00.7473763" + }, + { + "name": "JobTrackerApi.Tests.BackupControllerTests.Backup_controller_requires_local_authorization", + "outcome": "Passed", + "duration": "00:00:00.0001090" + }, + { + "name": "JobTrackerApi.Tests.ProfileCvControllerTests.Rewrite_section_returns_rewrite_empty_detail_when_ai_health_is_healthy", + "outcome": "Passed", + "duration": "00:00:00.0069748" + }, + { + "name": "JobTrackerApi.Tests.JobCvMatchServiceTests.Quality_fixtures_keep_useful_terms_and_suppress_noise(name: \"Noisy HTML\", title: \"Frontend developer\", description: \"