Compare commits
24 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 7a9de940df | |||
| 773c943165 | |||
| f0c8c6d321 | |||
| e2327c1fa2 | |||
| a88310481f | |||
| e5a979386d | |||
| fba80ef346 | |||
| 194e01ed7f | |||
| 7e410e795d | |||
| 19dad316ab | |||
| 6f801251b0 | |||
| 027907a806 | |||
| c9c6b1abc1 | |||
| 172074e90f | |||
| 98e9502af5 | |||
| dc93b589c9 | |||
| c7d26d354c | |||
| 5e8a07d13e | |||
| 992608c77f | |||
| 0d6de71403 | |||
| bdd1de0dd3 | |||
| d3d3383764 | |||
| 1756273bc1 | |||
| 557efde073 |
@@ -4,6 +4,7 @@ using JobTrackerApi.Models;
|
||||
using JobTrackerApi.Services;
|
||||
using Microsoft.AspNetCore.Mvc;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
using Microsoft.Data.Sqlite;
|
||||
using Moq;
|
||||
using Xunit;
|
||||
|
||||
@@ -11,6 +12,75 @@ namespace JobTrackerApi.Tests;
|
||||
|
||||
public sealed class ApplicationCalendarControllerTests
|
||||
{
|
||||
[Fact]
|
||||
public async Task Agenda_date_window_translates_on_sqlite_and_keeps_legacy_wall_clock_date()
|
||||
{
|
||||
await using var connection = new SqliteConnection("Data Source=:memory:");
|
||||
await connection.OpenAsync();
|
||||
var current = new Mock<ICurrentUserService>(); current.SetupGet(service => service.UserId).Returns("owner-1");
|
||||
await using var db = new JobTrackerContext(new DbContextOptionsBuilder<JobTrackerContext>().UseSqlite(connection).Options, current.Object);
|
||||
await db.Database.EnsureCreatedAsync();
|
||||
var job = await SeedJobAsync(db, "owner-1");
|
||||
job.Status = "Saved"; job.FollowUpAt = null; job.Deadline = new DateTime(2026, 9, 30, 23, 59, 59);
|
||||
await db.SaveChangesAsync(); db.ChangeTracker.Clear();
|
||||
var controller = CreateController(db, "owner-1", new Mock<IGmailOAuthService>(MockBehavior.Strict).Object, new Mock<IMicrosoftGraphOAuthService>(MockBehavior.Strict).Object);
|
||||
var result = await controller.Agenda(new DateOnly(2026, 9, 1), new DateOnly(2026, 9, 30), default);
|
||||
var row = Assert.Single(Assert.IsAssignableFrom<IEnumerable<ApplicationCalendarController.CalendarAgendaItemDto>>(Assert.IsType<OkObjectResult>(result.Result).Value));
|
||||
Assert.Equal("2026-09-30", row.Date);
|
||||
Assert.Equal(new DateTime(2026, 9, 30, 23, 59, 59), row.RecordedAt);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public async Task Agenda_includes_saved_deadlines_and_preserves_recorded_dates_without_provider_access()
|
||||
{
|
||||
await using var db = CreateDb("owner-1");
|
||||
var job = await SeedJobAsync(db, "owner-1");
|
||||
job.Status = "Saved";
|
||||
job.FollowUpAt = new DateTime(2026, 9, 2, 0, 0, 0, DateTimeKind.Unspecified);
|
||||
job.Deadline = new DateTime(2026, 9, 15, 23, 30, 0, DateTimeKind.Unspecified);
|
||||
await db.SaveChangesAsync();
|
||||
var controller = CreateController(db, "owner-1", new Mock<IGmailOAuthService>(MockBehavior.Strict).Object, new Mock<IMicrosoftGraphOAuthService>(MockBehavior.Strict).Object);
|
||||
|
||||
var response = await controller.Agenda(new DateOnly(2026, 9, 1), new DateOnly(2026, 9, 30), default);
|
||||
var rows = Assert.IsAssignableFrom<IEnumerable<ApplicationCalendarController.CalendarAgendaItemDto>>(Assert.IsType<OkObjectResult>(response.Result).Value).ToList();
|
||||
|
||||
Assert.Equal(2, rows.Count);
|
||||
Assert.Equal("follow-up", rows[0].Kind);
|
||||
Assert.Equal("2026-09-02", rows[0].Date);
|
||||
Assert.Equal("deadline", rows[1].Kind);
|
||||
Assert.Equal("2026-09-15", rows[1].Date);
|
||||
Assert.Equal(job.Deadline, rows[1].RecordedAt);
|
||||
Assert.Equal(DateTimeKind.Unspecified, rows[1].RecordedAt.Kind);
|
||||
Assert.All(rows, row => { Assert.Equal(job.Id, row.JobApplicationId); Assert.Equal("Acme", row.CompanyName); });
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public async Task Agenda_excludes_other_owners_deleted_and_out_of_range_dates()
|
||||
{
|
||||
await using var db = CreateDb("owner-1");
|
||||
await SeedJobAsync(db, "owner-2");
|
||||
var deleted = await SeedJobAsync(db, "owner-1"); deleted.IsDeleted = true;
|
||||
var outside = await SeedJobAsync(db, "owner-1"); outside.FollowUpAt = new DateTime(2026, 8, 31); outside.Deadline = new DateTime(2026, 10, 1);
|
||||
var edge = await SeedJobAsync(db, "owner-1"); edge.FollowUpAt = null; edge.Deadline = new DateTime(2026, 9, 30, 23, 59, 59);
|
||||
await db.SaveChangesAsync();
|
||||
var controller = CreateController(db, "owner-1", Mock.Of<IGmailOAuthService>(), Mock.Of<IMicrosoftGraphOAuthService>());
|
||||
var response = await controller.Agenda(new DateOnly(2026, 9, 1), new DateOnly(2026, 9, 30), default);
|
||||
var rows = Assert.IsAssignableFrom<IEnumerable<ApplicationCalendarController.CalendarAgendaItemDto>>(Assert.IsType<OkObjectResult>(response.Result).Value);
|
||||
Assert.Equal(edge.Id, Assert.Single(rows).JobApplicationId);
|
||||
}
|
||||
|
||||
[Theory]
|
||||
[InlineData("2026-09-30", "2026-09-01")]
|
||||
[InlineData("2026-01-01", "2026-12-31")]
|
||||
[InlineData("9999-12-01", "9999-12-31")]
|
||||
public async Task Agenda_rejects_unbounded_or_invalid_ranges(string from, string to)
|
||||
{
|
||||
await using var db = CreateDb("owner-1");
|
||||
var controller = CreateController(db, "owner-1", Mock.Of<IGmailOAuthService>(), Mock.Of<IMicrosoftGraphOAuthService>());
|
||||
var response = await controller.Agenda(DateOnly.Parse(from), DateOnly.Parse(to), default);
|
||||
Assert.IsType<BadRequestObjectResult>(response.Result);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public async Task Status_distinguishes_connection_from_calendar_consent()
|
||||
{
|
||||
|
||||
@@ -28,6 +28,18 @@ public sealed class DashboardPreferencesTests
|
||||
private const string Route = "/api/auth/preferences/dashboard";
|
||||
private const string Layout = "{\"version\":1,\"revision\":0,\"widgets\":[{\"id\":\"cards\",\"visible\":true,\"size\":\"full\"}]}";
|
||||
|
||||
[Fact]
|
||||
public void Agenda_widget_uses_existing_schema_two_without_weakening_unknown_id_or_overlap_checks()
|
||||
{
|
||||
const string json = "{\"version\":2,\"revision\":0,\"widgets\":[{\"id\":\"agenda\",\"visible\":true,\"size\":\"standard\",\"x\":0,\"y\":0,\"w\":8,\"h\":8},{\"id\":\"funnel\",\"visible\":true,\"size\":\"standard\",\"x\":8,\"y\":0,\"w\":4,\"h\":8}]}";
|
||||
using var valid = JsonDocument.Parse(json);
|
||||
Assert.NotNull(DashboardLayout.Parse(valid.RootElement));
|
||||
using var unknown = JsonDocument.Parse(json.Replace("agenda", "unrecognised"));
|
||||
Assert.Null(DashboardLayout.Parse(unknown.RootElement));
|
||||
using var overlap = JsonDocument.Parse(json.Replace("\"x\":8", "\"x\":4"));
|
||||
Assert.Null(DashboardLayout.Parse(overlap.RootElement));
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public async Task Geometry_roundtrip_preserves_hidden_positions_and_blocks_legacy_downgrade()
|
||||
{
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
using System.Security.Cryptography;
|
||||
using System.Text;
|
||||
using System.Globalization;
|
||||
using JobTrackerApi.Data;
|
||||
using JobTrackerApi.Models;
|
||||
using JobTrackerApi.Services;
|
||||
@@ -18,6 +19,34 @@ public sealed class ApplicationCalendarController(
|
||||
IGmailOAuthService google,
|
||||
IMicrosoftGraphOAuthService microsoft) : ControllerBase
|
||||
{
|
||||
[HttpGet("agenda")]
|
||||
public async Task<ActionResult<List<CalendarAgendaItemDto>>> Agenda([FromQuery] DateOnly from, [FromQuery] DateOnly to, CancellationToken cancellationToken)
|
||||
{
|
||||
var owner = RequiredOwner();
|
||||
if (from == default || to < from || to.DayNumber - from.DayNumber > 61 || to == DateOnly.MaxValue)
|
||||
return BadRequest("Choose a calendar range of at most 62 days.");
|
||||
var start = from.ToDateTime(TimeOnly.MinValue);
|
||||
var end = to.AddDays(1).ToDateTime(TimeOnly.MinValue);
|
||||
var jobs = await db.JobApplications.AsNoTracking()
|
||||
.Where(job => job.OwnerUserId == owner && !job.IsDeleted)
|
||||
.Where(job => (job.Deadline >= start && job.Deadline < end) || (job.FollowUpAt >= start && job.FollowUpAt < end))
|
||||
.Select(job => new { job.Id, job.JobTitle, CompanyName = job.Company.OwnerUserId == owner ? job.Company.Name : null, job.Deadline, job.FollowUpAt })
|
||||
.ToListAsync(cancellationToken);
|
||||
var rows = new List<CalendarAgendaItemDto>();
|
||||
foreach (var job in jobs)
|
||||
{
|
||||
Add("deadline", job.Deadline);
|
||||
Add("follow-up", job.FollowUpAt);
|
||||
void Add(string kind, DateTime? recorded)
|
||||
{
|
||||
if (recorded is not { } date || date < start || date >= end) return;
|
||||
// Calendar grouping uses the stored calendar date; legacy timezone/precision is not reconstructed.
|
||||
rows.Add(new(job.Id, job.JobTitle, job.CompanyName, kind, date.ToString("yyyy-MM-dd", CultureInfo.InvariantCulture), date));
|
||||
}
|
||||
}
|
||||
return Ok(rows.OrderBy(row => row.Date).ThenBy(row => row.Kind).ThenBy(row => row.JobApplicationId).ToList());
|
||||
}
|
||||
|
||||
[HttpGet("status")]
|
||||
public async Task<ActionResult<CalendarStatusDto>> Status(CancellationToken cancellationToken)
|
||||
{
|
||||
@@ -141,4 +170,5 @@ public sealed class ApplicationCalendarController(
|
||||
public sealed record CalendarStatusDto(CalendarProviderStatusDto Google, CalendarProviderStatusDto Microsoft);
|
||||
public sealed record CreateCalendarEventRequest(string? Provider, string? Kind);
|
||||
public sealed record CalendarEventDto(string Provider, string? Id, string? WebUrl);
|
||||
public sealed record CalendarAgendaItemDto(int JobApplicationId, string JobTitle, string? CompanyName, string Kind, string Date, DateTime RecordedAt);
|
||||
}
|
||||
|
||||
@@ -15,7 +15,7 @@ public sealed record DashboardLayout(int Version, long Revision, IReadOnlyList<D
|
||||
// Responses cross a JavaScript client; the incremented revision must remain an exact integer there.
|
||||
private const long MaxRevision = 9_007_199_254_740_991L;
|
||||
private static readonly HashSet<string> KnownIds = new(StringComparer.Ordinal)
|
||||
{ "cards", "attention", "funnel", "activity", "stageAge", "sources", "salary", "companies", "skills" };
|
||||
{ "cards", "attention", "agenda", "funnel", "activity", "stageAge", "sources", "salary", "companies", "skills" };
|
||||
|
||||
public static DashboardLayout? Parse(JsonElement root, bool reading = false, long revision = 0)
|
||||
{
|
||||
|
||||
@@ -3,3 +3,7 @@
|
||||
The deployment script and Gitea workflow live in this directory and `.gitea/workflows/`. The current deployment, health/readiness, rollback, and secret-handling guidance is in the repository [infrastructure guide](../docs/infrastructure/README.md), especially [deployment](../docs/infrastructure/deployment.md) and [disaster recovery](../docs/infrastructure/disaster-recovery.md).
|
||||
|
||||
Keep the server `.env` outside the repository. Do not run production deployment, restore, migration, or credential rotation as part of local documentation work.
|
||||
|
||||
MariaDB backup connection parsing uses `scripts/parse-backup-connection.py` (Python 3, already required by deployment preflight). Keys are case-insensitive and support the documented host/user/password/database aliases. Single/double-quoted values may contain semicolons and doubled quote characters. The dump contract requires one TCP host, a database and user, with port 1-65535 (default 3306); an empty password is retained. Duplicate aliases, control characters, host lists/socket paths and database path separators are rejected before dumping. This deliberately bounded parser is not the full MySqlConnector configuration engine. Additional connection options do not change existing dump-client TLS behavior; that qualification remains separate.
|
||||
|
||||
Run `python scripts/test-deploy-backup.py` for the offline synthetic dump-boundary regression. It extracts only the backup function and never executes the deployment entry point, contacts a database or reads the production environment.
|
||||
|
||||
+11
-11
@@ -326,19 +326,19 @@ backup_database() {
|
||||
return 1
|
||||
fi
|
||||
|
||||
# Parse the ADO.NET connection string. Keys are case-insensitive in .NET, so match that.
|
||||
local db_host db_port db_name db_user db_pass
|
||||
db_host="$(sed -n 's/.*[Ss]erver=\([^;]*\).*/\1/p' <<<"$cs")"
|
||||
db_port="$(sed -n 's/.*[Pp]ort=\([^;]*\).*/\1/p' <<<"$cs")"
|
||||
db_name="$(sed -n 's/.*[Dd]atabase=\([^;]*\).*/\1/p' <<<"$cs")"
|
||||
db_user="$(sed -n 's/.*[Uu]ser[ ]*[Ii]*[Dd]*=\([^;]*\).*/\1/p' <<<"$cs")"
|
||||
db_pass="$(sed -n 's/.*[Pp]assword=\([^;]*\).*/\1/p' <<<"$cs")"
|
||||
db_port="${db_port:-3306}"
|
||||
|
||||
if [ -z "$db_host" ] || [ -z "$db_name" ] || [ -z "$db_user" ]; then
|
||||
echo "Could not parse host/database/user from JOBTRACKER_CONNECTION_STRING. Aborting deploy."
|
||||
# Keep secrets off argv; parse aliases/quoted separators without evaluating shell text.
|
||||
local db_host db_port db_name db_user db_pass parsed_connection
|
||||
local -a connection_fields=()
|
||||
if ! parsed_connection="$(printf '%s' "$cs" | python3 scripts/parse-backup-connection.py)"; then
|
||||
echo "Could not parse JOBTRACKER_CONNECTION_STRING for backup. Aborting deploy."
|
||||
return 1
|
||||
fi
|
||||
mapfile -t connection_fields <<< "$parsed_connection"
|
||||
db_host="${connection_fields[0]}"
|
||||
db_port="${connection_fields[1]}"
|
||||
db_name="${connection_fields[2]}"
|
||||
db_user="${connection_fields[3]}"
|
||||
db_pass="${connection_fields[4]}"
|
||||
|
||||
local target="$BACKUP_DIR/jobtracker-${db_name}-${BACKUP_STAMP}.sql.gz"
|
||||
echo "Backing up MariaDB database '${db_name}' on ${db_host}:${db_port} to ${target}"
|
||||
|
||||
@@ -0,0 +1,27 @@
|
||||
# Direct roadmap integration — 2 November 2026
|
||||
|
||||
Published implementation checkpoint `557efde073a380030a39066fab2e6d961ce717f4` was independently read back on origin/codex/direct-roadmap-integration. Follow-up test-only catalogue QA adds three invariants and runs with existing provider/persistence stability tests: 10 passed in three additional suites; see ../i18n/EN_NB_CATALOGUE_QA.md. No runtime application change after the passing build.
|
||||
|
||||
Subsequent bounded localisation fix: supported-language control now names Bokmål explicitly and shows NB, retaining preference values and handlers. Seventeen shell/language tests passed; scoped lint, full typecheck and a new production static build passed after this change. See ../i18n/LANGUAGE_CONTROL_QA.md. This later run overlaps i18n-provider coverage in the 10-test QA run; keep those counts separate. No final UI design was implemented.
|
||||
|
||||
Validated isolated review branch `codex/direct-roadmap-integration`. Base Phase 10 `db818e5ebd19eeedc05ae58dc3f7a908ce0e713d`; selected application paths and docs/i18n from published `4172c23d7ce13e8327a5e51bbb09f296c24fb9b8`; backup parser/deploy function and release-readiness reports from `f19e7ebf4aeae350b43fa84cf115c393030280f0`. Content was integrated by explicit owned paths, preserving the Phase 10 accepted handoff records and approved App.css deletion. No full-branch history overwrite, orchestrator access, main merge, final UI design or deployment.
|
||||
|
||||
## Fresh qualification
|
||||
|
||||
- PASSED: 195 tests in 16 explicitly selected frontend suites, zero failures/pending, native exit 0, 40.06 seconds. Includes session/tenant client boundary, attachment preview, inherited-name fallbacks, pipeline/board, checklist/workspace and document/interview workflows. [Native JSON](integration-evidence/frontend-native.json.gz). This is a new combined execution; do not add preceding branch runs to its total.
|
||||
- PASSED: full TypeScript typecheck, full ESLint with zero warnings, native exits 0.
|
||||
- PASSED: Next 16.4.1 production static build, including TypeScript and all three generated pages, native exit 0. Local API base at build time, no live API/provider/model qualification.
|
||||
- PASSED: five actual backup-function parser tests using synthetic strings and mocked dump/Docker boundaries, native exit 0. Git Bash syntax check of deploy/deploy.sh also exit 0. No deployment script was sourced or run in full; no dump, database, model or production operation.
|
||||
- PASSED: portable register/inventory/source/owner dependency hashes match the integrated working tree; approved stylesheet remains absent. Raw inventory hash initially differed after Git CRLF checkout. Register schema 3 now declares LF-normalised reviewed-text hashes, preserving historical raw source hashes and original census content. This corrected evidence portability; no runtime failure was hidden.
|
||||
- npm ci used the locked offline cache, 825 packages; lockfile unchanged. Existing deprecation and unapproved unrs-resolver install-script notices were retained; no dependency/script approval changes.
|
||||
- Backend/API/test/configuration and automation handoff records have no diff from the integration base. Reuse the 103 selected backend / 92 frontend Phase 10 evidence only within its original scope; those are not extra integration tests.
|
||||
|
||||
## Scope and remaining gates
|
||||
|
||||
This branch makes the approved ordinary fixes reviewable together. The original 188-call dynamic key-domain census is accounted for; full I18N-00, every-string context/backend extraction, European locale registry/release, grammar/native review and all runtime coverage are not accepted. No additional locale or country is published.
|
||||
|
||||
Phase 10 P10-05 remains OPEN: full suite/preservation reconciliation, independent audit and required human/environment qualifications remain. Product Review and Global Jobs entry/provider/data gates remain. Public homepage proposals on feature/launch-site-redesign are design-neutral documentation, not included visual implementation. Five application concepts and comparison remain available in the separate design worktree; no final unapproved design integrated.
|
||||
|
||||
New browser/native-device, final integrated security/plugin scans, hosted CI, real provider, backup/restore/rollback and production tests NOT RUN here. Security source/relational attachment review remains separately scoped. No production qualification is inferred from this branch or static build. Publish only to this review branch and independently verify the ref; no main merge/deployment.
|
||||
|
||||
Next: review this combined checkpoint; continue locale context/literal QA and safe source audit, then execute affected browser and final integrated qualifications when their scope and approvals are satisfied. Do not repeat successful unchanged targeted runs merely to resume the chat.
|
||||
@@ -1,169 +1,5 @@
|
||||
# Direct execution continuation
|
||||
|
||||
NEWEST PUBLISHED/INDEPENDENTLY VERIFIED **ed4ce4cc3a0fffecfa406793a60680e490fa6674**, unchanged runtime **a84a97cb61eda975d73690c818d56666f0929515**, branchcodex/a3-ui-10. Discovery→synthetic preview→review→existing optional attachment steps→tracked application row passed36 journeys/144 rendered states. Exactly36 intercepted preview requests +36 creates; original URL/title/company/source/country/description/source-language/deadline-date checked, no actual provider or backend execution. No unavailable reads, page errors, unexpected writes or axe violations.1,287 source/harness/evidence/export checks matched. Initial push failed remote unpack with unexpected checksum; one ordinary retry succeeded and independent readback confirmeded4. No infrastructure/hooks/config repair. Viewer22 families/792 actual bindings/28 frozen references;44 artifact selections separate from app acceptance.
|
||||
|
||||
Other newly published/verified checkpoints: **505b0c01b953002ef777eca9aea550715b217216** Settings/shared toast (70 selected native cases/eight suites, types/full lint/build,36 configurations/252 rendered states,zero writes/proposals/errors/axe,36 company reads unavailable;1,268 integrity checks). Actual information-toast contrast3.85:1 was traced to ToastProvider outside JobTrackerThemeProvider; existing providers reordered in **a84a97cb61eda975d73690c818d56666f0929515**, retaining timeout/action/dismiss/clearance behavior. QuickCapture decorative surface removed in **266e8bc09d113051442e2eeb0e3c6d6d6b7a92e7**. Failed contrast receipt retained. **b5b9069d1e835197cc37c5e7e293c3a60857ec2f** Evidence Bank (unchanged component/test fromb31,36 journeys/216 states,zero writes/preview/errors/axe,108 companies reads unavailable;1,321 integrity checks), drafts survive tabs/retry, valid draft blocked on read failure, deletion cancelled. Existing meaningful form/record boundaries retained; no unnecessary native/build rerun. All receipts published/readback-verified.
|
||||
|
||||
CURRENT STATE: exporta84 sealed; integration HEADed4 published. New V22 application result singular grammar is the next bounded fix: JobTable.tsx shared table/board count currently renders1 matching jobs /1 jobber samsvarer. UNCOMMITTED tests in jobs-view-integration.test.tsx cover0/1/2 EN/NB/table/board/live locale and unchanged result membership. First RED incorrectly assumed locale never re-fetches; existing JobTable/Kanban resource deps intentionally include t. That test-scope assumption was removed, keeping inactive-view-read protection; corrected RED is running (exec80217), implementation still NOT changed. Preserve existing locale reload/error/loading behavior. Next add paired singular catalogue text, select it at the shared count, update three older expected singular assertions, run focused regression/types/lint/build and focused rendered label checks; do not rerun the whole discovery workflow solely for text. Failed native report retained. No owner input needed. CV create→Profile reuse→edit→preview→export connected fixture journey is next after this fix; source/API/controls inspected but no CV-journey harness change yet. Remaining route/error/connected journeys and all human/native/European/Phase10/independent integrated security/recovery/release/owner gates remain OPEN. Orchestrator/main/production untouched.
|
||||
|
||||
NEWEST PUBLISHED/INDEPENDENTLY VERIFIED **0e2ccfe98406d5d896c74482b0ba08a976c74c4a**, runtime **d651ce7aa41c2e296db20c2a28b2abe093884756**, branchcodex/a3-ui-10. Administration decorative diagnostic/audit/processing/benchmark surfaces corrected.60 native cases/four suites, types/full lint/static export and36 configurations/324 scoped rendered states PASSED. Zero browser exceptions/axe violations/unexpected writes/exports.216 company fixture reads unavailable;144 deliberate system503 reads in unavailable scenario. No probe/settings-save/SMTP/maintenance/undo/restore/user mutations.1,163 integrity checks matched264 runtime sources +one harness +818 evidence +80 raw export files. Viewer17 families/612 image bindings/26 frozen references;34 artifact selections passed separately from app acceptance. See ADMIN_REVIEW.md and ADMIN_SOURCE_MANIFEST.json.
|
||||
|
||||
CURRENT STATE: exportd651 sealed; administration source and QA receipt published by normal push/independent readback. Settings-only extension in verify-a3-ai-settings.mjs remains UNCOMMITTED WIP, explicitly excluded from admin receipt. Its two-config320/1440 EN/light read-only pilot passed12 states with no writes/proposals; all five Settings sections plus focused AI controls. Company fixtures unavailable. Actual screenshots show QuickCaptureCard's remaining decorative PageSection surface; next minimal eligible fix removes that surface only, retaining bookmarklet/manual-copy/control behavior. Then targeted Settings regression, type/lint/build and36-config216-state read-only qualification, with source-bound manifest/publication. Do not rebuild until admin seal verified (done); do not count settings pilot as full regression or final acceptance. No owner input needed for these ordinary IM10 actions. Remaining Career Evidence/error/review states, connected journeys and all human/native/security/recovery/Phase10/release/owner gates remain OPEN. Orchestrator/main/production untouched.
|
||||
|
||||
NEWEST PUBLISHED/INDEPENDENTLY VERIFIED **1427eb218465e8547078b767b4c031bac1a7d580**, runtime **cd116ab8ca33253bbd919d3268f35001f0764f14**, branchcodex/a3-ui-10. Mail singular-count defect V19 fixed in EN/NB;44 tests/two suites (41 inbox including two new live-locale/count cases +three catalogue), types/full lint/build and36 focused display states PASSED,zero writes. No new dynamic calls.813 integrity checks matched:264 runtime sources +1 harness +468 evidence +80 export. Viewer now12 actual families/nine widths,432 image bindings,22 frozen references and24 selections across two artifact views. Do not count those artifact views as app acceptance.
|
||||
|
||||
Preceding mail checkpoint **1881fdb22414fffbd8659d1d855977cd0c7d987d** /runtime **a9208ab4b32373be99c29eabac84d0ebf064b5d7** is published/verified:39 inbox tests,types/full lint/build,36 journeys/144 mail-only states,72 synthetic draft/save/send requests, no unexpected writes/errors/unavailable reads/axe violations. Recorded job/company/single Open action are right on desktop and before prose on narrow screens; no status/appointment inferred or fetched.888 source/harness/evidence/export checks matched. Prior document checks explicitly NOT RUN in mail-only mode, retained atb31/dd284782. No real mailbox/model/provider/security/release qualification. Older37-test/unbuilt-mail entries below are historical, now superseded.
|
||||
|
||||
CURRENT STATE: integration working tree clean apart from expected untrackedgraphify-out; exportcd116ab8 is sealed. All source/QA checkpoints above published by normal pushes and independent readback, no main merge/deploy. Next eligible approved IM10 work: **administration actual visual review**, then remaining Settings/evidence/error/review states and complete discovery/CV-export/follow-up/Profile-reuse journeys. AdminSystemController is `[Authorize(Roles="Admin")]`; existing admin fixtures use Admin. SourceV18 remains only a confirmed source finding, not a completed rendered review. Plan to extend the existing account/admin verifier with isolated admin-only nine-width scope, avoiding already qualified account flows; include real-UI controlled positive system/benchmark/settings data as well as unavailable/empty/permission/processing states. No admin application code changed yet. Do not run models, maintenance/probe/SMTP or actual admin mutations; all API responses intercepted. Continue without owner input for ordinary eligible work; all final roadmap/human/native/security/recovery/release/owner gates remain OPEN.
|
||||
|
||||
NEWEST PUBLISHED/INDEPENDENTLY VERIFIED **dd284782fd5f15106160363df0cbd49ea1700148**, source **b31ce6176bcb8f6a70d3e29ad4057b7cb74a1f53**, branchcodex/a3-ui-10.114 selected native tests/eight suites, types/full lint/export build and final36-config matrices PASSED: Career216 with108 fixture writes/all14 unobscured keyboard targets; documents/mail216 with72 fixture draft/send requests; calendar108 zero writes; marker36 zero writes. Marker partial verifier failed at a wide unnamed/implicit group ambiguity; preserved report and corrected explicit scroll-panel selector, final36 passed. Career unavailable company108/theme-preview36/job-CV36 reads remain unqualified. No page errors/unexpected writes/axe violations in final runs.264 runtime sources +4 harnesses +894 evidence files +80 raw export files matched committed/export bytes (1,242 checks). No new independent agent review (capacity exhausted); no security acceptance inferred.
|
||||
|
||||
First push and remote readback returned HTTP502. A normal bounded retry succeeded without repairs; independent ls-remote confirmeddd284782. Source-bound manifests remain immutable at their receipts. Navigable comparison `docs/ui-modernisation/visual-correction/route-review.html`:11 actual families, nine widths, EN/NB/themes;396 image bindings,22 exact frozen237c79b8 reference PNGs and two artifact-browser views/22 selections passed. It remains partial evidence, not full34-route/57-group or owner acceptance. Known remaining state/journey reviews are explicitly listed in ROUTE_COVERAGE.json.
|
||||
|
||||
NEXT AUTHORISED: the37-test mail successor is still unbuilt/unstaged; current built exportb31ce617. Now thatdd284782 is published, commit the bounded mail source/tests/receipts, extend the existing docs/mail verifier with mail-only scoped output (skip unchanged document journeys), build, run pilot and36-config mail presentation/interaction verification, seal/publish/readback. Do not attributeb31 mail captures to the new flat-mail source. Native failed Paper-selector helper receipts retained; semantic named-article helper now passes37, types/scoped lint pass. Then continue admin visual/positive-state review, remaining Settings/evidence/error states and connected discovery/CV-export/follow-up/Profile-reuse journeys. Full roadmap/security/recovery/release and human/native/owner gates remain OPEN. No orchestrator/main/production changes.
|
||||
|
||||
b31ce617 lane update: Career final36 journeys/216 scans/captures PASSED,108 intercepted fixture writes,all14 keyboard edit targets checked per configuration. Controlled unavailable reads include `/api/companies`, `/api/cv/themes/modern/preview` and `/api/jobapplications/42/cv`; no claim those paths or physical rendering were qualified. Documents/mail final36-config run is active (session11632); calendar108 and marker36 runs still pending. All four pilots passed on b31ce617. Do not rebuild yet. An actual/reference viewer `visual-correction/route-review.html` is being prepared;22 PNG copies match frozen approved237c79b8 bytes, but validate every viewer image binding after all matrices exist before publishing it.
|
||||
|
||||
Independent UNBUILT MAIL WORKING TREE: CorrespondenceInboxPage.tsx opens inbox/message surfaces and moves existing Jump to messages before filters, retaining compose/draft/confirmation boundaries and every handler/guard.37 inbox tests, types/scoped lint PASSED. Two EN/NB order regressions and two obsolete Paper-selector test failures retained; helper now uses the named article role. Keep these source/test/MAIL_* files unstaged until b31's evidence receipt is published, then commit/build/qualify them as a separate successor. Current built mail is still b31. See MAIL_FLAT.md. New V16 Career, V17 mail and V18 admin visual findings are in the continuing discrepancy register; admin remains source-audit/actual-render review pending. No protected decisions requested or waived.
|
||||
|
||||
ACTIVE LOCAL SUCCESSOR **b31ce6176bcb8f6a70d3e29ad4057b7cb74a1f53** oncodex/a3-ui-10, following published/verified79d7bbe0. Career overview/profile/import/navigation/history collection surfaces opened; IDs/state/ref/revision/import boundaries preserved. Documents jump action moved before filters and mobile articles divided. Single-month chart markers fixed with exact-value/shared-scale preservation.114 distinct tests/eight suites (81 Career/activity +33 documents), types/full lint/static export build PASSED. The earlier failed marker assertion used cumulative mock history, corrected to compare before/after calls; TypeScript caught and removed an unsupported test selector flag. All native failure receipts retained. No backend/PDF/provider/live model work.
|
||||
|
||||
Current export is b31ce617. A3_VISUAL_MATRIX=1/A3_PILOT=1 Career pilot is running (exec session21863); inspect result before claiming qualification. Next serial lanes: document/mail pilot, calendar pilot, activity-marker pilot (A3_ACTIVITY_MARKER=1), then36-configuration Career216, docs/mail216, calendar108 and markers36 scans. These counts are PLANNED, not PASSED. Capture helpers now target edited fields/messages in viewports and check all14 Career keyboard targets for obstruction. Before pilots on a7d72673 retained in *-before folders. Do not rebuild until current-source evidence/export manifest is sealed. Do not publish b31ce617 as fully rendered-qualified until actual matrices pass; it is local only. Source/evidence description: CAREER_DOCUMENT_ACTIVITY.md. No new owner decision required; continue eligible work.
|
||||
|
||||
4 November 2026 - NEWEST PUBLISHED AND INDEPENDENTLY VERIFIED: **79d7bbe0a151472c551dfdc73cce628e92207d5a**, branchcodex/a3-ui-10. Immutable runtime **a7d726738b74d13fb805f7bd4f5780bdf19110d0**, preceded by offer fixdf0ef68c.101 distinct frontend tests/eight suites, types/full lint/export build passed. Final36-config dashboard72 states /36 fixture layout saves; discovery108 states /180 fixture saved-search mutations; six actual Chromium timezone contexts for offer calendar-date/timestamp behavior, zero writes. No browser errors/unexpected writes/axe violations. Corrected phone discovery captures use existing Jump to results; retained previous top-only report/sample, not additive pass counts.264 runtime sources +3 harnesses +281 committed evidence +80 export files matched (628 checks); remote readback verified79d7bbe0. Dashboard density remains PARTIAL against A3; preserved saved geometry and all10 widgets. See DASHBOARD_DISCOVERY.md and source manifest.
|
||||
|
||||
ACTIVE UNCOMMITTED SUCCESSOR: a one-month activity chart has move-only paths and no visible marks (V15). New regression reproduced zero markers; minimal two-marker fix retains shared scale and exact-value table.11 dashboard presentation tests pass; a failed full-suite attempt came from inherited previous-test PUT calls, so the new no-write assertion now compares before/after counts; both failure artifacts retained. Types/lint/build/rendered successor still pending. Do not overwrite or claim these edits qualified from a7d72673.
|
||||
|
||||
NEXT ROUTE REVIEW: prepared opt-in nine-width calendar/documents-inbox/career verifier changes, syntax/scoped lint passed; existing historical output directories preserved. Pilots on a7d72673: calendar1/3 zero writes, documents/mail1/6 with two synthetic save/send requests, Career1/6 with three synthetic writes. No full matrices yet and phone captures still need intended-section inspection. Career overview and document filters inspected; further density/surface review eligible. No new owner input required. All final roadmap/visual/security/recovery/release gates remain OPEN; orchestrator/pre-P10/main/production untouched. Older entries below are historical where superseded.
|
||||
|
||||
4 November 2026 - NEWEST PUBLISHED AND INDEPENDENTLY VERIFIED: **09904ecc6889e196139b1a4da448230e3d0e44c8** oncodex/a3-ui-10. Source **fa6bd5d98ea121d4d91dbae214bcd826806377ed** implements public EN/NB local preference controls, current-locale validation/errors/feedback, and prevents locale-driven verification command replay/stale-flow completion.94 tests/eight suites, types/full lint/export build,36 fixture journeys/504 rendered scans/captures passed. Manifest verified264 runtime sources +1 harness +518 committed evidence +80 export files (863 checks).72 synthetic confirmations,36 sign-ins and36 MFA429 challenges only; no actual identity/email/provider activation. Seven new finite-key dynamic translation calls reviewed separately from188 historical reviews. See visual-correction/PUBLIC_LOCALE.md and source manifest. No new owner decision needed; final visual/security/release acceptance remains OPEN.
|
||||
|
||||
ACTIVE LOCAL SOURCE: **a7d72673** (dashboard initial density/discovery divided rows), following **df0ef68c** (offer literal-date formatting).101 distinct tests/eight suites, types/full lint/export build PASSED. Settled export is a7d72673. Fresh offer timezone browser qualification passed six EN/NB journeys/scans across Los Angeles/Oslo/Kiritimati with zero writes. Discovery nine-width matrix is running; dashboard successor matrix still pending. Preserve old sourcefa6bd5d9 dashboard baseline36/72 and discovery pilot in *-before directories; baseline manifest uses immutable prior runtime. Existing saved dashboard geometry/revisions/gaps/collisions unchanged; only five fresh widget default heights reduce8 to4, initial extent54 to42 rows. Source review found no actionable issues but native/rendered scrolling ergonomics remain to inspect. Do not claim these local commits published until actual push/readback; do not count overlapping baseline/pilot as final runs.
|
||||
|
||||
4 November 2026 - NEWEST PUBLISHED AND REMOTELY VERIFIED: **368e90d57206df00204f16ced78d9379706a6878**, branch **codex/a3-ui-10**, active worktree `C:\Users\Connor\.codex\worktrees\direct-roadmap-integration\Job tracker`. Runtime source **b6d830f27951271ac2d1acb8855adc43b77cbec0** simplifies account sections and prioritises the recorded role heading in numeric job-detail routes.97 distinct selected frontend tests (81 account/eight suites and16 layout/four suites), types/full lint/build passed. Final36-configuration matrices:252 account captures/scans and216 application captures/scans;36 account draft/confirmation journeys,36 fixture403 exports,36 synthetic application status changes and36 keyboard-focus checks. Original full-page focused account screenshot composition was misleading; preserved failure report/sample and corrected viewport captures before counting final252. Companies reads108 deliberately unavailable in account fixtures; no live qualification. Manifest verification matched264 immutable runtime sources +2 harnesses +481 committed evidence files +80 raw export files (827 total). Independent git ls-remote confirmed368e90d5. Earlier application-only checkpoint **1c88cacb4d4d6137ba82e74e53fa27faadb86c1e** also published/verified.
|
||||
|
||||
ACTIVE UNCOMMITTED SUCCESSOR: public-auth EN/NB selector uses local preference only, preserving authenticated account saves; translated field/fallback errors and pending feedback update with language; verification locale changes no longer replay POSTs and stale prior-flow completions are ignored.94 selected tests/eight suites, types/full lint/export build PASSED. Independent read-only source review found no actionable findings. Rendered pilot currently blocked by a verifier locator ambiguity between application alert and Next route announcer; scope alert assertions to the public main, retain failed pilot, rerun pilot then36 configurations /14 states (504 scans) on settled export. No live identity/email/MFA/provider operation. New typed dynamic translation call sites need finite-key provenance review;188 historical reviews remain accounted for, not blanket future coverage.
|
||||
|
||||
Continue authorised IM10 visual correction across remaining34-route inventory and57 preservation groups, then representative connected workflows. Do not ask for final owner acceptance yet. Offer literal-date timezone defect V11 remains eligible; finalPhase10/GlobalJobs/European/native/device/homepage claims/integrated security/recovery/release remain OPEN. No orchestrator/pre-P10 edits, main merge or deployment. Older checkpoint entries below are historical and superseded where inconsistent.
|
||||
|
||||
4 November 2026 - NEWEST PUBLISHED CHECKPOINT: **af2df360624d5c48ae03d80e7281704372d860ee** on **codex/a3-ui-10**, independently git-ls-remote verified. Implementation source checkpoint **69621788ee53d842c82cab307be129ba8806ca26** removes duplicate Offer Comparison heading and outer Operations section surfaces.61 selected tests/five suites, types/lint/build/census passed; independent source review found no actionable findings. Fresh36-configuration six-secondary-route matrix:216 scans/captures,36 journeys,zero mutations/errors/violations. Separate applications matrix:36 journeys/144 scans,36 intercepted status PATCHes and3 exact legacy query/retained-hash checks.264 immutable runtime source hashes +2 harness hashes +368 committed evidence hashes matched;80 export files matched before the next build. These results cover scoped fixtures, not all34 routes or final visual acceptance. See visual-correction/SECONDARY_REVIEW.md, SECONDARY_SOURCE_MANIFEST.json and ROUTE_COVERAGE.json in integration worktree.
|
||||
|
||||
ACTIVE UNCOMMITTED SUCCESSOR: JobTable.tsx mobile flat rows/direct44px named actions and ApplicationWorkspacePage.tsx open header/sections/expanded details, plus EN/NB mobile interaction regression and extended verify-a3-applications.mjs.65 selected cases/six suites passed; type/lint/build passed before a final phone overflow correction. A focused-row browser pilot reproduced clipped keyboard outline after removing nested padding; collection overflow is now visible only on phones. Preserve failed pilot/native-transition artifacts. **Do not claim this successor qualified from older144 or180-state evidence.** APPLICATION_FLAT.md gives exact continuation. Existing36-config/five-state browser run was still finishing; wait/inspect its result, retain predecessor report, build the overflow correction, run pilot then new36-config/six-state216 capture matrix with A3_VISUAL_MATRIX=1 and A3_FLAT_WORKSPACE=1. Rebuilds/browser runs must bind the correct export. Current active worktree is direct-roadmap-integration; branchcodex/a3-ui-10. No new owner decision is needed for these corrections.
|
||||
|
||||
All34 route records retained; V10 account continuous surfaces and V12 application density/header remain open, V11 literal-date-only western-timezone formatting defect reproduced for fixture strings (do not guess actual API timestamp precision). Remaining routes/states, native/device/native-language/final owner visual review, wholePhase10/GlobalJobs/European/public launch/integrated security/recovery/release remain OPEN. Orchestrator/pre-P10 untouched; no main/deploy. Earlier2218659e shell/CV/Settings/refresh publication remains valid within its scoped evidence.
|
||||
|
||||
4 November 2026 - NEWEST DEVELOPMENT CHECKPOINT: **2218659ecf692e8e377dd33a9ce6415b01e43032**, active **codex/a3-ui-10**, published and independently verified with git ls-remote.266 source/194 evidence hashes match committed bytes;80 export files separately match the manifest. Shared compact shell/open CV studio/flat continuous Settings sections and same-owner mounted AI availability refresh are implemented. Final combined147 frontend tests/13 suites passed, plus types/full lint/export build and57-group/34-route source census. CV matrix:36 configurations across320/360/390/430/768/1024/1280/1440/1920, EN/NB and themes,108 accessibility scans/captures with zero document writes. Refresh:16 fixture journeys/64 captures,64 intercepted preference writes, draft/node retained, malformed grants rejected and changed identity resets private session. No live models/providers, real entitlement or production qualification. Independent source review found no actionable findings; failed predecessor notice/tablet reports retained.
|
||||
|
||||
Owner's global visual correction and whole-application definition of done extend authorised IM10. Keep original A1/D1/B1/editor-left-preview-right/context-right/sidebar-hybrid decisions. Every34 route/57 preservation group must be reviewed; old functional approval is not visual parity. Do not request final IM10 acceptance yet. Active records in integration worktree: **docs/ui-modernisation/visual-correction/VALIDATION.md**, **ROUTE_COVERAGE.json**, **DISCREPANCIES.md**, **comparison.html**, source/evidence manifest and unedited before/approved/after captures. Approved reference PNGs390/1440 match frozen237c79b8 committed bytes. Remaining route reviews, repeated headings/nested surfaces, complete Settings states, connected workflows, human/device/native-language/final owner visual review are OPEN. Mounted refresh presentation gap is closed in bounded controlled scope; granular Ghosted per-user pause still lacks its persisted contract.
|
||||
|
||||
Next independently authorised work: **six secondary routes** (companies/offers/operations/analytics/trash/public CV) under new36-configuration visual qualification. `job-tracker-ui/scripts/verify-a3-secondary.mjs` has an UNCOMMITTED opt-in A3_VISUAL_MATRIX flag writing to visual-correction/evidence/secondary, preserving old historical artifacts. Its full36-configuration run was started after2218659e; inspect its actual report/process result before claiming pass. Then inspect screenshots, fix material discrepancies minimally, verify and publish the next bounded checkpoint; continue remaining routes and connected workflows. Current export belongs to2218659e runtime sources. No later A3 approval is needed for ordinary visual correction in authorised IM10. Full Phase10/Product Review/Global Jobs/European localisation/launch/final integrated security/recovery/release gates remain separate. Orchestrator and pre-P10 worktrees untouched, no main merge/deploy.
|
||||
|
||||
Earlier NEWEST sections below are historical and superseded where stated. In particular7aa54bff secondary evidence already passed85 tests and96 scoped captures; do not repeat it merely to resume. New visual source changes require their affected qualification.
|
||||
|
||||
3 November 2026 - NEWEST DEVELOPMENT CHECKPOINT: **ccf8d26426235a7a54903162e539d9d613058465** on active **codex/a3-ui-10** is published and independently remotely verified.17 source/23 evidence hashes match committed bytes;80 export assets separately hashed. Approved scope remains **"Approve IM09 and A3-IM10"**; no further implementation permission needed for this increment. Narrow attachment-size delta1ce93ca0 was reconciled/cherry-picked as31ce70271663a5d57c7b2eb8f80cd69be5cc95ef. Fresh63 affected cases plus61 studio cases=124 distinct cases/three suites passed. Review caption now uses the existing EN/NB label; UI-language change retains proposal/output language without regeneration/apply.16 controlled review journeys/axe scans passed with zero writes/synthetic proposals. Types/lint/build and independent review passed; existing direct-focus act warnings remain.
|
||||
|
||||
Source census passed: all34 inherited route patterns present in the TypeScript AST; complete57-group preservation register hash unchanged from d3d33837, preserving56 PARTIAL/one DEFERRED and required closures. Source membership is not route runtime/auth or whole-capability acceptance. Evidence: docs/ui-modernisation/CROSS_APP_LOCALISATION.md, UI-10.md and evidence/cross-app in direct-roadmap-integration. Original imported61-case localisation artifacts remain historical; do not rerun their old manifests against a newer application tree as if they bind it.
|
||||
|
||||
IM10 remains OPEN. Next authorised work is secondary-route connected/responsive/accessibility qualification and the group-by-group evidence reconciliation, followed by combined affected regression and a consolidated A3 acceptance proposal. Seven secondary suites (companies/offers/operations/analytics/public auth/public CV/legacy relink) were started after ccf8d264; record their actual result before making claims. No IM10 acceptance question has been issued. Mounted AI entitlement refresh and granular Ghosted pause remain OPEN. Full Phase10/Global Jobs/European/public launch/final integrated security/recovery/release/native/provider qualifications remain separate. No orchestrator/pre-P10/main/production changes.
|
||||
|
||||
3 November 2026 - NEWEST: owner explicitly answered **"Approve IM09 and A3-IM10"**. IM09 Gate F ACCEPTED; do not repeat. Implementation **773c943165669bfc97bee46c53f73f124f398c0c** on codex/a3-ui-09 is published and independently remotely verified.45 source/143 evidence hashes match committed bytes;80 export assets separately hashed.143 distinct frontend cases/11 suites and69 local backend cases passed, plus types/lint/build. Final distinct browser coverage128 states across16 configurations:112 retained plus16 processing successors. Initial labels/column and reproduced precommit focus-race defects were fixed;19 processing cases replace18 earlier ones in the142-case full run. Do not add overlapping attempts/pilots. All API responses are synthetic, confirmations cancelled, exports fixture403; no real account/provider/model/production operation.
|
||||
|
||||
Acceptance receipt **7a9de940dfdc41023f87a1ef38a5fd86a0b8e477** records the explicit decision. Active integration worktree now isolates **codex/a3-ui-10** from that receipt. Next authorised scope: cross-application consistency, all preserved secondary routes, responsive/localisation/accessibility and combined affected regression. Reconcile the narrow published attachment-size delta1ce93ca0 against this newer baseline; keep all existing owners/contracts. IM08 granular Ghosted pause and mounted AI entitlement-refresh gaps remain OPEN. Final human/native-language, real provider/model, integrated security/recovery/hosted CI and release gates remain separate. No orchestrator/pre-P10/main/deploy changes.
|
||||
|
||||
IM09 evidence: docs/ui-modernisation/ACCOUNT_ADMIN_VALIDATION.md and ACCOUNT_ADMIN_PUBLICATION.md in direct-roadmap-integration. Older NEWEST/CURRENT sections below are historical and superseded by this record.
|
||||
|
||||
3 November 2026 - NEWEST: owner explicitly answered **"Approve IM08 and A3-IM09"**. IM08 Gate F ACCEPTED; do not repeat. Implementation **e2327c1fa2ceaf785d4058c802bafe0d3428c235**, branch codex/a3-ui-08, is published and independently remotely verified.35 source/108 evidence hashes match committed bytes;80 export assets separately hashed.131 distinct frontend cases/eight suites,68 local backend cases,types/full lint/build passed.16 controlled journeys/96 scoped accessibility scans/captures passed across EN/NB,light/dark,320/390/768/1440. Pilots/review/capture refreshes overlap. API/model/preview responses are fixtures: no live inference, semantic quality, provider, physical PDF or backend end-to-end claim. Earlier bounded context fix a88310481fbfa7701478043e8bf192ee45c7c28e is also published/verified. Acceptance receipt f0c8c6d321a70b4d477e99c7b9557246b6361cdf records the owner decision.
|
||||
|
||||
Next authorised increment: **A3-IM09** account/security/session/connections/data and administration/processing presentation. Preserve authentication/recovery/RBAC/owner boundaries, last-admin/self restrictions, task-state permissions, safe diagnostics and export/delete confirmations. No actual deletion for visual verification. Record the actual isolated branch/base before editing; retain Gate F before IM10. IM08 evidence:docs/ui-modernisation/AI_SETTINGS_VALIDATION.md and AI_SETTINGS_PUBLICATION.md in direct-roadmap-integration.
|
||||
|
||||
IM08 OPEN gaps: six numeric thresholds cannot pause per-user automatic Ghosted processing; saved AI preferences require full page reload to rehydrate mounted entitlement presentation. Backend enforcement remains authoritative. Milestone acceptance does not close these gaps. Automation uses the existing persisted email switch and links to AI/privacy, thresholds and per-search alerts; no workers/models/providers were activated.
|
||||
|
||||
Independent localisation **1ce93ca0e3a906673e636e56f1b910756ca78bb2**, codex/i18n-attachment-sizes in i18n-00-audit, is published and independently remotely verified. Attachment KB/MB labels now use EN/NB numeric separators, retaining existing units/precision and frozen data/downloads.61 full affected tests/two suites,types/scoped lint/build/static review passed;seven committed source/evidence hashes match. Keep the delta isolated until reconciled against the newer A3 baseline. All188 historical dynamic-call reviews remain accounted for; full European localisation remains OPEN.
|
||||
|
||||
The chronological CURRENT statements below are superseded by this newest checkpoint. Full Phase10/Product Review/Global Jobs, native/provider, final integrated security/recovery/hosted CI and release acceptance remain open. Root SECURITY policy de3d5031 remains isolated; calendar interview scheduling and original precision/timezone metadata remain explicit data gaps. Orchestrator/pre-P10/main/production untouched.
|
||||
|
||||
3 November 2026 — CURRENT: owner explicitly answered **"Approve calendar/documents/mail and A3-IM08"**. UI07 Gate F ACCEPTED; do not repeat. Implementation **fba80ef346bc021e675024638dacf9ccef7243db** on codex/a3-ui-07 is published and independently remotely verified;28 source/169 evidence manifest entries match committed bytes,80 export assets separately hashed.108 distinct frontend cases/8 suites,52 backend cases,types/lint/build passed.48 final calendar plus96 document/mail axe scans:144 distinct captures across32 controlled journey executions. Calendar displays recorded closing dates including Saved applications; no guessed interview times.32 draft/save/send responses were intercepted fixtures, not real deliveries. Source-review reruns70+7 overlap108. Full Phase10/security/release/native/provider acceptance remains open.
|
||||
|
||||
Active integration worktree is now **codex/a3-ui-08**, from fba80ef3. Acceptance receipt **e5a979386d6377138e7ea7fd44958adb22838886** is published and independently remotely verified. Approved scope:contextual AI presentation and Settings automation, manual fallback, explicit consent/review/apply, stale inputs, usage/limits, error/retry/cancel and per-rule control explanations. No live model activation. Current source inspection:SettingsView,RulesSettingsCard,AiPrivacySettingsCard,AiUsageCard,AiSectionAssistant. Ordinary application automation controls are in scope; autonomous backlog orchestrator remains paused and untouched. No UI08 implementation changes yet.
|
||||
|
||||
IM07 evidence:docs/ui-modernisation/WORKSPACE_VALIDATION.md and WORKSPACE_PUBLICATION.md. Existing interview scheduling and original date precision/timezone data are explicit gaps; milestone acceptance does not invent them or waive data qualification. Independent ca519cac date fix was narrowly integrated into UI07 with matching blobs; separate localisation branch retained. de3d5031 root SECURITY policy is still isolated. All188 historical dynamic-call reviews accounted for; European localisation remains incomplete. Fixed-decimal attachment size display remains an eligible bounded localisation candidate.
|
||||
|
||||
Next required milestone gate is UI08 review before IM09 account/admin/session/connections views. Phase10 final acceptance, Product Review/Global Jobs provider/data dependencies, European native-language/market decisions, public homepage visual/claims approval, staging/paid/final security, hosted recovery/CI and production release gates remain OPEN. No orchestrator/pre-P10/main/deploy changes.
|
||||
|
||||
Earlier chronological records below are historical; later explicit approvals supersede their pending statements.
|
||||
|
||||
**Newest owner decision: "Approve discovery and A3-IM06".** Discovery Gate F c9c6b1abc1f87a907d1e37062cfa5e2ed3fd933c is ACCEPTED. UI05 implementation is published/remotely verified with zero committed-manifest mismatches.32 frontend/3 suites,14 mocked-provider/local backend cases, types/lint/build passed;16 controlled search/save/pause/run/dismiss/confirmed-delete journeys,48 axe scans/captures, zero violations/unexpected writes/page errors.80 fixture-intercepted mutations, no live backend/provider calls. Independent reviewer23 overlaps32. Global Jobs remains distinct and unaccepted.
|
||||
|
||||
Next authorised A3-IM06: Career Profile overview and CV/library/editor/templates/import-review/cover-letter presentation, editor left/preview right; preserve canonical owner, null-as-inherit, undo/save queues/conflicts/history/frozen packages/RD21. No CV-import engine overhaul. Do not repeat prior UI01–05 milestone approval questions. Record actual isolated UI06 branch/base before editing. Pending full Phase10/security/release/native/provider qualifications remain unchanged. A bounded source check also found fixed-decimal attachment-size formatting still present in ApplicationAssets/Attachments; retain this as an open EN/NB localisation candidate rather than claiming every visible number is qualified.
|
||||
|
||||
**Newest owner decisions:** **"Approve applications and A3-IM05"** and **"Approve policy creation and publication"** received3 November2026. Application-tracking Gate F98e9502a is ACCEPTED. Integration worktree now isolates codex/a3-ui-05 from published/verified UI04 receipt172074e90f3c7067b1cbc7e65724b303c2fc9ff6. UI05 changes existing discovery presentation/saved-search UX only; no new provider/geography implementation.32 selected frontend and14 mocked-provider/InMemory/SQLite backend tests pass; browser qualification still in progress. UI-05.md is the active ledger. UI04/Nav/dashboard refs remain unchanged.
|
||||
|
||||
Root security policy `de3d5031c8208bc3841a528ae100ec2984d68501` on codex/security-offline-preflight is published/independently remotely verified. Exact approved41-line policy matches candidate; real resolver now includes root for API/UI and root+nearer CV-doc policy. See docs/security/ROOT_POLICY_APPROVAL.md there. Policy skill workflow completed; no baseline/deep/final scan, charge or staging access is approved/performed. Current integration target/capability/cost preflight and final integrated security remain open. Security policy is not silently merged into A3. No root-policy approval question should be repeated.
|
||||
|
||||
**Latest implemented/published increment:** `98e9502af5039429fb6da45353e719a27e8aa22d`, codex/a3-ui-04, independently remotely verified; committed source/evidence manifest has zero mismatches. B1 quiet table/board surfaces and persistent right application context implemented; narrow/compact layouts put context after task with jump/return focus. Existing table/board/action/revision owners retained. Fixed reproduced null-nextStep false readiness claim in EN/NB. Final126 selected frontend tests/10 disjoint suites and88 targeted InMemory/SQLite backend tests passed; typecheck/full lint/build passed.16 controlled React search/board/precise-status/detail/context/return journeys,48 whole-page axe scans/captures, zero violations/unexpected writes/page exceptions.16 status PATCHes were intercepted fixture responses, not backend writes. Independent reviewer52 cases overlap126. No native/MariaDB/live provider/model/security/release qualification.
|
||||
|
||||
Application-tracking Gate F → A3-IM05 is pending in this chat. Do not start dependent discovery presentation until answered; new international provider implementations retain separate GJ prerequisites/rights. Existing dashboard/nav approvals remain accepted. Review `docs/ui-modernisation/APPLICATIONS_VALIDATION.md` and APPLICATIONS_PUBLICATION.md in integration worktree. UI04 source remains distinct from independent ca519cac document-date patch. Phase10 final acceptance and wider roadmap stay open; these targeted UI counts do not qualify them.
|
||||
|
||||
**Newest decision:** owner answered **"Approve dashboard/onboarding and A3-IM04"** on3 November2026. Dashboard Gate F is ACCEPTED; no repeat approval question. Integration worktree now isolates `codex/a3-ui-04` from UI03 receipt `dc93b589c995f4edcc48f658ddde571356d6dd86` (published and independently verified). UI03 remains on its own ref. Next work is B1 applications table/Kanban/full detail with context right; see UI-04.md task ledger. Original integration ref remains d3d33837. No main merge/deployment.
|
||||
|
||||
Independent localisation `ca519cacbec6ee8e385927ad31356dacc18b2f2d` on codex/i18n-document-dates is published/remotely verified; committed manifest matches. Reproduced/fixed invalid uploaded wall-clock date rollovers, overflow and trailing junk;40 frontend tests/3 suites, typecheck, scoped lint/build pass. Four historical direct catalogue accesses contextually reviewed; full current literal/backend inventory still open. Not combined with A3 yet; preserve branch separation and integrate only its small accepted patch with combined regression when needed.
|
||||
|
||||
**UI03 published:** `c7d26d354c44b0bdd2976cf2f1c2b0737d7cc2d2` on `codex/a3-ui-03`, push succeeded and independent remote readback matched. Committed manifest: zero mismatches. Dashboard/onboarding Gate F question is pending in this chat before A3-IM04; independent localisation remains eligible. Details: `docs/ui-modernisation/DASHBOARD_VALIDATION.md` and `DASHBOARD_PUBLICATION.md` in the integration worktree. Commit emitted unrelated Windows long-path warnings for Codex turn-diff checkpoint refs; real feature commit/publication succeeded, no infrastructure repair performed.
|
||||
|
||||
3 November 2026 — newest owner decision: **"Approve navigation and A3-IM03"**. Navigation Gate F992608c7 is ACCEPTED; do not repeat that question. A3-IM03 is implemented in the existing integration worktree on isolated branch `codex/a3-ui-03`, based on992608c7 plus only the independent metadata patch d4b938fa cherry-picked as5e8a07d1. Original integration/UI01/UI02 refs remain unchanged. Dashboard/onboarding qualification and publication receipt follow; earlier navigation-pending text below is historical.
|
||||
|
||||
Current UI03 work: new/reset A1 task-first defaults, separate movable agenda widget using explicitly limited recorded attention-feed dates, personal greeting from recorded names, optional owner-scoped resumable setup/skips and on-demand walkthrough. Existing nine widgets/layout geometry/CAS/collisions and source-backed completion remain. Additive agenda whitelist only; no database migration.95 frontend tests/12 suites and36 isolated SQLite backend layout tests pass. Typecheck/full lint/build pass;32 controlled browser scans/captures across16 configurations show zero axe violations;16 synthetic layout saves, no source-data guidance writes. Independent review found no actionable issue; its45 tests overlap95. These are not full Phase10/security/release or native/provider qualifications. See UI03 branch `docs/ui-modernisation/DASHBOARD_VALIDATION.md`. Next dependent owner gate is dashboard/onboarding review before A3-IM04; do not start it from navigation approval alone.
|
||||
|
||||
3 November 2026 — newest: owner attachment `a178edeb-c3ef-4c0e-b4c2-bcd1ca84b90b` explicitly ACCEPTS foundation Gate F (`bdd1de0d`, receipt `0d6de714`) and authorises navigation. Do not repeat foundation/final-A3 approval questions. Required later milestone gates remain distinct; ordinary independent work is authorised while awaiting them.
|
||||
|
||||
**A3 navigation IMPLEMENTED / TESTED / PUBLISHED; owner review pending.** Commit `992608c77f01d26220d086b2cdc55a3722b88ca5`, branch `codex/a3-ui-02`, independently remotely verified. Existing integration worktree `C:\Users\Connor\.codex\worktrees\direct-roadmap-integration\Job tracker` is now on that branch; original integration ref stays d3d33837 and UI-01 ref stays0d6de714. Reuses AppShell/router/MUI drawer, desktop collapse/storage, five mobile destinations and More, retained secondary tools/admin flags, measured content/scroll/toast clearance, source-bound EN/NB and theme behaviour. Discovery promoted to primary; existing workspace destinations retained. Fixed current-route drawer-close/focus defect and320px label wrapping. All57 groups/34 route declarations retained; no backend/data/renderer/dependency changes.
|
||||
|
||||
Fresh navigation evidence: **49 tests /9 suites PASSED**, typecheck/lint/build PASSED; **56 scoped axe sweeps with zero violations**,56 captures. Actual React browser lane:32 screen conditions at320/390/768/1440 EN/NB/light/dark,16 company dialogs,8 More drawers;16 configurations with4 primary route transitions, focus/collapse/More checks, local fixture company save and phone feedback clearance.16 PUTs were intercepted/fulfilled by browser fixtures; no real backend writes.40 existing Google font requests aborted. Core route content may show unavailable-service states: routing checks are not successful backend/domain qualification. Independent source review had no important/critical findings; final committed source/evidence manifest verified. See `docs/ui-modernisation/UI-02.md` and `NAVIGATION_VALIDATION.md` in that branch. Prototype counts are separate historical evidence.
|
||||
|
||||
**Navigation Gate F → A3-IM03 is OPEN.** A concise approval question was submitted in this chat after publication. Exact next scope: approved A1 dashboard hierarchy and optional resumable onboarding through existing DashboardView/grid/layout/checklist owners, retaining schema-2/CAS, hidden geometry/gaps, collision handling, drag/resize/keyboard alternatives and existing-data skip/resume. Do not start that dependent increment until owner review is received. Do not treat the foundation approval as blanket later-gate approval. Other independent roadmap work remains eligible under its own gates.
|
||||
|
||||
**Independent static I18N fix IMPLEMENTED / TESTED / PUBLISHED.** Commit `d4b938fafbf10541b62134293cea8299f25c4031`, `codex/i18n-build-metadata`, independently remotely verified. Existing i18n worktree `C:\Users\Connor\.codex\worktrees\i18n-00-audit\Job tracker` now uses that integration-derived branch from d3d33837; original codex/i18n-accessible-labels ref remains4172c23d. Reproduced Bokmål mobile menu showing literal `commit`; now uses existing localised version/revision key, retaining version-only fallback and caller-controlled admin metadata visibility. **24 tests /5 suites, typecheck, scoped zero-warning lint and fresh production build PASSED**. No new locale keys or historical dynamic-call review changes. Native report/source manifest verified. No fresh browser/live-service qualification for this separate branch. See `docs/i18n/MOBILE_BUILD_METADATA.md`. Do not add its overlapping existing suites to navigation's49 as a unique combined total.
|
||||
|
||||
The I18N patch is **not combined** with frozen navigation review992608c7. After navigation approval, reconcile the next UI baseline and port only its small AppShell hunk/test; never merge the older integration/theme tree wholesale. Run combined targeted metadata/navigation/language evidence after that integration. Full European localisation remains OPEN; all188 historical dynamic reviews remain accounted for, and navigation added four new static EN/NB keys only.
|
||||
|
||||
Design approval continuity is local-only at `3d6976be` on codex/product-modernisation; original A3 prototype237c79b8 and five concepts remain unchanged. No design-branch push. AST-only Graphify updates ran locally; generated graphs remain untracked. Prior orchestrator/pre-P10 worktrees are untouched. No main merge, deployment, destructive migration, provider access or model activation.
|
||||
|
||||
Wider roadmap stays OPEN: Phase10 final acceptance (no new deletion candidate), Product Review/full A3 implementation, GJ predecessor/provider permissions, European market/native localisation, homepage visual/claims approval, final integrated security and live recovery/hosted CI/release qualifications. Existing scoped evidence remains applicable only to its source-bound scope. No human/native-device/screen-reader/actual-zoom, physical PDF/container, provider/model, production or final security pass is inferred. The following entries are historical and superseded where they still describe foundation Gate F as pending.
|
||||
|
||||
3 November 2026 — latest: final A3 design/implementation authorisation RECEIVED in owner attachment137309c9-7463-4c4c-9b1c-6fb689d588d7. Gates C/D/E approved for that stated scope; do not ask for the same final A3 approval again. Verbatim text is committed in implementation branch `docs/ui-modernisation/A3_APPROVAL.md`. Design approval status updated locally at `b7051a3e` on restricted/local-only codex/product-modernisation; frozen prototype remains237c79b8, no new concept.
|
||||
|
||||
Actual A3 implementation checkpoint `bdd1de0dd3259e4e9e9f46c81948f865317c6054`, subsequent evidence/review receipt `0d6de71403015b0e44ca410d0ce2b844b75b893d`, branch `codex/a3-ui-01` in the existing `C:\Users\Connor\.codex\worktrees\direct-roadmap-integration\Job tracker` isolated worktree. Original codex/direct-roadmap-integration ref remains at d3d33837. Branch was created from that accepted integration, not by merging the older design tree. Existing theme.ts now implements D1 semantic palette/navigation colours, typography, quiet surfaces and shared controls. Actual sidebar structure, A1 dashboard and other feature layouts are NOT yet implemented. Theme/controls are A3-IM01, only part of owner UI-01.
|
||||
|
||||
Fresh implementation evidence:30 theme/state/dialog tests in5 suites plus5 disjoint CV-thumbnail/navigation tests in2 suites, all passed; baseline28 and reviewer16 overlap and are not added. Full typecheck, lint, static production build passed. Real built React with controlled API fixtures:32 screen conditions at320/390/768/1440, EN/NB and light/dark;16 company-dialog keyboard journeys;48 scoped axe sweeps, zero violations;32 screenshots. No page exceptions or backend writes. All32 inherited Google font requests were blocked, not fetched. Native JSON, screenshots and source/export-asset manifest committed. Independent code review found no important/critical findings. Final committed manifest verified. No backend/live-service/model/provider/native/human/physical-PDF/final security qualification claimed; actual browser zoom remains untested. Source/route/data/renderer contracts preserved; only shared theme application source changed.
|
||||
|
||||
Publication now works without repair: normal push and independent remote read-back confirmed implementation bdd1de0d. Subsequent documentation receipt0d6de714 pushed; latest read-back receipt recorded in this chat. Design branch remains unpublished by its specific restriction. Older connection-failure entries below remain historical actual results, not current publication status.
|
||||
|
||||
UI Gate F remains OPEN before A3-IM02 navigation: the approved handoff at237c79b8 explicitly says "Owner milestone review before next increment" for A3-IM01. Review the actual implementation evidence at docs/ui-modernisation/UI-01.md and VALIDATION.md in codex/a3-ui-01. After that review, proceed through approved navigation scope without repeating ordinary-change approvals. Do not infer Gate F approval from the earlier generic continue message sent before this validated checkpoint existed. Other independent work remains eligible under its original Phase10/provider/native/security/recovery gates. No orchestrator or pre-P10 changes, main merge or deployment.
|
||||
|
||||
All prior final-A3-approval-pending text below is historical and superseded by the explicit attachment authorisation above. All188 historical dynamic-call reviews remain accounted for; full European localisation, Phase10 acceptance, integrated security and release readiness remain open.
|
||||
|
||||
3 November 2026 — newest design checkpoint: `237c79b8cb3e280d7e4d1ef95cdbb2c77bb81c69` on local-only `codex/product-modernisation`, worktree `C:\Users\Connor\.codex\worktrees\product-modernisation\Job tracker`. Consolidated A3 http://127.0.0.1:4317/a3.html; handoff `docs/product-modernisation/08-a3-handoff/README.md` in that worktree. Owner explicitly confirmed A3: original A1 dashboard, D1 foundation, B1 tracking, editor left/preview right, application context right, desktop grouped sidebar/hybrid mobile, overview-first Career Profile, agenda-first calendar/month preference and automation under Settings. Do not restart five-concept exploration. Final production design/implementation approval remains OPEN (Gates C/D/E); no production UI replacement was authorised or implemented.
|
||||
|
||||
Publication result: local roadmap receipt `3eca2df0ad396544e4d2d1a60b4aed7164f127dc` committed successfully. Normal push to origin/feature/phase10-cleanup FAILED: `Failed to connect to git.cesnimda.uk:443 after 21119 ms: Could not connect to server`. Independent `git ls-remote --heads` also FAILED to connect after 21106 ms. No remote publication or verification is claimed for this receipt or the subsequent failure-record commit. Retry normal phase-branch publication/read-back when the existing remote becomes reachable; do not repair Gitea, change infrastructure or publish the restricted design branch.
|
||||
|
||||
Fresh isolated prototype evidence: 480 unique screen/layout/state conditions (320 populated + 160 generic states), 496 helper render/overflow calls including overlaps, 11 scoped behaviour checks, 44 screenshots and 50 scoped axe sweeps with zero returned violations. 57 inherited groups mapped (56 PARTIAL/1 DEFERRED retained), 34 inherited route strings confirmed in integration source. New direct profile edit/progress, local widget/calendar preferences, letter history/dirty navigation/optional fixed suggestion, account/session and processing-monitor interactions. Source/evidence manifest verified against committed Git bytes using LF-normalised text/raw PNG hashes. AST-only graph refresh completed locally (18,902 nodes/46,671 edges); generated graph remains untracked. Not real application E2E, full WCAG/native/device acceptance, provider/AI operation, Phase 10 or security/release acceptance. Advanced existing controls are explicitly retained components rather than fully simulated lab functionality.
|
||||
|
||||
Design commit is **not pushed or remotely verified**, under the design workshop's existing publication restriction. This primary continuation receipt may be published through the normal authorised Phase 10 development-branch workflow; it does not publish the design branch. Integration remains `d3d338376444b8abdcaf7200f682faa3daf1ad10` and earlier continuation `aa36075bef21385610c7522bf9fa8d7fc929fe89`; do not merge the older design branch application tree wholesale into integration. After explicit final approval, create implementation increments from the reconciled integration baseline and retain Gate F milestone reviews.
|
||||
|
||||
Next owner action: review the consolidated A3 handoff and explicitly approve or request changes to the final design system and proposed ten-milestone production implementation roadmap. Independent ordinary work remains eligible in the appropriate existing worktrees: localisation context/literals and European QA architecture, bounded source security remediation/review, remaining Phase 10 qualification, design-neutral launch preparation and offline release qualification. Do not represent this design review gate as blocking every unrelated package. Preserve provider/predecessor/native-language/homepage-visual/security-scan/staging/live-recovery/hosted-CI gates. No orchestrator access, pre-P10 modification, main merge or production deployment.
|
||||
|
||||
All older entries below are historical; use the latest counts and source-specific receipts above rather than reopening already reviewed 188 dynamic-call inventory entries.
|
||||
|
||||
Newest direct execution checkpoint: isolated combined application review branch `codex/direct-roadmap-integration` published and independently verified at `d3d338376444b8abdcaf7200f682faa3daf1ad10`, worktree `C:\Users\Connor\.codex\worktrees\direct-roadmap-integration\Job tracker`. It preserves approved CLEAN-20 and integrates exact validated I18N/backup paths, with no change to accepted automation handoff records, API sources or workflow configuration. See its docs/direct-roadmap/INTEGRATION_CHECKPOINT.md. Fresh combined checks: 195 selected frontend tests in 16 suites; full typecheck/lint/build; five mocked backup-function tests and Bash syntax, all passed. Additional catalogue QA: 10 tests in three suites; subsequent language-control QA: 17 tests in three suites, with overlap explicitly retained separately. Latest runtime language-control fix has its own fresh passing production build. Native JSON reports archived. No fresh browser, final integrated security, real provider/model, live restore or production qualification.
|
||||
|
||||
I18N finite key-domain census COMPLETE at published/read-back `4172c23d7ce13e8327a5e51bbb09f296c24fb9b8`: all 188 historical indices accounted for, 108 original + 80 supplemental, zero pending. Register schema 3 declares LF-normalised reviewed-text hashes for checkout portability, preserves original historical hashes, and distinguishes repeated same-line calls by immutable inventory index. This does not close every-string context, direct access/backend literals, European registry/native/plural/market or release gates. Tests enforce equal EN/Bokmål keys, placeholder sets and nonblank values across 3,119 keys per language; resources and translations were not invented or published for candidate locales. Only integration branch additionally contains the new catalogue tests, supported-language native-name/NB control fix and corrected JobFlowBar caller note. Prefer that branch for further ordinary integrated development.
|
||||
|
||||
Phase 10 separately published/read-back `db818e5ebd19eeedc05ae58dc3f7a908ce0e713d`: 14 new disjoint AttachmentConsistencyTests passed; selected backend coverage now 103, frontend Phase 10 coverage remains 92. P10-05 remains OPEN; do not claim complete regression/acceptance. Security source matrix follow-through published/read-back `88bcd6d91c6823ffc6bbc6a6de176ab7769e729f`: actual relational ownership denial evidence identified; HTTP/missing-owner/list/upload/MariaDB/final scan gaps retained. No Codex Security scan launched; desktop workflow references read, setup/capability/cost/scope and final integrated gates remain separate.
|
||||
|
||||
Homepage preparation published/read-back `af8c48ce7090f2c56bc8f9a47494b440312ec12a` on feature/launch-site-redesign: design-neutral content, locale and crawlable-HTML/SEO contracts; unchanged rendering-shell sources matched the available build, whose raw export lacked descriptive content/canonical/hreflang. No layout/route/metadata implementation or public marketing publication. Five application concepts and requested comparison ready in product-modernisation local-only commit `2f081e6f`: docs/product-modernisation/CONCEPT_COMPARISON.md and REVIEW_PACK.md, http://127.0.0.1:4317/gallery.html. No sixth concept and no final unapproved UI design implementation. Preserve design branch publishing restriction and all prior owner selections.
|
||||
|
||||
Next eligible work: use the integration branch for remaining literal/direct-access/localisation context work; continue bounded source audit without representing it as a plugin scan or final security gate; qualify full Phase 10/preservation evidence using unchanged source-bound results; complete detailed product journeys and review preparation without final design implementation. Remaining owner/environment gates: final design/implementation roadmap, locale market/native reviewer and Montenegrin identity, required predecessor acceptance/provider/data grants for GJ stages, approved public-site visuals/claims, scan policy/paid deep budget/named staging scope, isolated Linux recovery/hosted CI and production/human/device decisions. No orchestrator access, pre-P10 changes, main merge or deployment.
|
||||
|
||||
Current continuation after 2a4acc17: Phase 10 acceptance register published/read back at `6f29ed4cdb7b259318282f365d737f6cfdb6a682` (P10-05 remains OPEN). Fresh integrity check: 263 indexed artifact hashes and 1,279 retained source hashes match; only approved App.css absent. No extra deletion candidate.
|
||||
|
||||
I18N branch latest published/read-back `ebd33fcf0040ed7ebe659c75171873a88cdfc025`. Actual fixes: `2108ea50` session-change message uses existing EN/NB catalogue outside private providers; `7b132ec4` own-property guards for completeness/timeline unknown labels; `36db9322` inherited-name pipeline alias fallback. Selected runs separately: 17 session tests, 41 label/workflow tests, 29 pipeline/board tests, all passing. Typecheck and scoped lint passed for each implementation package. Static production build passed before the final one-line pipeline patch; do not claim a fresh final-pipeline build. Local AST graph update completed, 18,560 nodes / 46,020 edges; generated graphs untracked. Sanitized 17/41 native reports committed; pipeline native JSON remains ignored locally. DYNAMIC_RESOLUTION_REGISTER.json binds 18 individually matched supplemental call sites and reviewed source hashes to the original inventory: 126 resolved / 62 pending of 188, no duplicate counts. Final integrated security tests remain open until relevant application changes are complete.
|
||||
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -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.
|
||||
@@ -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.
|
||||
@@ -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.
|
||||
@@ -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."
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -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.
|
||||
@@ -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.
|
||||
@@ -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"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -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
@@ -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.
|
||||
@@ -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.
|
||||
@@ -0,0 +1,18 @@
|
||||
# Application asset label domains — 2 November 2026
|
||||
|
||||
Nine historical dynamic sites resolved by source review; no source/runtime behavior changed.
|
||||
|
||||
| Historical line(s) | Finite domain / fallback |
|
||||
| --- | --- |
|
||||
| 389 | Package labels iterate only TailoredCvText and RecruiterMessageDraft; the assetsPackage prefix therefore yields two keys. Material body remains user/application data. |
|
||||
| 456/458 | tailoringLabels is a Map of six fixed title/detail tuples; unknown kinds preserve server-supplied title/detail as data. |
|
||||
| 687/688 | historySources and historyAiActions are Maps with five and ten fixed values. Guarded get calls preserve unknown historical source/action labels verbatim. |
|
||||
| 830 | Toolbar iterates four literal key/label pairs. |
|
||||
| 857/895 | COVER_LETTER_ACTIONS is a nine-entry literal array; selection uses find with a fixed coverActionGenerate fallback. |
|
||||
| 866 | Tone options iterate six literal key pairs. |
|
||||
|
||||
All relevant components obtain t from useI18n. The 39 distinct keys across these domains are defined in both catalogues; local assertion verified all 78 definitions. Map lookups have no inherited Object-property ambiguity. UI language and selected document-generation language remain separate. This does not activate AI, re-run PDF metrics or change canonical ownership, revision/history, entitlements, package snapshots or stored text.
|
||||
|
||||
The two error.messageKey sites remain pending until all error constructors/callers are traced. Key-domain review is not complete translator context, professional/native translation review or production capability acceptance. Existing unchanged contract tests were not rerun solely to record these static facts.
|
||||
|
||||
Machine register binds exact expressions and reviewed source hash. Reconciliation: 108 original + 37 supplemental = 145 resolved / 43 pending of 188. Do not count earlier 136/52 as additional work to add to this total.
|
||||
@@ -0,0 +1,20 @@
|
||||
# Attachment preview accessible label — 2026-11-02
|
||||
|
||||
Status: implemented and locally verified; publication recorded in Git history.
|
||||
|
||||
The shared Attachments PDF iframe used the generic English title `pdf`. It now reuses `attachmentsPreviewTitle` with the displayed filename, matching the existing dialog title in English and Norwegian Bokmål. This addresses the generic PDF-title item from the literal review (I00-15).
|
||||
|
||||
Scope: `Attachments.tsx`, its attachment regression tests, and this evidence. ApplicationWorkspacePage remains the caller. No route, API, file-content, upload/download, object-URL lifecycle, persistence, dependency or generated-content language behavior changed.
|
||||
|
||||
Verification:
|
||||
|
||||
- RED: two new language cases failed against the previous generic title; three existing attachment cases passed.
|
||||
- PASSED: attachment and file-picker suites, 13 tests across two suites, zero failures, native exit 0. The language cases open the PDF preview through its translated button and verify the named iframe and blob URL.
|
||||
- PASSED: `npm run typecheck`, exit 0.
|
||||
- PASSED: ESLint for both changed source/test files with zero warnings, exit 0.
|
||||
- An earlier combined test execution passed all 13 assertions but exited 1 because the JSON report directory did not exist. Creating the local artifact directory and rerunning produced the successful execution above. These are overlapping runs, not 26 distinct tests.
|
||||
- Raw successful Jest evidence: local ignored `job-tracker-ui/.artifacts/attachment-label-results.json`.
|
||||
|
||||
Rollback: revert this package; no data conversion is involved. No new translation key was needed. The 80 unresolved dynamic translation calls remain open; this fix does not establish complete i18n or accessibility acceptance. Browser/native assistive-technology checks and a full production build were not rerun for this label-only change.
|
||||
|
||||
Next: continue the unresolved dynamic-call inventory and remaining literal triage; retain all independent workstream and release gates.
|
||||
@@ -0,0 +1,12 @@
|
||||
# Checklist dynamic translation review — 2026-11-02
|
||||
|
||||
Supplement to the historical dynamic inventory; no application behavior changed.
|
||||
|
||||
- RESOLVED: `ApplicationChecklist.tsx:207`, `t(keys[category])`. The local map at lines 200–206 contains five literal keys: checklistCategoryPreparation, checklistCategorySubmission, checklistCategoryFollowUp, checklistCategoryInterview, checklistCategoryCustom. Both English (translations.ts:3042–3046) and Bokmål (6163–6167) define all five. The component obtains `t` from useI18n at line 25 and passes it to the category helper. Unknown categories remain user/domain data displayed verbatim; they never become translation keys.
|
||||
- OPEN: the two checklist-item template calls at lines 214–215 and the two next-step calls in ApplicationWorkspacePage at lines 392/395. `checklistSystemTranslationToken` (applicationWorkspace.ts:94) excludes empty and learning-prefixed keys but otherwise converts arbitrary kebab-case strings. It does not restrict the input to the known translated system items. Catalogue entries alone cannot prove all provider/backend inputs are covered. Inspect the backend system-key producer and compatibility contract before declaring these four calls resolved or changing the fallback.
|
||||
|
||||
Reconciled progress: historical inventory has 188 dynamic calls, 108 previously resolved and 80 pending. This supplemental review resolves one additional call: 109 resolved, 79 pending. The original inventory remains a historical source-bound snapshot; do not add this result to a rerun total or label all translation contexts accepted.
|
||||
|
||||
Evidence: graph query located ApplicationChecklist, useI18n, applicationWorkspace and ApplicationWorkspacePage; direct source review confirmed the map, translator ownership, token behavior and ten catalogue definitions. Static review only; no runtime coverage claim.
|
||||
|
||||
Backend follow-through: ApplicationChecklistService.cs:105–132 defines 14 default system keys. A local assertion converted each through the frontend's kebab-to-camel rule and verified all 28 title/description keys occur in both catalogues (56 definitions). SeedMissingAsync:353–405 adds absent defaults and retains existing persisted rows; Project:482 passes through SystemKey. Learning keys use a separate prefix and remain excluded by the helper. Current defaults are covered; legacy/unrecognised persisted keys still prevent resolving the four calls without a compatibility/fallback decision. No database was accessed.
|
||||
@@ -0,0 +1,13 @@
|
||||
# Historical checklist text fallback
|
||||
|
||||
2 November 2026. CONFIRMED functional compatibility defect: an unknown/retired persisted system key was converted into nonexistent catalogue keys, hiding the supplied historical task text. Diagnostic RED: three unknown-token cases and EN/NB UI cases failed; nine unselected cases were not run in that diagnostic execution.
|
||||
|
||||
Minimal shared fix in checklistSystemTranslationToken: retain kebab-to-camel conversion, but return a token only when the English fallback catalogue owns both title and description keys. Otherwise return null, activating the existing original-text fallback in ApplicationChecklist and workspace next-step presentation. Learning/custom boundaries remain intact. This does not delete tasks, rewrite stored keys/text, change backend generation, enable AI, or change revision/ownership/API contracts. English is the existing reliable translation fallback; current 14 system title/description pairs also exist in Bokmål.
|
||||
|
||||
PASSED: 37 tests in checklist-translation-token, application-checklist and application-workspace-overlay, zero failures/pending, exit 0. New tests prove unknown/inherited-name keys do not manufacture labels, historical text survives EN/NB, and known/learning/null behavior remains. Full typecheck and scoped three-file ESLint passed. Native local report: job-tracker-ui/.artifacts/checklist-unknown-system-keys.json. Full build/browser and integrated security acceptance are not claimed here. Rollback: revert the helper/import and new tests; no database rollback.
|
||||
|
||||
Four dynamic checklist/next-step sites are now bounded by actual catalogue membership, not merely a presumed backend key list. The machine register binds applicationWorkspace.ts as their owner dependency.
|
||||
|
||||
Two further unchanged sites reviewed: ApplicationWorkspacePage.tsx:505 receives only WORKSPACE_SECTIONS.map(s.key), a fixed seven-key label domain; CareerEvidenceBank.tsx:83 first checks a six-value literal category array before constructing the prefixed key, leaving unknown category text untouched. All 41 distinct system/workspace/evidence keys are defined in both catalogues. This is key-domain evidence, not native language quality or complete every-string context.
|
||||
|
||||
Reconciliation: 108 original + 62 supplemental sites = 170 resolved / 18 pending of 188. This supersedes the earlier open checklist gap without reclassifying broader i18n/security acceptance.
|
||||
@@ -0,0 +1,13 @@
|
||||
# Current localisation continuation
|
||||
|
||||
Register portability correction: schema 3 explicitly normalises CRLF to LF when hashing reviewed TS/TSX/JSON text and the original inventory; historicalSourceSha256 retains the original inventory's raw-hash meaning. This avoids treating Git checkout line-ending conversion as a source edit. Integration initially detected the raw inventory mismatch; original snapshot contents and historical source hashes were preserved, and both worktrees are revalidated with the declared encoding. This is evidence portability, not renewed runtime execution.
|
||||
|
||||
2 November 2026. Historical 188 dynamic-call census finite key-domain review COMPLETE; full I18N-00 / European locale release acceptance remains INCOMPLETE. Original source-bound snapshots are retained under 00/. Machine register schema 2 binds inventory indices, source hashes and selected owner dependencies; 108 original plus 80 supplemental calls cover all 188 indices without overlap. Static review does not establish all translator sensitivity/context, every visible/backend string, grammar/plural quality, runtime coverage or native review.
|
||||
|
||||
Independent fixes now include descriptive attachment preview labels; session-change feedback outside private providers; safe inherited-name handling for completeness/timeline/pipeline/processing/interview/purpose labels; and original historical checklist-text fallback for unrecognised system keys. No user data, canonical Career Profile ownership, CV/letter revision or final design contract was rewritten. No dependencies or migrations added.
|
||||
|
||||
Latest implementation qualification: processing monitor 17 tests; checklist/workspace 37 tests; interview/document index 41 tests. Each selected execution passed with zero failures/pending, scoped lint and full typecheck. They are disjoint selected suites, not complete application acceptance. Earlier diagnostic failures and overlapping executions remain separately recorded in their reports. A fresh combined Next 16.4.1 static build after the final fixes passed, exit 0, including TypeScript and all three generated pages. No deployment, live API/provider/model or final integrated security test implied.
|
||||
|
||||
Sanitized native reports: evidence/processing-label-fallbacks.json.gz, evidence/checklist-unknown-system-keys.json.gz, evidence/interview-document-fallbacks.json.gz. Earlier scope reports and prior evidence remain intact. Generated AST graph stays untracked; optional SQL/PDF extractor gaps do not change application acceptance.
|
||||
|
||||
Next independent work: complete direct-access and literal review, every-string context/sensitivity triage, European catalogue/territory/source qualification and approved glossary/translation QA preparation. Full registry/persistence/plural engine architecture still needs prerequisite acceptance and the documented decisions; no proposed locale is published. Native translators/market priorities, Montenegrin tag identity, final design, provider rights, staging/paid scans, hosted CI and production/recovery decisions remain distinct gates. Final integrated security testing follows the relevant application changes.
|
||||
@@ -0,0 +1,13 @@
|
||||
# CV, board and field-review translation domains
|
||||
|
||||
2 November 2026. Eight more historical sites resolved by source/control-flow review; no implementation change or repeated PDF qualification.
|
||||
|
||||
- KanbanBoard.tsx:194/446 iterate the three literal PIPELINE_GROUPS labels. Custom statuses use their separately handled Other column; they do not create group translation keys. The pipeline owner dependency is hash-bound in the register.
|
||||
- CvBuilderEditor.tsx:669 iterates the literal indices 1/0/2/3/4 over five literal studio-tab keys. This lookup is independent of arbitrary tab state.
|
||||
- CvBuilderEditor.tsx:1490 maps four historical sources with an existing Object.hasOwn guard and returns unknown source text as data.
|
||||
- CvBuilderEditor.tsx:486 uses getCvExportFailureKey, which returns only cvEmptyContent/cvPdfBusy/cvPdfTimedOut/undefined after explicit status/code checks. Unrecognised errors use existing error handling. CvBuilderPage.tsx:178 has only four literal action-error constructors plus that same export helper. cvBuilder.ts is recorded as an owner dependency. No server/PDF renderer contract was changed.
|
||||
- CareerProfileSections.tsx:45/46 uses confidenceTone, whose four branches return fixed confidence labels. Confidence is interpolated as data; no confidence value becomes a key. Missing metadata is not presented as an accepted profile fact.
|
||||
|
||||
All components obtain t from useI18n. Assertion verified all 23 distinct keys in both catalogues. This is finite key/control-flow coverage, not native terminology, all placeholders/plurals, semantic CV quality or complete accessibility. Canonical profile ownership, revision-safe document history, source provenance and PDF metric/visual acceptance remain untouched.
|
||||
|
||||
Register reconciliation: 108 original + 56 supplemental sites = 164 resolved / 24 pending of 188. Existing earlier tests are historical evidence for unchanged implementations, not fresh executions by this review.
|
||||
@@ -0,0 +1,917 @@
|
||||
{
|
||||
"schemaVersion": 3,
|
||||
"inventorySha256": "79928688a7b1a4961286aaaf48c028eb13ae8286d72d132561d6b5fdd192e323",
|
||||
"historicalCalls": 188,
|
||||
"previouslyResolved": 108,
|
||||
"additionalResolved": 80,
|
||||
"resolved": 188,
|
||||
"pending": 0,
|
||||
"evidence": [
|
||||
"CHECKLIST_DYNAMIC_REVIEW.md",
|
||||
"FINITE_OWNER_MAP_REVIEW.md",
|
||||
"UNKNOWN_LABEL_FALLBACKS.md",
|
||||
"PIPELINE_ALIAS_FALLBACK.md",
|
||||
"PROCESSING_LABEL_FALLBACKS.md",
|
||||
"REMINDER_INTERVIEW_KEY_REVIEW.md",
|
||||
"ASSET_KEY_REVIEW.md",
|
||||
"LANDING_DOCUMENT_KEY_REVIEW.md",
|
||||
"CV_BOARD_KEY_REVIEW.md",
|
||||
"CHECKLIST_UNKNOWN_SYSTEM_KEYS.md",
|
||||
"ERROR_STATE_KEY_REVIEW.md",
|
||||
"IMPORT_OPERATION_KEY_REVIEW.md",
|
||||
"INTERVIEW_DOCUMENT_FALLBACKS.md"
|
||||
],
|
||||
"entries": [
|
||||
{
|
||||
"file": "job-tracker-ui/src/components/ApplicationChecklist.tsx",
|
||||
"historicalLine": 207,
|
||||
"expression": "t(keys[category])",
|
||||
"historicalSourceSha256": "88fdcd24914cf074aedee72a94b0c420c96a16dfe7194142daf22ec0ad8370ff",
|
||||
"reviewedSourceSha256": "0f198e90559b30952cbf7d0f4973211e3fbffcbb183e9e4b4f2ee2e2a9d02f56",
|
||||
"status": "finite-key-domain-reviewed",
|
||||
"runtimeCoverage": "see named focused regression reports; static review alone is not runtime coverage",
|
||||
"inventoryEntryIndex": 14
|
||||
},
|
||||
{
|
||||
"file": "job-tracker-ui/src/components/ApplicationIntelligence.tsx",
|
||||
"historicalLine": 367,
|
||||
"expression": "t(keys[category])",
|
||||
"historicalSourceSha256": "89addd1e262ac9c5e37a718acb31d270a132269fe3518d6711e91f3da76ae1a4",
|
||||
"reviewedSourceSha256": "90540576dba4d705ed9234df7091f2b725500d4301287ba151a520956c03f073",
|
||||
"status": "finite-key-domain-reviewed",
|
||||
"runtimeCoverage": "see named focused regression reports; static review alone is not runtime coverage",
|
||||
"inventoryEntryIndex": 18
|
||||
},
|
||||
{
|
||||
"file": "job-tracker-ui/src/components/ApplicationIntelligence.tsx",
|
||||
"historicalLine": 373,
|
||||
"expression": "t(`matchScoreBand_${band}`)",
|
||||
"historicalSourceSha256": "89addd1e262ac9c5e37a718acb31d270a132269fe3518d6711e91f3da76ae1a4",
|
||||
"reviewedSourceSha256": "90540576dba4d705ed9234df7091f2b725500d4301287ba151a520956c03f073",
|
||||
"status": "finite-key-domain-reviewed",
|
||||
"runtimeCoverage": "see named focused regression reports; static review alone is not runtime coverage",
|
||||
"inventoryEntryIndex": 19
|
||||
},
|
||||
{
|
||||
"file": "job-tracker-ui/src/components/CoverLetterDocument.tsx",
|
||||
"historicalLine": 36,
|
||||
"expression": "t(fieldLabels[key])",
|
||||
"historicalSourceSha256": "17ea0c608db7bc05171fb3c44f378c1acaa78fbdd337f9330002ef6346b92546",
|
||||
"reviewedSourceSha256": "d76d0cc3a21230043e91a0d28d03953c236b731c5fecd48e2ba11fd610281053",
|
||||
"status": "finite-key-domain-reviewed",
|
||||
"runtimeCoverage": "see named focused regression reports; static review alone is not runtime coverage",
|
||||
"inventoryEntryIndex": 30
|
||||
},
|
||||
{
|
||||
"file": "job-tracker-ui/src/components/CoverLetterDocument.tsx",
|
||||
"historicalLine": 153,
|
||||
"expression": "t(fieldLabels[key])",
|
||||
"historicalSourceSha256": "17ea0c608db7bc05171fb3c44f378c1acaa78fbdd337f9330002ef6346b92546",
|
||||
"reviewedSourceSha256": "d76d0cc3a21230043e91a0d28d03953c236b731c5fecd48e2ba11fd610281053",
|
||||
"status": "finite-key-domain-reviewed",
|
||||
"runtimeCoverage": "see named focused regression reports; static review alone is not runtime coverage",
|
||||
"inventoryEntryIndex": 33
|
||||
},
|
||||
{
|
||||
"file": "job-tracker-ui/src/components/CvTemplateGallery.tsx",
|
||||
"historicalLine": 33,
|
||||
"expression": "t(labels[0])",
|
||||
"historicalSourceSha256": "dda733af709e419b17fb254d65fbb27c8dbba01d032a1c0266517fc27d134eb7",
|
||||
"reviewedSourceSha256": "d7f28fd9479dabd5a988b6a8b656c36c6c9b6622beb13530b7011590edb7965e",
|
||||
"status": "finite-key-domain-reviewed",
|
||||
"runtimeCoverage": "see named focused regression reports; static review alone is not runtime coverage",
|
||||
"inventoryEntryIndex": 35
|
||||
},
|
||||
{
|
||||
"file": "job-tracker-ui/src/components/CvTemplateGallery.tsx",
|
||||
"historicalLine": 33,
|
||||
"expression": "t(labels[1])",
|
||||
"historicalSourceSha256": "dda733af709e419b17fb254d65fbb27c8dbba01d032a1c0266517fc27d134eb7",
|
||||
"reviewedSourceSha256": "d7f28fd9479dabd5a988b6a8b656c36c6c9b6622beb13530b7011590edb7965e",
|
||||
"status": "finite-key-domain-reviewed",
|
||||
"runtimeCoverage": "see named focused regression reports; static review alone is not runtime coverage",
|
||||
"inventoryEntryIndex": 36
|
||||
},
|
||||
{
|
||||
"file": "job-tracker-ui/src/components/CvTemplateGallery.tsx",
|
||||
"historicalLine": 33,
|
||||
"expression": "t(labels[2])",
|
||||
"historicalSourceSha256": "dda733af709e419b17fb254d65fbb27c8dbba01d032a1c0266517fc27d134eb7",
|
||||
"reviewedSourceSha256": "d7f28fd9479dabd5a988b6a8b656c36c6c9b6622beb13530b7011590edb7965e",
|
||||
"status": "finite-key-domain-reviewed",
|
||||
"runtimeCoverage": "see named focused regression reports; static review alone is not runtime coverage",
|
||||
"inventoryEntryIndex": 37
|
||||
},
|
||||
{
|
||||
"file": "job-tracker-ui/src/components/DashboardGrid.tsx",
|
||||
"historicalLine": 47,
|
||||
"expression": "t(WIDGETS.find(widget => widget.id === id)!.titleKey)",
|
||||
"historicalSourceSha256": "201f6d7580af81e92e1fe9c759972a4d2bc1f865cbbe651dd7977e10a130062e",
|
||||
"reviewedSourceSha256": "1f9dfb5dc17b7804c00cca823e7045ec1804d3bcf162bb56590bcd3cf85358d8",
|
||||
"status": "finite-key-domain-reviewed",
|
||||
"runtimeCoverage": "see named focused regression reports; static review alone is not runtime coverage",
|
||||
"inventoryEntryIndex": 38
|
||||
},
|
||||
{
|
||||
"file": "job-tracker-ui/src/components/DashboardGrid.tsx",
|
||||
"historicalLine": 63,
|
||||
"expression": "t(WIDGETS.find(item => item.id === widget.id)!.titleKey)",
|
||||
"historicalSourceSha256": "201f6d7580af81e92e1fe9c759972a4d2bc1f865cbbe651dd7977e10a130062e",
|
||||
"reviewedSourceSha256": "1f9dfb5dc17b7804c00cca823e7045ec1804d3bcf162bb56590bcd3cf85358d8",
|
||||
"status": "finite-key-domain-reviewed",
|
||||
"runtimeCoverage": "see named focused regression reports; static review alone is not runtime coverage",
|
||||
"inventoryEntryIndex": 39
|
||||
},
|
||||
{
|
||||
"file": "job-tracker-ui/src/components/DashboardLayoutEditor.tsx",
|
||||
"historicalLine": 77,
|
||||
"expression": "t(entry.titleKey)",
|
||||
"historicalSourceSha256": "faab5c4d63d650c02f4fa0a6f0e2880b1b21535b444a143e1989d9e378f0e16f",
|
||||
"reviewedSourceSha256": "86714ee75bfeddfe62e4c4c9d535c4e641d1213422615fab76838d6aa401984a",
|
||||
"status": "finite-key-domain-reviewed",
|
||||
"runtimeCoverage": "see named focused regression reports; static review alone is not runtime coverage",
|
||||
"inventoryEntryIndex": 45
|
||||
},
|
||||
{
|
||||
"file": "job-tracker-ui/src/components/DashboardView.tsx",
|
||||
"historicalLine": 259,
|
||||
"expression": "t(key)",
|
||||
"historicalSourceSha256": "37952276ba7d3d0c65df734c816e317b54d50034838dc91f56e3de6f1eb17879",
|
||||
"reviewedSourceSha256": "65113412e4a21e23d093d4af52affab7d24997a3912e7dada9e3e276954d77e0",
|
||||
"status": "finite-key-domain-reviewed",
|
||||
"runtimeCoverage": "see named focused regression reports; static review alone is not runtime coverage",
|
||||
"inventoryEntryIndex": 48
|
||||
},
|
||||
{
|
||||
"file": "job-tracker-ui/src/components/DashboardView.tsx",
|
||||
"historicalLine": 372,
|
||||
"expression": "t(WIDGETS.find(item => item.id === widget.id)!.titleKey)",
|
||||
"historicalSourceSha256": "37952276ba7d3d0c65df734c816e317b54d50034838dc91f56e3de6f1eb17879",
|
||||
"reviewedSourceSha256": "65113412e4a21e23d093d4af52affab7d24997a3912e7dada9e3e276954d77e0",
|
||||
"status": "finite-key-domain-reviewed",
|
||||
"runtimeCoverage": "see named focused regression reports; static review alone is not runtime coverage",
|
||||
"inventoryEntryIndex": 57
|
||||
},
|
||||
{
|
||||
"file": "job-tracker-ui/src/pipeline.ts",
|
||||
"historicalLine": 149,
|
||||
"expression": "t(LABEL_KEYS[normalized])",
|
||||
"historicalSourceSha256": "fa755ced07a90cef79ceff1622049adc7ed7df3794c942512d9675ef04af8843",
|
||||
"reviewedSourceSha256": "f5cb6d36e81268b2533c4f5ba4e53781007f166c217a4d805c9a8f9f66c2b9ca",
|
||||
"status": "finite-key-domain-reviewed",
|
||||
"runtimeCoverage": "see named focused regression reports; static review alone is not runtime coverage",
|
||||
"inventoryEntryIndex": 79
|
||||
},
|
||||
{
|
||||
"file": "job-tracker-ui/src/views/AdminProcessingPage.tsx",
|
||||
"historicalLine": 153,
|
||||
"expression": "t(tasks[value])",
|
||||
"historicalSourceSha256": "13973a963ec247c2b61230f5b96ebe1e5feb73ccc9374f15c9bd05f2b3699d1c",
|
||||
"reviewedSourceSha256": "514cbf45298e165334ab502b3833e08fc7a145c5790a80979dc4b0485857316b",
|
||||
"status": "finite-key-domain-reviewed",
|
||||
"runtimeCoverage": "see named focused regression reports; static review alone is not runtime coverage",
|
||||
"inventoryEntryIndex": 87
|
||||
},
|
||||
{
|
||||
"file": "job-tracker-ui/src/views/AdminProcessingPage.tsx",
|
||||
"historicalLine": 173,
|
||||
"expression": "t(key as TranslationKey)",
|
||||
"historicalSourceSha256": "13973a963ec247c2b61230f5b96ebe1e5feb73ccc9374f15c9bd05f2b3699d1c",
|
||||
"reviewedSourceSha256": "514cbf45298e165334ab502b3833e08fc7a145c5790a80979dc4b0485857316b",
|
||||
"status": "finite-key-domain-reviewed",
|
||||
"runtimeCoverage": "see named focused regression reports; static review alone is not runtime coverage",
|
||||
"inventoryEntryIndex": 88
|
||||
},
|
||||
{
|
||||
"file": "job-tracker-ui/src/views/AdminProcessingPage.tsx",
|
||||
"historicalLine": 205,
|
||||
"expression": "t(key)",
|
||||
"historicalSourceSha256": "13973a963ec247c2b61230f5b96ebe1e5feb73ccc9374f15c9bd05f2b3699d1c",
|
||||
"reviewedSourceSha256": "514cbf45298e165334ab502b3833e08fc7a145c5790a80979dc4b0485857316b",
|
||||
"status": "finite-key-domain-reviewed",
|
||||
"runtimeCoverage": "see named focused regression reports; static review alone is not runtime coverage",
|
||||
"inventoryEntryIndex": 94
|
||||
},
|
||||
{
|
||||
"file": "job-tracker-ui/src/views/career/careerCompletenessLabels.ts",
|
||||
"historicalLine": 15,
|
||||
"expression": "t(key)",
|
||||
"historicalSourceSha256": "b841cc4af73307fa33e772b8a10ddfe9620a7566f2b30ef34eb2b832da02d41e",
|
||||
"reviewedSourceSha256": "9e53eab4592a341b6b369b3408843b21b2c9233e9b765115367bb3586a1b8401",
|
||||
"status": "finite-key-domain-reviewed",
|
||||
"runtimeCoverage": "see named focused regression reports; static review alone is not runtime coverage",
|
||||
"inventoryEntryIndex": 187
|
||||
},
|
||||
{
|
||||
"file": "job-tracker-ui/src/views/AdminProcessingPage.tsx",
|
||||
"historicalLine": 130,
|
||||
"expression": "t(statuses[value] ?? 'processingUnknown')",
|
||||
"historicalSourceSha256": "13973a963ec247c2b61230f5b96ebe1e5feb73ccc9374f15c9bd05f2b3699d1c",
|
||||
"reviewedSourceSha256": "514cbf45298e165334ab502b3833e08fc7a145c5790a80979dc4b0485857316b",
|
||||
"status": "finite-key-domain-reviewed",
|
||||
"runtimeCoverage": "PROCESSING_LABEL_FALLBACKS.md; six inherited-key/language regressions plus eleven existing cases",
|
||||
"inventoryEntryIndex": 80
|
||||
},
|
||||
{
|
||||
"file": "job-tracker-ui/src/views/AdminProcessingPage.tsx",
|
||||
"historicalLine": 131,
|
||||
"expression": "t(stages[value])",
|
||||
"historicalSourceSha256": "13973a963ec247c2b61230f5b96ebe1e5feb73ccc9374f15c9bd05f2b3699d1c",
|
||||
"reviewedSourceSha256": "514cbf45298e165334ab502b3833e08fc7a145c5790a80979dc4b0485857316b",
|
||||
"status": "finite-key-domain-reviewed",
|
||||
"runtimeCoverage": "PROCESSING_LABEL_FALLBACKS.md; six inherited-key/language regressions plus eleven existing cases",
|
||||
"inventoryEntryIndex": 81
|
||||
},
|
||||
{
|
||||
"file": "job-tracker-ui/src/views/AdminProcessingPage.tsx",
|
||||
"historicalLine": 175,
|
||||
"expression": "t(tasks[item.taskType] ?? 'processingOther')",
|
||||
"historicalSourceSha256": "13973a963ec247c2b61230f5b96ebe1e5feb73ccc9374f15c9bd05f2b3699d1c",
|
||||
"reviewedSourceSha256": "514cbf45298e165334ab502b3833e08fc7a145c5790a80979dc4b0485857316b",
|
||||
"status": "finite-key-domain-reviewed",
|
||||
"runtimeCoverage": "PROCESSING_LABEL_FALLBACKS.md; six inherited-key/language regressions plus eleven existing cases",
|
||||
"inventoryEntryIndex": 89
|
||||
},
|
||||
{
|
||||
"file": "job-tracker-ui/src/views/AdminProcessingPage.tsx",
|
||||
"historicalLine": 191,
|
||||
"expression": "t(workers[item.name] ?? 'processingWorkerUntracked')",
|
||||
"historicalSourceSha256": "13973a963ec247c2b61230f5b96ebe1e5feb73ccc9374f15c9bd05f2b3699d1c",
|
||||
"reviewedSourceSha256": "514cbf45298e165334ab502b3833e08fc7a145c5790a80979dc4b0485857316b",
|
||||
"status": "finite-key-domain-reviewed",
|
||||
"runtimeCoverage": "PROCESSING_LABEL_FALLBACKS.md; six inherited-key/language regressions plus eleven existing cases",
|
||||
"inventoryEntryIndex": 91
|
||||
},
|
||||
{
|
||||
"file": "job-tracker-ui/src/views/AdminProcessingPage.tsx",
|
||||
"historicalLine": 212,
|
||||
"expression": "t(kinds[item.kind] ?? 'processingUnknown')",
|
||||
"historicalSourceSha256": "13973a963ec247c2b61230f5b96ebe1e5feb73ccc9374f15c9bd05f2b3699d1c",
|
||||
"reviewedSourceSha256": "514cbf45298e165334ab502b3833e08fc7a145c5790a80979dc4b0485857316b",
|
||||
"status": "finite-key-domain-reviewed",
|
||||
"runtimeCoverage": "PROCESSING_LABEL_FALLBACKS.md; six inherited-key/language regressions plus eleven existing cases",
|
||||
"inventoryEntryIndex": 96
|
||||
},
|
||||
{
|
||||
"file": "job-tracker-ui/src/components/InterviewPrep.tsx",
|
||||
"historicalLine": 236,
|
||||
"expression": "t(selected.labelKey)",
|
||||
"historicalSourceSha256": "eadf345d3613ad867788f6a74a8fd1fbba508bb81ec7bc87fe54e4f66dadc69b",
|
||||
"reviewedSourceSha256": "ef8161cc982c9068d3c7eec80f7dd6ef565f05ba0b36bcf58e3b643285b22f0f",
|
||||
"status": "finite-key-domain-reviewed",
|
||||
"runtimeCoverage": "static owner-map review only; no inference or provider calls",
|
||||
"inventoryEntryIndex": 63
|
||||
},
|
||||
{
|
||||
"file": "job-tracker-ui/src/components/InterviewPrep.tsx",
|
||||
"historicalLine": 261,
|
||||
"expression": "t(selected.labelKey)",
|
||||
"historicalSourceSha256": "eadf345d3613ad867788f6a74a8fd1fbba508bb81ec7bc87fe54e4f66dadc69b",
|
||||
"reviewedSourceSha256": "ef8161cc982c9068d3c7eec80f7dd6ef565f05ba0b36bcf58e3b643285b22f0f",
|
||||
"status": "finite-key-domain-reviewed",
|
||||
"runtimeCoverage": "static owner-map review only; no inference or provider calls",
|
||||
"inventoryEntryIndex": 64
|
||||
},
|
||||
{
|
||||
"file": "job-tracker-ui/src/components/InterviewPrep.tsx",
|
||||
"historicalLine": 285,
|
||||
"expression": "t(item.labelKey)",
|
||||
"historicalSourceSha256": "eadf345d3613ad867788f6a74a8fd1fbba508bb81ec7bc87fe54e4f66dadc69b",
|
||||
"reviewedSourceSha256": "ef8161cc982c9068d3c7eec80f7dd6ef565f05ba0b36bcf58e3b643285b22f0f",
|
||||
"status": "finite-key-domain-reviewed",
|
||||
"runtimeCoverage": "static owner-map review only; no inference or provider calls",
|
||||
"inventoryEntryIndex": 65
|
||||
},
|
||||
{
|
||||
"file": "job-tracker-ui/src/components/RemindersView.tsx",
|
||||
"historicalLine": 35,
|
||||
"expression": "t(key)",
|
||||
"historicalSourceSha256": "1eedbc443761001e86be1f322691ab4058553033e764b0c6cf9c93ce4fab05c0",
|
||||
"reviewedSourceSha256": "e550e76cb28cb4236100bb1a35158a329e4ecd3a12be56f6cdaf28fb75fa0091",
|
||||
"status": "finite-key-domain-reviewed",
|
||||
"runtimeCoverage": "static owner-map review only; no inference or provider calls",
|
||||
"inventoryEntryIndex": 76
|
||||
},
|
||||
{
|
||||
"file": "job-tracker-ui/src/components/RemindersView.tsx",
|
||||
"historicalLine": 38,
|
||||
"expression": "t(dayKey, { days: match[1] })",
|
||||
"historicalSourceSha256": "1eedbc443761001e86be1f322691ab4058553033e764b0c6cf9c93ce4fab05c0",
|
||||
"reviewedSourceSha256": "e550e76cb28cb4236100bb1a35158a329e4ecd3a12be56f6cdaf28fb75fa0091",
|
||||
"status": "finite-key-domain-reviewed",
|
||||
"runtimeCoverage": "static owner-map review only; no inference or provider calls",
|
||||
"inventoryEntryIndex": 77
|
||||
},
|
||||
{
|
||||
"file": "job-tracker-ui/src/components/ApplicationAssets.tsx",
|
||||
"historicalLine": 389,
|
||||
"expression": "t(`assetsPackage${key}` as \"assetsPackageTailoredCvText\")",
|
||||
"historicalSourceSha256": "25216c80ef92d519baad9e428a0e77390150605c1a3529a4809819d120661f29",
|
||||
"reviewedSourceSha256": "b5f14b41de10474e2bcd709b91b1becb7b7db4aba021fba29e4e9e44a7a2947f",
|
||||
"status": "finite-key-domain-reviewed",
|
||||
"runtimeCoverage": "static owner-map review; no AI inference or provider calls",
|
||||
"inventoryEntryIndex": 4
|
||||
},
|
||||
{
|
||||
"file": "job-tracker-ui/src/components/ApplicationAssets.tsx",
|
||||
"historicalLine": 456,
|
||||
"expression": "t(labels[0])",
|
||||
"historicalSourceSha256": "25216c80ef92d519baad9e428a0e77390150605c1a3529a4809819d120661f29",
|
||||
"reviewedSourceSha256": "b5f14b41de10474e2bcd709b91b1becb7b7db4aba021fba29e4e9e44a7a2947f",
|
||||
"status": "finite-key-domain-reviewed",
|
||||
"runtimeCoverage": "static owner-map review; no AI inference or provider calls",
|
||||
"inventoryEntryIndex": 5
|
||||
},
|
||||
{
|
||||
"file": "job-tracker-ui/src/components/ApplicationAssets.tsx",
|
||||
"historicalLine": 458,
|
||||
"expression": "t(labels[1])",
|
||||
"historicalSourceSha256": "25216c80ef92d519baad9e428a0e77390150605c1a3529a4809819d120661f29",
|
||||
"reviewedSourceSha256": "b5f14b41de10474e2bcd709b91b1becb7b7db4aba021fba29e4e9e44a7a2947f",
|
||||
"status": "finite-key-domain-reviewed",
|
||||
"runtimeCoverage": "static owner-map review; no AI inference or provider calls",
|
||||
"inventoryEntryIndex": 6
|
||||
},
|
||||
{
|
||||
"file": "job-tracker-ui/src/components/ApplicationAssets.tsx",
|
||||
"historicalLine": 687,
|
||||
"expression": "t(sourceKey)",
|
||||
"historicalSourceSha256": "25216c80ef92d519baad9e428a0e77390150605c1a3529a4809819d120661f29",
|
||||
"reviewedSourceSha256": "b5f14b41de10474e2bcd709b91b1becb7b7db4aba021fba29e4e9e44a7a2947f",
|
||||
"status": "finite-key-domain-reviewed",
|
||||
"runtimeCoverage": "static owner-map review; no AI inference or provider calls",
|
||||
"inventoryEntryIndex": 7
|
||||
},
|
||||
{
|
||||
"file": "job-tracker-ui/src/components/ApplicationAssets.tsx",
|
||||
"historicalLine": 688,
|
||||
"expression": "t(actionKey)",
|
||||
"historicalSourceSha256": "25216c80ef92d519baad9e428a0e77390150605c1a3529a4809819d120661f29",
|
||||
"reviewedSourceSha256": "b5f14b41de10474e2bcd709b91b1becb7b7db4aba021fba29e4e9e44a7a2947f",
|
||||
"status": "finite-key-domain-reviewed",
|
||||
"runtimeCoverage": "static owner-map review; no AI inference or provider calls",
|
||||
"inventoryEntryIndex": 8
|
||||
},
|
||||
{
|
||||
"file": "job-tracker-ui/src/components/ApplicationAssets.tsx",
|
||||
"historicalLine": 830,
|
||||
"expression": "t(label)",
|
||||
"historicalSourceSha256": "25216c80ef92d519baad9e428a0e77390150605c1a3529a4809819d120661f29",
|
||||
"reviewedSourceSha256": "b5f14b41de10474e2bcd709b91b1becb7b7db4aba021fba29e4e9e44a7a2947f",
|
||||
"status": "finite-key-domain-reviewed",
|
||||
"runtimeCoverage": "static owner-map review; no AI inference or provider calls",
|
||||
"inventoryEntryIndex": 9
|
||||
},
|
||||
{
|
||||
"file": "job-tracker-ui/src/components/ApplicationAssets.tsx",
|
||||
"historicalLine": 857,
|
||||
"expression": "t(item.labelKey)",
|
||||
"historicalSourceSha256": "25216c80ef92d519baad9e428a0e77390150605c1a3529a4809819d120661f29",
|
||||
"reviewedSourceSha256": "b5f14b41de10474e2bcd709b91b1becb7b7db4aba021fba29e4e9e44a7a2947f",
|
||||
"status": "finite-key-domain-reviewed",
|
||||
"runtimeCoverage": "static owner-map review; no AI inference or provider calls",
|
||||
"inventoryEntryIndex": 10
|
||||
},
|
||||
{
|
||||
"file": "job-tracker-ui/src/components/ApplicationAssets.tsx",
|
||||
"historicalLine": 866,
|
||||
"expression": "t(key as any)",
|
||||
"historicalSourceSha256": "25216c80ef92d519baad9e428a0e77390150605c1a3529a4809819d120661f29",
|
||||
"reviewedSourceSha256": "b5f14b41de10474e2bcd709b91b1becb7b7db4aba021fba29e4e9e44a7a2947f",
|
||||
"status": "finite-key-domain-reviewed",
|
||||
"runtimeCoverage": "static owner-map review; no AI inference or provider calls",
|
||||
"inventoryEntryIndex": 11
|
||||
},
|
||||
{
|
||||
"file": "job-tracker-ui/src/components/ApplicationAssets.tsx",
|
||||
"historicalLine": 895,
|
||||
"expression": "t(COVER_LETTER_ACTIONS.find((item) => item.key === action)?.labelKey ?? \"coverActionGenerate\")",
|
||||
"historicalSourceSha256": "25216c80ef92d519baad9e428a0e77390150605c1a3529a4809819d120661f29",
|
||||
"reviewedSourceSha256": "b5f14b41de10474e2bcd709b91b1becb7b7db4aba021fba29e4e9e44a7a2947f",
|
||||
"status": "finite-key-domain-reviewed",
|
||||
"runtimeCoverage": "static owner-map review; no AI inference or provider calls",
|
||||
"inventoryEntryIndex": 13
|
||||
},
|
||||
{
|
||||
"file": "job-tracker-ui/src/views/DocumentsPage.tsx",
|
||||
"historicalLine": 222,
|
||||
"expression": "t(label)",
|
||||
"historicalSourceSha256": "fa53a826ebbdbc868c8b21a0387138c12611d3e2867de0fa0e5f6d8483471eb9",
|
||||
"reviewedSourceSha256": "0b9aaba2c102b4346b10386107b3822016b4f680bb9ab6b58c24ef80b74080fc",
|
||||
"status": "finite-key-domain-reviewed",
|
||||
"runtimeCoverage": "static source review; no marketing or accessibility acceptance",
|
||||
"inventoryEntryIndex": 134
|
||||
},
|
||||
{
|
||||
"file": "job-tracker-ui/src/views/DocumentsPage.tsx",
|
||||
"historicalLine": 225,
|
||||
"expression": "t(states.find(([value]) => value === item.state)?.[1] ?? \"documentsCurrent\")",
|
||||
"historicalSourceSha256": "fa53a826ebbdbc868c8b21a0387138c12611d3e2867de0fa0e5f6d8483471eb9",
|
||||
"reviewedSourceSha256": "0b9aaba2c102b4346b10386107b3822016b4f680bb9ab6b58c24ef80b74080fc",
|
||||
"status": "finite-key-domain-reviewed",
|
||||
"runtimeCoverage": "static source review; no marketing or accessibility acceptance",
|
||||
"inventoryEntryIndex": 135
|
||||
},
|
||||
{
|
||||
"file": "job-tracker-ui/src/views/DocumentsPage.tsx",
|
||||
"historicalLine": 231,
|
||||
"expression": "t(types.find(([value]) => value === item.type)?.[1] ?? \"documentsTypeAttachment\")",
|
||||
"historicalSourceSha256": "fa53a826ebbdbc868c8b21a0387138c12611d3e2867de0fa0e5f6d8483471eb9",
|
||||
"reviewedSourceSha256": "0b9aaba2c102b4346b10386107b3822016b4f680bb9ab6b58c24ef80b74080fc",
|
||||
"status": "finite-key-domain-reviewed",
|
||||
"runtimeCoverage": "static source review; no marketing or accessibility acceptance",
|
||||
"inventoryEntryIndex": 137
|
||||
},
|
||||
{
|
||||
"file": "job-tracker-ui/src/views/DocumentsPage.tsx",
|
||||
"historicalLine": 264,
|
||||
"expression": "t(title)",
|
||||
"historicalSourceSha256": "fa53a826ebbdbc868c8b21a0387138c12611d3e2867de0fa0e5f6d8483471eb9",
|
||||
"reviewedSourceSha256": "0b9aaba2c102b4346b10386107b3822016b4f680bb9ab6b58c24ef80b74080fc",
|
||||
"status": "finite-key-domain-reviewed",
|
||||
"runtimeCoverage": "static source review; no marketing or accessibility acceptance",
|
||||
"inventoryEntryIndex": 144
|
||||
},
|
||||
{
|
||||
"file": "job-tracker-ui/src/views/DocumentsPage.tsx",
|
||||
"historicalLine": 265,
|
||||
"expression": "t(title)",
|
||||
"historicalSourceSha256": "fa53a826ebbdbc868c8b21a0387138c12611d3e2867de0fa0e5f6d8483471eb9",
|
||||
"reviewedSourceSha256": "0b9aaba2c102b4346b10386107b3822016b4f680bb9ab6b58c24ef80b74080fc",
|
||||
"status": "finite-key-domain-reviewed",
|
||||
"runtimeCoverage": "static source review; no marketing or accessibility acceptance",
|
||||
"inventoryEntryIndex": 145
|
||||
},
|
||||
{
|
||||
"file": "job-tracker-ui/src/views/DocumentsPage.tsx",
|
||||
"historicalLine": 265,
|
||||
"expression": "t(label)",
|
||||
"historicalSourceSha256": "fa53a826ebbdbc868c8b21a0387138c12611d3e2867de0fa0e5f6d8483471eb9",
|
||||
"reviewedSourceSha256": "0b9aaba2c102b4346b10386107b3822016b4f680bb9ab6b58c24ef80b74080fc",
|
||||
"status": "finite-key-domain-reviewed",
|
||||
"runtimeCoverage": "static source review; no marketing or accessibility acceptance",
|
||||
"inventoryEntryIndex": 146
|
||||
},
|
||||
{
|
||||
"file": "job-tracker-ui/src/views/LandingPage.tsx",
|
||||
"historicalLine": 87,
|
||||
"expression": "t(`landingPlan${plan.id === \"free\" ? \"Free\" : \"Pro\"}Feature${index + 1}` as TranslationKey)",
|
||||
"historicalSourceSha256": "2c550aa126e1db8786ed10b895d2403491ce50bf5073fc95b8a0fcb0cb0e083e",
|
||||
"reviewedSourceSha256": "aedcdbc8bfc22f7cd4bc9737a06b07f318ca7b4970836bd6c20e805ebfa36c74",
|
||||
"status": "finite-key-domain-reviewed",
|
||||
"runtimeCoverage": "static source review; no marketing or accessibility acceptance",
|
||||
"ownerDependencies": [
|
||||
{
|
||||
"file": "job-tracker-ui/src/planCatalog.ts",
|
||||
"sha256": "068871cc43669d6f8a0581fbaefe8e6d0d2ab7f1c47e0b31cb131e767c2d13b2"
|
||||
}
|
||||
],
|
||||
"inventoryEntryIndex": 160
|
||||
},
|
||||
{
|
||||
"file": "job-tracker-ui/src/views/LandingPage.tsx",
|
||||
"historicalLine": 172,
|
||||
"expression": "t(f.title)",
|
||||
"historicalSourceSha256": "2c550aa126e1db8786ed10b895d2403491ce50bf5073fc95b8a0fcb0cb0e083e",
|
||||
"reviewedSourceSha256": "aedcdbc8bfc22f7cd4bc9737a06b07f318ca7b4970836bd6c20e805ebfa36c74",
|
||||
"status": "finite-key-domain-reviewed",
|
||||
"runtimeCoverage": "static source review; no marketing or accessibility acceptance",
|
||||
"ownerDependencies": [
|
||||
{
|
||||
"file": "job-tracker-ui/src/planCatalog.ts",
|
||||
"sha256": "068871cc43669d6f8a0581fbaefe8e6d0d2ab7f1c47e0b31cb131e767c2d13b2"
|
||||
}
|
||||
],
|
||||
"inventoryEntryIndex": 162
|
||||
},
|
||||
{
|
||||
"file": "job-tracker-ui/src/views/LandingPage.tsx",
|
||||
"historicalLine": 173,
|
||||
"expression": "t(f.body)",
|
||||
"historicalSourceSha256": "2c550aa126e1db8786ed10b895d2403491ce50bf5073fc95b8a0fcb0cb0e083e",
|
||||
"reviewedSourceSha256": "aedcdbc8bfc22f7cd4bc9737a06b07f318ca7b4970836bd6c20e805ebfa36c74",
|
||||
"status": "finite-key-domain-reviewed",
|
||||
"runtimeCoverage": "static source review; no marketing or accessibility acceptance",
|
||||
"ownerDependencies": [
|
||||
{
|
||||
"file": "job-tracker-ui/src/planCatalog.ts",
|
||||
"sha256": "068871cc43669d6f8a0581fbaefe8e6d0d2ab7f1c47e0b31cb131e767c2d13b2"
|
||||
}
|
||||
],
|
||||
"inventoryEntryIndex": 163
|
||||
},
|
||||
{
|
||||
"file": "job-tracker-ui/src/views/LandingPage.tsx",
|
||||
"historicalLine": 190,
|
||||
"expression": "t(s.title)",
|
||||
"historicalSourceSha256": "2c550aa126e1db8786ed10b895d2403491ce50bf5073fc95b8a0fcb0cb0e083e",
|
||||
"reviewedSourceSha256": "aedcdbc8bfc22f7cd4bc9737a06b07f318ca7b4970836bd6c20e805ebfa36c74",
|
||||
"status": "finite-key-domain-reviewed",
|
||||
"runtimeCoverage": "static source review; no marketing or accessibility acceptance",
|
||||
"ownerDependencies": [
|
||||
{
|
||||
"file": "job-tracker-ui/src/planCatalog.ts",
|
||||
"sha256": "068871cc43669d6f8a0581fbaefe8e6d0d2ab7f1c47e0b31cb131e767c2d13b2"
|
||||
}
|
||||
],
|
||||
"inventoryEntryIndex": 164
|
||||
},
|
||||
{
|
||||
"file": "job-tracker-ui/src/views/LandingPage.tsx",
|
||||
"historicalLine": 191,
|
||||
"expression": "t(s.body)",
|
||||
"historicalSourceSha256": "2c550aa126e1db8786ed10b895d2403491ce50bf5073fc95b8a0fcb0cb0e083e",
|
||||
"reviewedSourceSha256": "aedcdbc8bfc22f7cd4bc9737a06b07f318ca7b4970836bd6c20e805ebfa36c74",
|
||||
"status": "finite-key-domain-reviewed",
|
||||
"runtimeCoverage": "static source review; no marketing or accessibility acceptance",
|
||||
"ownerDependencies": [
|
||||
{
|
||||
"file": "job-tracker-ui/src/planCatalog.ts",
|
||||
"sha256": "068871cc43669d6f8a0581fbaefe8e6d0d2ab7f1c47e0b31cb131e767c2d13b2"
|
||||
}
|
||||
],
|
||||
"inventoryEntryIndex": 165
|
||||
},
|
||||
{
|
||||
"file": "job-tracker-ui/src/components/KanbanBoard.tsx",
|
||||
"historicalLine": 194,
|
||||
"expression": "t(g.labelKey as any)",
|
||||
"historicalSourceSha256": "f9e7491cd3bd82214fb081571b46b55b31fb8e135fa5050e76896759c2e79a92",
|
||||
"reviewedSourceSha256": "e83ea475bbf1f33fd262bff154d3cbe8a4b20815beaa00b48312377663f4e48e",
|
||||
"status": "finite-key-domain-reviewed",
|
||||
"runtimeCoverage": "static control-flow review; no PDF metric or model rerun",
|
||||
"ownerDependencies": [
|
||||
{
|
||||
"file": "job-tracker-ui/src/pipeline.ts",
|
||||
"sha256": "f5cb6d36e81268b2533c4f5ba4e53781007f166c217a4d805c9a8f9f66c2b9ca"
|
||||
}
|
||||
],
|
||||
"inventoryEntryIndex": 71
|
||||
},
|
||||
{
|
||||
"file": "job-tracker-ui/src/components/KanbanBoard.tsx",
|
||||
"historicalLine": 446,
|
||||
"expression": "t(g.labelKey as any)",
|
||||
"historicalSourceSha256": "f9e7491cd3bd82214fb081571b46b55b31fb8e135fa5050e76896759c2e79a92",
|
||||
"reviewedSourceSha256": "e83ea475bbf1f33fd262bff154d3cbe8a4b20815beaa00b48312377663f4e48e",
|
||||
"status": "finite-key-domain-reviewed",
|
||||
"runtimeCoverage": "static control-flow review; no PDF metric or model rerun",
|
||||
"ownerDependencies": [
|
||||
{
|
||||
"file": "job-tracker-ui/src/pipeline.ts",
|
||||
"sha256": "f5cb6d36e81268b2533c4f5ba4e53781007f166c217a4d805c9a8f9f66c2b9ca"
|
||||
}
|
||||
],
|
||||
"inventoryEntryIndex": 74
|
||||
},
|
||||
{
|
||||
"file": "job-tracker-ui/src/views/CvBuilderEditor.tsx",
|
||||
"historicalLine": 486,
|
||||
"expression": "t(key)",
|
||||
"historicalSourceSha256": "b163cbe792e98cc1afdd775ffb595c1abb8b58c5fdd9a79bbd6fa6b552f868ae",
|
||||
"reviewedSourceSha256": "67d091b653ca151be853746eaaca1fd5d159a5670924705e228d8e2e9327ad0f",
|
||||
"status": "finite-key-domain-reviewed",
|
||||
"runtimeCoverage": "static control-flow review; no PDF metric or model rerun",
|
||||
"ownerDependencies": [
|
||||
{
|
||||
"file": "job-tracker-ui/src/cvBuilder.ts",
|
||||
"sha256": "c021bafeabbc8ad3526d1b10b90ad8f7f0958ded8ed26eac8c1d28b53098b64d"
|
||||
}
|
||||
],
|
||||
"inventoryEntryIndex": 116
|
||||
},
|
||||
{
|
||||
"file": "job-tracker-ui/src/views/CvBuilderEditor.tsx",
|
||||
"historicalLine": 669,
|
||||
"expression": "t(([\"cvEditorTemplate\", \"cvEditorContent\", \"cvEditorCustomize\", \"cvEditorAiTools\", \"cvEditorHistory\"] as const)[value])",
|
||||
"historicalSourceSha256": "b163cbe792e98cc1afdd775ffb595c1abb8b58c5fdd9a79bbd6fa6b552f868ae",
|
||||
"reviewedSourceSha256": "67d091b653ca151be853746eaaca1fd5d159a5670924705e228d8e2e9327ad0f",
|
||||
"status": "finite-key-domain-reviewed",
|
||||
"runtimeCoverage": "static control-flow review; no PDF metric or model rerun",
|
||||
"inventoryEntryIndex": 117
|
||||
},
|
||||
{
|
||||
"file": "job-tracker-ui/src/views/CvBuilderEditor.tsx",
|
||||
"historicalLine": 1490,
|
||||
"expression": "t(source)",
|
||||
"historicalSourceSha256": "b163cbe792e98cc1afdd775ffb595c1abb8b58c5fdd9a79bbd6fa6b552f868ae",
|
||||
"reviewedSourceSha256": "67d091b653ca151be853746eaaca1fd5d159a5670924705e228d8e2e9327ad0f",
|
||||
"status": "finite-key-domain-reviewed",
|
||||
"runtimeCoverage": "static control-flow review; no PDF metric or model rerun",
|
||||
"inventoryEntryIndex": 131
|
||||
},
|
||||
{
|
||||
"file": "job-tracker-ui/src/views/CvBuilderPage.tsx",
|
||||
"historicalLine": 178,
|
||||
"expression": "t(actionError.key)",
|
||||
"historicalSourceSha256": "b4cc784cadb3b820b78b7b688e3c9961ed724230de4fc5fffae166d29620f361",
|
||||
"reviewedSourceSha256": "d9b7ece2ff25d082bdd8d109f52bb2342d9071b8cc465ca5a2b15ac20aeac6c6",
|
||||
"status": "finite-key-domain-reviewed",
|
||||
"runtimeCoverage": "static control-flow review; no PDF metric or model rerun",
|
||||
"ownerDependencies": [
|
||||
{
|
||||
"file": "job-tracker-ui/src/cvBuilder.ts",
|
||||
"sha256": "c021bafeabbc8ad3526d1b10b90ad8f7f0958ded8ed26eac8c1d28b53098b64d"
|
||||
}
|
||||
],
|
||||
"inventoryEntryIndex": 132
|
||||
},
|
||||
{
|
||||
"file": "job-tracker-ui/src/views/career/CareerProfileSections.tsx",
|
||||
"historicalLine": 45,
|
||||
"expression": "t(tone.key, { percent: Math.round(metadata.confidence * 100) })",
|
||||
"historicalSourceSha256": "0c772feb6bde8324676b0884aaf343283465c5cd3b3318128363063df4ea22ab",
|
||||
"reviewedSourceSha256": "aa3acbe472d34074a517a566c77983e7d95f8ec1df9ee37e47537ad96beffd0e",
|
||||
"status": "finite-key-domain-reviewed",
|
||||
"runtimeCoverage": "static control-flow review; no PDF metric or model rerun",
|
||||
"inventoryEntryIndex": 176
|
||||
},
|
||||
{
|
||||
"file": "job-tracker-ui/src/views/career/CareerProfileSections.tsx",
|
||||
"historicalLine": 46,
|
||||
"expression": "t(tone.key)",
|
||||
"historicalSourceSha256": "0c772feb6bde8324676b0884aaf343283465c5cd3b3318128363063df4ea22ab",
|
||||
"reviewedSourceSha256": "aa3acbe472d34074a517a566c77983e7d95f8ec1df9ee37e47537ad96beffd0e",
|
||||
"status": "finite-key-domain-reviewed",
|
||||
"runtimeCoverage": "static control-flow review; no PDF metric or model rerun",
|
||||
"inventoryEntryIndex": 177
|
||||
},
|
||||
{
|
||||
"file": "job-tracker-ui/src/components/ApplicationChecklist.tsx",
|
||||
"historicalLine": 214,
|
||||
"expression": "t(`checklistItem_${token}`)",
|
||||
"historicalSourceSha256": "88fdcd24914cf074aedee72a94b0c420c96a16dfe7194142daf22ec0ad8370ff",
|
||||
"reviewedSourceSha256": "0f198e90559b30952cbf7d0f4973211e3fbffcbb183e9e4b4f2ee2e2a9d02f56",
|
||||
"status": "finite-key-domain-reviewed",
|
||||
"runtimeCoverage": "CHECKLIST_UNKNOWN_SYSTEM_KEYS.md; 37 focused cases; other finite labels statically reviewed",
|
||||
"ownerDependencies": [
|
||||
{
|
||||
"file": "job-tracker-ui/src/applicationWorkspace.ts",
|
||||
"sha256": "3b00a4fe16159bdb9603eeb37bfdf5e5eb9a87d7815227fa3aa2f0da6e4f232c"
|
||||
}
|
||||
],
|
||||
"inventoryEntryIndex": 15
|
||||
},
|
||||
{
|
||||
"file": "job-tracker-ui/src/components/ApplicationChecklist.tsx",
|
||||
"historicalLine": 215,
|
||||
"expression": "t(`checklistItem_${token}Description`)",
|
||||
"historicalSourceSha256": "88fdcd24914cf074aedee72a94b0c420c96a16dfe7194142daf22ec0ad8370ff",
|
||||
"reviewedSourceSha256": "0f198e90559b30952cbf7d0f4973211e3fbffcbb183e9e4b4f2ee2e2a9d02f56",
|
||||
"status": "finite-key-domain-reviewed",
|
||||
"runtimeCoverage": "CHECKLIST_UNKNOWN_SYSTEM_KEYS.md; 37 focused cases; other finite labels statically reviewed",
|
||||
"ownerDependencies": [
|
||||
{
|
||||
"file": "job-tracker-ui/src/applicationWorkspace.ts",
|
||||
"sha256": "3b00a4fe16159bdb9603eeb37bfdf5e5eb9a87d7815227fa3aa2f0da6e4f232c"
|
||||
}
|
||||
],
|
||||
"inventoryEntryIndex": 16
|
||||
},
|
||||
{
|
||||
"file": "job-tracker-ui/src/views/ApplicationWorkspacePage.tsx",
|
||||
"historicalLine": 392,
|
||||
"expression": "t(`checklistItem_${nextStepToken}` as any)",
|
||||
"historicalSourceSha256": "107b4db54ef15d88254e01bc404136b987755588c1d171b800c2a47f93488b50",
|
||||
"reviewedSourceSha256": "62c79d59ce31dccddefd70991db5fc26fcc84f0c58ca6219d0d36980db2050d7",
|
||||
"status": "finite-key-domain-reviewed",
|
||||
"runtimeCoverage": "CHECKLIST_UNKNOWN_SYSTEM_KEYS.md; 37 focused cases; other finite labels statically reviewed",
|
||||
"ownerDependencies": [
|
||||
{
|
||||
"file": "job-tracker-ui/src/applicationWorkspace.ts",
|
||||
"sha256": "3b00a4fe16159bdb9603eeb37bfdf5e5eb9a87d7815227fa3aa2f0da6e4f232c"
|
||||
}
|
||||
],
|
||||
"inventoryEntryIndex": 101
|
||||
},
|
||||
{
|
||||
"file": "job-tracker-ui/src/views/ApplicationWorkspacePage.tsx",
|
||||
"historicalLine": 395,
|
||||
"expression": "t(`checklistItem_${nextStepToken}Description` as any)",
|
||||
"historicalSourceSha256": "107b4db54ef15d88254e01bc404136b987755588c1d171b800c2a47f93488b50",
|
||||
"reviewedSourceSha256": "62c79d59ce31dccddefd70991db5fc26fcc84f0c58ca6219d0d36980db2050d7",
|
||||
"status": "finite-key-domain-reviewed",
|
||||
"runtimeCoverage": "CHECKLIST_UNKNOWN_SYSTEM_KEYS.md; 37 focused cases; other finite labels statically reviewed",
|
||||
"ownerDependencies": [
|
||||
{
|
||||
"file": "job-tracker-ui/src/applicationWorkspace.ts",
|
||||
"sha256": "3b00a4fe16159bdb9603eeb37bfdf5e5eb9a87d7815227fa3aa2f0da6e4f232c"
|
||||
}
|
||||
],
|
||||
"inventoryEntryIndex": 102
|
||||
},
|
||||
{
|
||||
"file": "job-tracker-ui/src/views/ApplicationWorkspacePage.tsx",
|
||||
"historicalLine": 505,
|
||||
"expression": "t(keys[section])",
|
||||
"historicalSourceSha256": "107b4db54ef15d88254e01bc404136b987755588c1d171b800c2a47f93488b50",
|
||||
"reviewedSourceSha256": "62c79d59ce31dccddefd70991db5fc26fcc84f0c58ca6219d0d36980db2050d7",
|
||||
"status": "finite-key-domain-reviewed",
|
||||
"runtimeCoverage": "CHECKLIST_UNKNOWN_SYSTEM_KEYS.md; 37 focused cases; other finite labels statically reviewed",
|
||||
"ownerDependencies": [
|
||||
{
|
||||
"file": "job-tracker-ui/src/applicationWorkspace.ts",
|
||||
"sha256": "3b00a4fe16159bdb9603eeb37bfdf5e5eb9a87d7815227fa3aa2f0da6e4f232c"
|
||||
}
|
||||
],
|
||||
"inventoryEntryIndex": 103
|
||||
},
|
||||
{
|
||||
"file": "job-tracker-ui/src/views/career/CareerEvidenceBank.tsx",
|
||||
"historicalLine": 83,
|
||||
"expression": "t(`careerEvidenceCategory_${value}` as \"careerEvidenceCategory_achievement\")",
|
||||
"historicalSourceSha256": "fc85ccfc1addd48af3a29bc263b089858765b2ac3ec7db3b66dedc55ddfab625",
|
||||
"reviewedSourceSha256": "51cab7289717c9f26006a9d34ac1f8aac9e09d19e549a3666a15adc41d5d4724",
|
||||
"status": "finite-key-domain-reviewed",
|
||||
"runtimeCoverage": "CHECKLIST_UNKNOWN_SYSTEM_KEYS.md; 37 focused cases; other finite labels statically reviewed",
|
||||
"inventoryEntryIndex": 175
|
||||
},
|
||||
{
|
||||
"inventoryEntryIndex": 2,
|
||||
"file": "job-tracker-ui/src/components/ApplicationAssets.tsx",
|
||||
"historicalLine": 104,
|
||||
"expression": "t(error.messageKey)",
|
||||
"historicalSourceSha256": "25216c80ef92d519baad9e428a0e77390150605c1a3529a4809819d120661f29",
|
||||
"reviewedSourceSha256": "b5f14b41de10474e2bcd709b91b1becb7b7db4aba021fba29e4e9e44a7a2947f",
|
||||
"status": "finite-key-domain-reviewed",
|
||||
"runtimeCoverage": "static state-constructor and own-property review; no admin actions, external mail or AI executed"
|
||||
},
|
||||
{
|
||||
"inventoryEntryIndex": 12,
|
||||
"file": "job-tracker-ui/src/components/ApplicationAssets.tsx",
|
||||
"historicalLine": 887,
|
||||
"expression": "t(error.messageKey)",
|
||||
"historicalSourceSha256": "25216c80ef92d519baad9e428a0e77390150605c1a3529a4809819d120661f29",
|
||||
"reviewedSourceSha256": "b5f14b41de10474e2bcd709b91b1becb7b7db4aba021fba29e4e9e44a7a2947f",
|
||||
"status": "finite-key-domain-reviewed",
|
||||
"runtimeCoverage": "static state-constructor and own-property review; no admin actions, external mail or AI executed"
|
||||
},
|
||||
{
|
||||
"inventoryEntryIndex": 97,
|
||||
"file": "job-tracker-ui/src/views/AdminSystemPage.tsx",
|
||||
"historicalLine": 333,
|
||||
"expression": "t(kind === \"status\" && status ? \"adminSystemRefreshFailed\" : readErrorKeys[kind])",
|
||||
"historicalSourceSha256": "1e76931739d779d9edb17e22846d16fffef7ebd1a0c27aebf740c2c46c79b3de",
|
||||
"reviewedSourceSha256": "64e85d9b13088b5229b6635674e9e6ff9ee6c4a62db7f66accb1dcddcedd16c0",
|
||||
"status": "finite-key-domain-reviewed",
|
||||
"runtimeCoverage": "static state-constructor and own-property review; no admin actions, external mail or AI executed"
|
||||
},
|
||||
{
|
||||
"inventoryEntryIndex": 98,
|
||||
"file": "job-tracker-ui/src/views/AdminSystemPage.tsx",
|
||||
"historicalLine": 448,
|
||||
"expression": "t(actionErrorKeys[actionError.kind])",
|
||||
"historicalSourceSha256": "1e76931739d779d9edb17e22846d16fffef7ebd1a0c27aebf740c2c46c79b3de",
|
||||
"reviewedSourceSha256": "64e85d9b13088b5229b6635674e9e6ff9ee6c4a62db7f66accb1dcddcedd16c0",
|
||||
"status": "finite-key-domain-reviewed",
|
||||
"runtimeCoverage": "static state-constructor and own-property review; no admin actions, external mail or AI executed"
|
||||
},
|
||||
{
|
||||
"inventoryEntryIndex": 99,
|
||||
"file": "job-tracker-ui/src/views/AdminSystemPage.tsx",
|
||||
"historicalLine": 449,
|
||||
"expression": "t(message)",
|
||||
"historicalSourceSha256": "1e76931739d779d9edb17e22846d16fffef7ebd1a0c27aebf740c2c46c79b3de",
|
||||
"reviewedSourceSha256": "64e85d9b13088b5229b6635674e9e6ff9ee6c4a62db7f66accb1dcddcedd16c0",
|
||||
"status": "finite-key-domain-reviewed",
|
||||
"runtimeCoverage": "static state-constructor and own-property review; no admin actions, external mail or AI executed"
|
||||
},
|
||||
{
|
||||
"inventoryEntryIndex": 104,
|
||||
"file": "job-tracker-ui/src/views/CareerProfilePage.tsx",
|
||||
"historicalLine": 508,
|
||||
"expression": "t(stageKeys[stage])",
|
||||
"historicalSourceSha256": "d8f302c2bd8b09544a41735b4d63818c2843ca5193f7b733a3e8447c828f181a",
|
||||
"reviewedSourceSha256": "190b8b0840fb57480985a1688160001a1e5e828639e5b632351740b6352da0b7",
|
||||
"status": "finite-key-domain-reviewed",
|
||||
"runtimeCoverage": "static state-constructor and own-property review; no admin actions, external mail or AI executed"
|
||||
},
|
||||
{
|
||||
"inventoryEntryIndex": 105,
|
||||
"file": "job-tracker-ui/src/views/CareerProfilePage.tsx",
|
||||
"historicalLine": 509,
|
||||
"expression": "t(importLabelKeys[value])",
|
||||
"historicalSourceSha256": "d8f302c2bd8b09544a41735b4d63818c2843ca5193f7b733a3e8447c828f181a",
|
||||
"reviewedSourceSha256": "190b8b0840fb57480985a1688160001a1e5e828639e5b632351740b6352da0b7",
|
||||
"status": "finite-key-domain-reviewed",
|
||||
"runtimeCoverage": "static state-constructor and own-property review; no admin actions, external mail or AI executed"
|
||||
},
|
||||
{
|
||||
"inventoryEntryIndex": 106,
|
||||
"file": "job-tracker-ui/src/views/CareerProfilePage.tsx",
|
||||
"historicalLine": 865,
|
||||
"expression": "t(runActionErrors[run.id].key)",
|
||||
"historicalSourceSha256": "d8f302c2bd8b09544a41735b4d63818c2843ca5193f7b733a3e8447c828f181a",
|
||||
"reviewedSourceSha256": "190b8b0840fb57480985a1688160001a1e5e828639e5b632351740b6352da0b7",
|
||||
"status": "finite-key-domain-reviewed",
|
||||
"runtimeCoverage": "static state-constructor and own-property review; no admin actions, external mail or AI executed"
|
||||
},
|
||||
{
|
||||
"inventoryEntryIndex": 153,
|
||||
"file": "job-tracker-ui/src/views/GmailReviewPage.tsx",
|
||||
"historicalLine": 231,
|
||||
"expression": "t(writeError.key)",
|
||||
"historicalSourceSha256": "3609ec12dd9619f7cbbd3541dcf2563a33e4ef3cb7cf9eab0cfc4a17a43d22d8",
|
||||
"reviewedSourceSha256": "5e87cad1c5f5118fdd6d62d3aae35b83b3ab10d8d60722ed18c1dbb4487f9890",
|
||||
"status": "finite-key-domain-reviewed",
|
||||
"runtimeCoverage": "static state-constructor and own-property review; no admin actions, external mail or AI executed"
|
||||
},
|
||||
{
|
||||
"inventoryEntryIndex": 154,
|
||||
"file": "job-tracker-ui/src/views/GmailReviewPage.tsx",
|
||||
"historicalLine": 231,
|
||||
"expression": "t(writeError.key)",
|
||||
"historicalSourceSha256": "3609ec12dd9619f7cbbd3541dcf2563a33e4ef3cb7cf9eab0cfc4a17a43d22d8",
|
||||
"reviewedSourceSha256": "5e87cad1c5f5118fdd6d62d3aae35b83b3ab10d8d60722ed18c1dbb4487f9890",
|
||||
"status": "finite-key-domain-reviewed",
|
||||
"runtimeCoverage": "static state-constructor and own-property review; no admin actions, external mail or AI executed"
|
||||
},
|
||||
{
|
||||
"inventoryEntryIndex": 155,
|
||||
"file": "job-tracker-ui/src/views/JobDiscoveryPage.tsx",
|
||||
"historicalLine": 229,
|
||||
"expression": "t(error ?? \"jobDiscoveryUnavailable\")",
|
||||
"historicalSourceSha256": "e15f5183fe6d41ecb7a53ec9806872a67f0d6ce683354d0abef53527bd397b94",
|
||||
"reviewedSourceSha256": "8055c95959b662b69f04f780993d4668e3907c53b445451c0981fa3a1436756f",
|
||||
"status": "finite-key-domain-reviewed",
|
||||
"runtimeCoverage": "static state-constructor and own-property review; no admin actions, external mail or AI executed"
|
||||
},
|
||||
{
|
||||
"inventoryEntryIndex": 156,
|
||||
"file": "job-tracker-ui/src/views/JobDiscoveryPage.tsx",
|
||||
"historicalLine": 230,
|
||||
"expression": "t(error)",
|
||||
"historicalSourceSha256": "e15f5183fe6d41ecb7a53ec9806872a67f0d6ce683354d0abef53527bd397b94",
|
||||
"reviewedSourceSha256": "8055c95959b662b69f04f780993d4668e3907c53b445451c0981fa3a1436756f",
|
||||
"status": "finite-key-domain-reviewed",
|
||||
"runtimeCoverage": "static state-constructor and own-property review; no admin actions, external mail or AI executed"
|
||||
},
|
||||
{
|
||||
"inventoryEntryIndex": 166,
|
||||
"file": "job-tracker-ui/src/views/OperationsPage.tsx",
|
||||
"historicalLine": 127,
|
||||
"expression": "t(taskKeys[task])",
|
||||
"historicalSourceSha256": "8cff1e08b2009ff683957849af71d6e76916a28ae218e647d9e3c04a12ad5f9b",
|
||||
"reviewedSourceSha256": "b35c793fd33dcd0638d47df2aa3bfb2926879a8fa709880983b64c1a1309bb98",
|
||||
"status": "finite-key-domain-reviewed",
|
||||
"runtimeCoverage": "existing Object.hasOwn guards statically reviewed; no service execution"
|
||||
},
|
||||
{
|
||||
"inventoryEntryIndex": 168,
|
||||
"file": "job-tracker-ui/src/views/OperationsPage.tsx",
|
||||
"historicalLine": 158,
|
||||
"expression": "t(statusKeys[operation.status])",
|
||||
"historicalSourceSha256": "8cff1e08b2009ff683957849af71d6e76916a28ae218e647d9e3c04a12ad5f9b",
|
||||
"reviewedSourceSha256": "b35c793fd33dcd0638d47df2aa3bfb2926879a8fa709880983b64c1a1309bb98",
|
||||
"status": "finite-key-domain-reviewed",
|
||||
"runtimeCoverage": "existing Object.hasOwn guards statically reviewed; no service execution"
|
||||
},
|
||||
{
|
||||
"inventoryEntryIndex": 183,
|
||||
"file": "job-tracker-ui/src/views/career/CvImportReview.tsx",
|
||||
"historicalLine": 114,
|
||||
"expression": "t(labelKeys[value])",
|
||||
"historicalSourceSha256": "bdecd17437d919a33d9deaa855262b1f1baf78b4a22eef0e88ac1fdbb5ebeda4",
|
||||
"reviewedSourceSha256": "dbbf0bcebd4fc46f55deaa6bb70a0abd37ecb0f01608335bcaf4de46e05f4a48",
|
||||
"status": "finite-key-domain-reviewed",
|
||||
"runtimeCoverage": "existing Object.hasOwn guards statically reviewed; no service execution"
|
||||
},
|
||||
{
|
||||
"inventoryEntryIndex": 184,
|
||||
"file": "job-tracker-ui/src/views/career/CvImportReview.tsx",
|
||||
"historicalLine": 165,
|
||||
"expression": "t(warningKeys[warning])",
|
||||
"historicalSourceSha256": "bdecd17437d919a33d9deaa855262b1f1baf78b4a22eef0e88ac1fdbb5ebeda4",
|
||||
"reviewedSourceSha256": "dbbf0bcebd4fc46f55deaa6bb70a0abd37ecb0f01608335bcaf4de46e05f4a48",
|
||||
"status": "finite-key-domain-reviewed",
|
||||
"runtimeCoverage": "existing Object.hasOwn guards statically reviewed; no service execution"
|
||||
},
|
||||
{
|
||||
"inventoryEntryIndex": 67,
|
||||
"file": "job-tracker-ui/src/components/InterviewPrep.tsx",
|
||||
"historicalLine": 505,
|
||||
"expression": "t(keys[category])",
|
||||
"historicalSourceSha256": "eadf345d3613ad867788f6a74a8fd1fbba508bb81ec7bc87fe54e4f66dadc69b",
|
||||
"reviewedSourceSha256": "ef8161cc982c9068d3c7eec80f7dd6ef565f05ba0b36bcf58e3b643285b22f0f",
|
||||
"status": "finite-key-domain-reviewed",
|
||||
"runtimeCoverage": "INTERVIEW_DOCUMENT_FALLBACKS.md; 41 full selected-suite tests, including 12 inherited-name/language cases"
|
||||
},
|
||||
{
|
||||
"inventoryEntryIndex": 138,
|
||||
"file": "job-tracker-ui/src/views/DocumentsPage.tsx",
|
||||
"historicalLine": 243,
|
||||
"expression": "t(({ resume: \"attachmentsPurposeResume\", \"cover-letter\": \"attachmentsPurposeCoverLetter\", portfolio: \"attachmentsPurposePortfolio\", \"case-study\": \"attachmentsPurposeCaseStudy\", certificate: \"attachmentsPurposeCertificate\" } as Record<string, TranslationKey>)[item.purpose.toLowerCase()] ?? \"attachmentsPurposeOther\")",
|
||||
"historicalSourceSha256": "fa53a826ebbdbc868c8b21a0387138c12611d3e2867de0fa0e5f6d8483471eb9",
|
||||
"reviewedSourceSha256": "0b9aaba2c102b4346b10386107b3822016b4f680bb9ab6b58c24ef80b74080fc",
|
||||
"status": "finite-key-domain-reviewed",
|
||||
"runtimeCoverage": "INTERVIEW_DOCUMENT_FALLBACKS.md; 41 full selected-suite tests, including 12 inherited-name/language cases"
|
||||
}
|
||||
],
|
||||
"limitations": [
|
||||
"key-domain review is not full translator context or native-language acceptance",
|
||||
"original inventory is retained as historical evidence",
|
||||
"reviewed hashes must be refreshed after relevant source changes"
|
||||
],
|
||||
"catalogueSha256": "ed99d129f8702181429e10ec02f65f734220409fcba4de51d0d77a0d60871ea4",
|
||||
"hashEncoding": "Reviewed text and inventory hashes use UTF-8 file bytes with CRLF normalized to LF; historicalSourceSha256 retains the original inventory encoding"
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
# Automated EN/Bokmål catalogue QA
|
||||
|
||||
2 November 2026. Added translation-catalogue.test.ts to the existing Jest suite. Reuses the current interpolation contract and the checks demonstrated by the historical Phase 9 localisation helper; that helper/report was not modified or overwritten.
|
||||
|
||||
Three automated invariants: equal English/Bokmål key sets; equal sets of current `{word}` substitution variables per message; no blank message values. Current resources contain 3,119 English and 3,119 Bokmål keys. These are resource counts, not thousands of test cases. Identical proper names/technical labels are allowed; machine equality does not determine whether natural-language copy is translated well.
|
||||
|
||||
PASSED: 10 tests across translation-catalogue, i18n-provider and locale-fetch-stability, zero failures/pending, native exit 0. This includes the three new global invariants and existing persistence/legacy alias/fetch-stability coverage. Scoped lint passed and full typechecking completed without errors. [Native report](../direct-roadmap/integration-evidence/locale-catalogue-native.json.gz). These three suites are separate from the 16-suite/195-test integration execution; do not represent them as a single fresh full-suite run. Runtime application source is unchanged from the passing integration production build; no build was repeated for a test-only addition.
|
||||
|
||||
Limits: current simple interpolation only, not a future ICU/plural engine; no every-string/frontend/backend completeness, native translation quality, human/device or European locale release acceptance. The 60 research locale candidates remain unshipped. Native terminology, market priorities, Montenegrin identity/canonicalisation and registry/migration decisions retain their documented gates.
|
||||
@@ -0,0 +1,13 @@
|
||||
# Error-state translation inputs
|
||||
|
||||
2 November 2026. Twelve historical call sites reviewed through local state constructors; no runtime implementation changed or privileged action executed.
|
||||
|
||||
- ApplicationAssets.tsx:104/887: AssetError.messageKey originates in the private assetError helper with literal/finite conditional arguments, or three explicit cover-AI source error constructors. Conflict status selects revisionConflict; API error text stays display data rather than a catalogue key. Shell is private to this module with AssetError props from these owners.
|
||||
- AdminSystemPage.tsx:333/448/449: ReadKind/ActionKind are bounded by four local read/action entry points; readNotice is called only with status/benchmark/maintenance/email. Error-key maps have fixed entries; success state is supplied only by four local literal runAction calls. API response bodies never supply kind/success keys. No maintenance/probe/email request was run by this review.
|
||||
- CareerProfilePage.tsx:508/509/865: stage/import-label maps already use Object.hasOwn with explicit generic or raw-text fallback. Run action errors are constructed from cancel/retry/accept/discard and conflict status, with fixed key literals; server error message remains data. No import processing or canonical profile mutation was executed.
|
||||
- GmailReviewPage.tsx:231 has two distinct translator calls, both fed by only three literal write-error constructors (save/sync/create). No real mail operation or provider access.
|
||||
- JobDiscoveryPage.tsx:229/230: error state receives only five literal keys from local catches, or null; the first call has a fixed unavailable fallback and the second is guarded by non-null state. No provider request or source grant implied.
|
||||
|
||||
All components obtain t from useI18n. Assertion verified 87 distinct relevant keys, including the import label/stage maps, in both catalogues. This is finite key/owner/control-flow review, not native translation quality, all message formatting or a security/operational pass.
|
||||
|
||||
Register schema 2 now uses immutable inventoryEntryIndex (bound to the original inventory hash) to distinguish the two identical Gmail expressions on the same line. All 74 supplemental indices are unique. Earlier file/line/expression fields remain for readability; they alone cannot identify same-line repeated calls. Reconciliation: 108 original + 74 supplemental = 182 resolved / 6 pending of 188.
|
||||
@@ -0,0 +1,29 @@
|
||||
# Finite owner-map review — 2 November 2026
|
||||
|
||||
Static source review resolves three further historical dynamic call sites; no application code changed.
|
||||
|
||||
| Call | Owner and key bounds | Result |
|
||||
| --- | --- | --- |
|
||||
| CoverLetterDocument.tsx:36, `t(fieldLabels[key])` | `detailFields` is a literal tuple of eight fields; typed fieldLabels maps to letterSenderName/Title/Email/Phone/Location, letterRecipient/Subject/Date; component obtains t from useI18n. | RESOLVED |
|
||||
| CoverLetterDocument.tsx:153, `t(fieldLabels[key])` | `contactFields` is the five-field literal subset; CopyLetterSnapshot obtains t from useI18n. User snapshot values remain interpolated data, never keys. | RESOLVED |
|
||||
| careerCompletenessLabels.ts:15, `t(key)` | Seven literal mapped TranslationKeys: profileCvCompletenessPersonal/Summary/Experience/Education/Skills/Projects/Languages. Unknown labels return verbatim. Both callers, ProfileCompleteness and CareerWorkspaceOverview, pass the useI18n translator. | RESOLVED |
|
||||
|
||||
Graph queries preceded source inspection. A local assertion verified all 15 distinct keys have definitions in both catalogues. This proves finite key coverage and translator ownership, not native translation quality or runtime acceptance. Historical call lines and reviewed source are unchanged by the attachment-title package.
|
||||
|
||||
Reconciliation: 188 historical dynamic calls; 108 previously resolved + 1 checklist category map + 3 here = 112 resolved / 76 pending. The four checklist system-key template calls remain pending. Do not rewrite user-provided contact fields or backend completeness labels merely to translate them.
|
||||
|
||||
Further review resolves CvTemplateGallery.tsx:33's three indexed calls (`labels[0]`, `[1]`, `[2]`). `templateLabels` is a nine-entry Map of typed, fixed three-key tuples; its 27 references contain 24 distinct keys, all asserted present in both catalogues. Calls occur only after a matching tuple was found for Bokmål. Unknown themes and English retain the backend theme metadata as their existing fallback. Gallery and preview-dialog callers obtain language/t from useI18n. Preserve historical theme identities and renderer versions; this review changes neither metadata policy nor rendering. No additional runtime test was required for this source-only review.
|
||||
|
||||
Latest reconciliation: 115 resolved / 73 pending (188 total). The earlier 112/76 count describes the preceding review checkpoint.
|
||||
|
||||
Dashboard follow-through resolves five additional sites: DashboardGrid.tsx:47/63, DashboardLayoutEditor.tsx:77, DashboardView.tsx:372 use the nine literal WIDGETS titleKeys; DashboardView.tsx:259 iterates the three literal table-heading keys. All 12 keys were asserted present in both catalogues; the components use useI18n. WidgetId is derived from WIDGETS; normalizeDashboardLayout discards unknown persisted identifiers and constructs widgets from the matching definition. This establishes the finite translation domain, not arbitrary forged prop safety or layout/device acceptance. Geometry, hidden positions, schema-2 persistence and revisions were not modified.
|
||||
|
||||
Current reconciled total: 120 resolved / 68 pending, still 188 historical dynamic calls. These static reviews do not close the broader every-string context, backend-message or native-language review requirements.
|
||||
|
||||
ApplicationIntelligence.tsx:367/373 review resolves two further sites. timelineCategoryLabel maps five fixed labels, with unknown categories returned as data; matchBandLabel admits only Strong/Partial/Low/Unknown before forming a key and returns unknown bands verbatim. All nine distinct catalogue keys were asserted present in both languages; caller components obtain t from useI18n. Current reconciliation: 122 resolved / 66 pending. This key-domain review does not assert native translation quality or live matching accuracy.
|
||||
|
||||
Follow-up runtime corrections are recorded in UNKNOWN_LABEL_FALLBACKS.md and PIPELINE_ALIAS_FALLBACK.md: inherited property names required own-property guards in the completeness/timeline helpers and pipeline alias normaliser. Their regression evidence supersedes the earlier unconditional static fallback claims. Pipeline's one historical call is now resolved, bringing the intermediate count to 123/65.
|
||||
|
||||
AdminProcessingPage.tsx:153/173/205 adds three source-resolved calls: task filter labels iterate Object.keys(tasks), excluding inherited properties; table headings use six literal keys; detail date labels use four literal tuple keys. useI18n supplies t. Eleven distinct catalogue keys for these domains, plus the ten pipeline label keys, were asserted present in both languages. Backend-derived status/stage/task/event/worker strings remain pending because their dictionary accesses need separate own-property and unknown-value review. Do not count those as covered by the safe literal/own-key iterators.
|
||||
|
||||
Latest reconciliation: 126 resolved / 62 pending, of 188 historical dynamic calls. The chronological counts above are historical checkpoints, not overlapping work to add again.
|
||||
@@ -0,0 +1,7 @@
|
||||
# Import-review and operation label guards
|
||||
|
||||
2 November 2026. Four unchanged sites reviewed: OperationsPage.tsx:127/158 and career/CvImportReview.tsx:114/165. The existing task/status and field/warning dictionaries are all guarded with Object.hasOwn before translation. Unknown task/field/warning text remains data; unknown operation status uses the existing underscore-to-space display fallback. Components obtain t from useI18n. No operation, import, provider, model or profile mutation was executed.
|
||||
|
||||
Every literal dictionary value was checked for definitions in both catalogues. These existing guards prevent inherited-property names from entering the translator; no new implementation was necessary. Source/control-flow review is not native-language, full import accuracy, notification delivery or integrated security acceptance.
|
||||
|
||||
Machine register: 108 original + 78 supplemental = 186 resolved / 2 pending of 188. Remaining sites are interview category and document attachment-purpose lookups; synthetic regressions are in progress, and neither is claimed fixed by this review.
|
||||
@@ -0,0 +1,11 @@
|
||||
# Interview category and document-purpose fallbacks
|
||||
|
||||
2 November 2026. Two confirmed functional defects: inherited Object-property names bypassed interview category raw-text fallback and document-purpose localized Other fallback. Synthetic EN/NB diagnostic run: ten failures, two passing lowercase-purpose controls, 29 unselected cases. This is not a prototype mutation or account-access finding.
|
||||
|
||||
Minimal fixes: Object.hasOwn in the existing interview category helper; a null-prototype object for the existing inline document-purpose map. Exact known labels, purpose lowercasing, existing unknown-value choices and all surrounding workflows remain intact. No role, API, CV/import acceptance, revision, model, provider, storage, database or final UI design changes.
|
||||
|
||||
GREEN: 41 tests across full interview-prep and documents-page suites, zero failures/pending, exit 0. Twelve new cases cover constructor/toString/__proto__ in EN/Bokmål, checking unknown category text and localized Other purpose. Existing cases protect normal interview/follow-up, document filtering/date/link/download and account-safety behavior. Full typecheck and four-file scoped lint passed, zero warnings. Native report: job-tracker-ui/.artifacts/interview-document-fallbacks.json. All 13 dictionary/fallback keys verified in both catalogues. No real model, mail or provider operation.
|
||||
|
||||
Rollback: revert the two lookup changes and twelve test cases; no data conversion or recovery action. Existing labels/history/content are not rewritten. Final integrated security/browser/build qualification remains separately recorded; this test report is not a full application pass.
|
||||
|
||||
The historical 188-call census is now completely accounted for: 108 prior finite-branch sites plus 80 individually reviewed supplemental sites, no overlapping inventory indices, zero pending finite key domains. Register schema 2 distinguishes same-line repeated calls. This does NOT mean complete I18N-00, every-string sensitivity/context, backend-message extraction, plural/select architecture, European locale publication, native translation, accessibility or full runtime coverage is accepted. New code and changed owner dependencies require renewed review. Preserve the original inventory as immutable historical evidence.
|
||||
@@ -0,0 +1,11 @@
|
||||
# Landing and document-index key domains — 2 November 2026
|
||||
|
||||
Eleven additional sites reviewed without source changes. Both pages obtain t from useI18n; no UI/market/document preference or route behavior changed.
|
||||
|
||||
LandingPage.tsx:87/172/173/190/191: FEATURES and STEPS are six-entry literal arrays with fixed title/body keys (24 distinct keys). PUBLIC_PLANS contains Free with five features and Pro with six; the indexed key expression therefore currently yields 11 existing keys. All 35 are defined in both languages. The machine register binds planCatalog.ts as an owner dependency, since adding/reordering features requires renewed key/copy review even if LandingPage itself is unchanged. This resolves key existence, not the accuracy, entitlement, deployment or marketing approval of existing public claims. New public-site content remains separately gated and unpublished.
|
||||
|
||||
DocumentsPage.tsx:222/225/231/264/265 (two expressions at 265): date label is a four-value literal conditional; state/type lookups use finite arrays with explicit fixed-key fallbacks; filter title/option parameters have only three local callers using the literal types/states/visibility arrays. All 22 distinct keys are defined in both catalogues. Unknown state/type objects cannot introduce a catalogue key through array find. Date values, application names and document content remain data. The attachment-purpose inline object lookup at line 243 remains pending; do not assume it has safe arbitrary-key behavior.
|
||||
|
||||
Local assertion checked all 57 distinct keys have definitions in both catalogues, and confirmed actual 5/6 plan feature lengths. No browser or production build rerun for unchanged source-only review. Full native language, plural/formatting, accessibility and feature availability remain separate qualifications.
|
||||
|
||||
Register: 108 originally resolved + 48 individually matched supplemental sites = 156 resolved / 32 pending of 188. Catalogue/source/dependency hashes bind this checkpoint. No call is counted twice.
|
||||
@@ -0,0 +1,11 @@
|
||||
# Supported-language control naming
|
||||
|
||||
2 November 2026. Existing compact AppShell control now displays NB for Bokmål, accessible native name Norsk bokmål, and lang=nb. English retains EN/English with lang=en. This distinguishes written-language identity from Norway's NO country code. Native self-names are intentional invariant labels, not ordinary untranslated interface prose.
|
||||
|
||||
The persisted UI value remains nb; I18nProvider still handles legacy aliases and server nb-NO. No document/ad-language preference, route, country support, new locale, navigation layout or final design implementation changed. Both buttons retain their existing handlers, aria-pressed state and two-character badge width.
|
||||
|
||||
RED: new shell test failed against the old Norsk/NO label. GREEN: 17 tests in app-shell-navigation, app-shell-notifications and i18n-provider, zero failures/pending, native exit 0. New case checks both language attributes, native name, badge, pressed state and persisted nb selection. Scoped lint and full typecheck passed. Existing language-persistence cases overlap the preceding catalogue QA run; do not add the totals as disjoint tests. Native local report: job-tracker-ui/.artifacts/language-control-qa.json. Native-device/AT/browser qualification remains distinct.
|
||||
|
||||
Literal review also checked JobFlowBar's Flow label. Bounded src search found only its declaration; it has a separate local status normaliser rather than importing the shared pipeline helper. No deletion candidate is established and no inactive/compatibility component was changed solely to reduce an inventory count. Other formatting, admin labels and backend literals remain open.
|
||||
|
||||
Fresh production static build after the language-control patch PASSED, native exit 0, including TypeScript and all three generated pages. This is development build evidence, not browser/native AT or production qualification. Native test evidence is archived at ../direct-roadmap/integration-evidence/language-control-native.json.gz.
|
||||
@@ -0,0 +1,11 @@
|
||||
# Mobile build metadata localisation
|
||||
|
||||
3 November 2026. Independent bounded UI-language fix on `codex/i18n-build-metadata`, based on accepted integration `d3d338376444b8abdcaf7200f682faa3daf1ad10`. The existing i18n worktree was reused; original codex/i18n-accessible-labels ref remains4172c23d. This branch does not include the newer A3 foundation/navigation increments and must not replace their tree wholesale.
|
||||
|
||||
Defect reproduced: in the Bokmål mobile account menu, the version was translated but the revision line remained literal `commit abc1234`, while the existing catalogue already provides `applicationVersionCommit` with `revisjon`. The new regression passed for English and failed for Bokmål before the fix.
|
||||
|
||||
The existing AppShell now uses the existing combined localised version/revision message in that menu, retaining the version-only fallback when no commit was supplied. Caller-controlled admin metadata visibility is unchanged. No new keys, enabled locales, provider/model operation, API, data model or physical document changes. Historical188 dynamic-call reviews are not reopened or recounted; AppShell is absent from that resolution register. This is a static literal correction, not complete European localisation.
|
||||
|
||||
Validation: 24 targeted tests in five suites PASSED (new EN/NB commit and version-only menu checks plus existing metadata/visibility, mobile readiness, catalogue and language-provider checks). Typecheck, scoped zero-warning ESLint and a fresh static production build PASSED. An initial test used an unsupported Testing Library `exact` role option; removed it, retaining exact string-name matching. The failed intermediate typecheck/build were superseded by the final successful run. Native Jest report: evidence/mobile-build-metadata/TESTS.json. No fresh browser/native-device, provider, backend or integrated security qualification is claimed for this separate branch.
|
||||
|
||||
Integration requirement: preserve pending navigation review artifact992608c7. When the next relevant implementation entry is authorised, port only this small AppShell hunk and its regression test onto the reconciled A3 branch, then run combined navigation/metadata/language checks and build as appropriate. Do not cherry-pick older branch application/theme files or alter the original frozen translation register. No main merge or deployment.
|
||||
@@ -0,0 +1,11 @@
|
||||
# Pipeline alias fallback — 2 November 2026
|
||||
|
||||
CONFIRMED functional defect: normalizeStatus('constructor') returned the inherited Object function and '__proto__' returned an object instead of the declared pipeline status or Other. statusLabel could consequently lose a custom status. No prototype mutation, account access or persisted-data corruption is asserted.
|
||||
|
||||
Minimal fix: only accept own properties of the existing ALIASES map. Existing trimming, case-insensitive canonical stages, known aliases, empty-as-Applied and custom-as-Other behavior are retained. Imported shared-helper callers reviewed here are KanbanBoard and ApplicationWorkspacePage. Correction: JobFlowBar has a separate local normaliser; the earlier name-based caller search incorrectly included it. That component was not changed. No statuses or stored records were renamed; no routes, migrations or dependencies changed.
|
||||
|
||||
RED diagnostic: constructor and __proto__ cases failed; toString control passed because the input is lowercased. Eleven unrelated cases were not selected in that diagnostic run. GREEN final: pipeline and grouped-board suites, 29 tests, zero failures/pending, native exit 0. New cases verify raw custom labels bypass translation; existing cases cover aliases, group membership/order, valid stage labels and board interactions. Scoped lint and full typecheck passed. Native ignored report: job-tracker-ui/.artifacts/pipeline-alias-fallback.json.
|
||||
|
||||
This resolves historical pipeline.ts:149 `t(LABEL_KEYS[normalized])`: the canonical result is one of the ten explicit LABEL_KEYS or Other, which returns raw status. The original implementation's assumed finite return domain was not true for inherited names. Latest dynamic review count: 123 resolved / 65 pending of 188. Full catalogue/native-language context acceptance is separate.
|
||||
|
||||
Rollback: revert the one-line guard and regression additions. Production build from the preceding label/session package predates this patch and is not claimed as a fresh pipeline build. Final integrated browser/security qualification remains open.
|
||||
@@ -0,0 +1,13 @@
|
||||
# Processing-monitor translation fallbacks — 2 November 2026
|
||||
|
||||
CONFIRMED functional defect: runtime status/stage/task/event/worker names matching inherited Object properties bypassed existing unknown-value fallbacks. Six EN/Bokmål cases using constructor, toString and __proto__ failed before the fix. No prototype mutation, privilege escalation or backend validation bypass is asserted.
|
||||
|
||||
Minimal shared fix: the five existing label dictionaries now use null-prototype objects, retaining their exact entries and Record typing. All callers, Object.keys filter controls and existing fallback expressions remain intact. No auth/role, API, polling, account-isolation, queue, model or production behavior changed. Known fields translate normally; unknown names reach the existing localized Unknown/Other operation/Unregistered worker/Not recorded labels.
|
||||
|
||||
PASSED: all 17 admin-processing-page tests, zero failures/pending, native exit 0. Six new cases exercise all five map domains, open the collapsed worker-details section, then check timeline event/status/stage fallbacks; eleven existing cases cover normal monitor workflows and safety. An intermediate rerun failed only because the new worker-label visibility assertion inspected a closed details element; the test now opens its summary through the normal UI. That run is not counted as passing or added to the final total.
|
||||
|
||||
PASSED: full typecheck and scoped two-file ESLint, native exits 0. Thirty-eight distinct map/fallback keys asserted present in both catalogues. Local native report: job-tracker-ui/.artifacts/processing-label-fallbacks.json. AST-only graph update required after code edits; keep generated graph separate from the implementation commit. Full build/browser and final integrated security acceptance are not claimed for this patch.
|
||||
|
||||
Five historical call sites resolved: AdminProcessingPage.tsx:130/131/175/191/212. Machine register binds each expression and reviewed source hash: 131 resolved / 57 pending of 188. The earlier safe map iterators retain their coverage with updated source hashes. This is key-domain/fallback evidence, not complete locale or native-language acceptance.
|
||||
|
||||
Rollback: revert the five dictionary constructions and six regression cases; no data migration or restoration needed. Continue remaining owner-map review; preserve unapproved final design and live/security/release gates.
|
||||
@@ -0,0 +1,10 @@
|
||||
# Reminder and interview key review — 2 November 2026
|
||||
|
||||
Five additional historical dynamic call sites resolved by source review; no implementation or runtime inference changed.
|
||||
|
||||
- InterviewPrep.tsx:236/261/285: INTERVIEW_AI_FOCUS is a literal five-entry array. The selected value uses find plus a guaranteed first-entry fallback; menu labels iterate the same array. All five labelKeys are fixed catalogue keys. InterviewAiAssistant obtains t from useI18n. UI language and selected generated-content language remain separate; resolving these labels does not enable AI or prove semantic output quality.
|
||||
- RemindersView.tsx:35/38: generatedReasons is a Map with seven fixed catalogue values; generatedDayReasons has four literal key/regex pairs. Map.get guards the direct lookup; only anchored numeric-day matches interpolate the days placeholder. Unknown reason text returns unchanged as data. The supplied translator is the useI18n translator. Map semantics do not admit inherited Object-property keys.
|
||||
|
||||
All 16 distinct keys were asserted present in both catalogues. This proves finite key coverage and translator ownership, not grammar/native review, all every-string context, plural quality or notification delivery. European plural/formatting architecture remains separately gated; no existing working translation was rewritten. No source edit, live model/provider call, paid scan or duplicate regression rerun was needed for this static review.
|
||||
|
||||
Machine register: 108 original resolved sites + 28 individually recorded supplemental sites = 136 resolved / 52 pending of 188. Source hashes and exact historical expressions are bound in DYNAMIC_RESOLUTION_REGISTER.json. Continue unresolved category/asset/import maps and backend-owned keys; never treat this count as complete i18n acceptance.
|
||||
@@ -0,0 +1,11 @@
|
||||
# Session-change message localisation — 2 November 2026
|
||||
|
||||
Implemented in the existing App invalidation branch. Reuses the existing `sessionChangedCleared` English/Bokmål catalogue message. The canonical document language (`nb-NO`, set by I18nProvider) selects Bokmål; other values safely select English. Reading it occurs only in the invalidated client branch. No provider, hook, storage access, request, dialog or private callback is retained to obtain the message.
|
||||
|
||||
Callers: root App renders Application only while valid; invalidation replaces it with a main alert and preserves the existing passive redirect to /login?sessionChanged=1. I18nProvider already publishes the current UI language to the document; generated-content language is unrelated. All routes, auth/CSRF/context tokens, abort logic and provider teardown remain unchanged. No new translation key or dependency.
|
||||
|
||||
RED: two new root-render tests failed against the previous literal English alert. PASSED after patch: 17 tests in session-boundary-message.test.tsx and session-boundary.test.ts, zero failures/pending, exit 0. New cases verify EN/NB feedback outside the private provider tree and zero API requests. Existing cases exercise cross-tab/cookie invalidation, abort/stale callbacks and session-context handling. These are local Jest/DOM tests; jsdom navigation is not browser redirect qualification.
|
||||
|
||||
PASSED: full TypeScript typecheck; scoped ESLint of App.tsx and the new test, zero warnings. Local ignored native Jest result: job-tracker-ui/.artifacts/session-boundary-message.json. No fresh full build/browser or complete security acceptance claimed. Rollback: revert the two source/test files in this package; no data changes. The attachment-label fix remains independently preserved.
|
||||
|
||||
The original literal-inventory App.tsx entry is now implemented; the inventory remains a historical snapshot. Final integrated security regression must run after relevant application changes are complete.
|
||||
@@ -0,0 +1,15 @@
|
||||
# Unknown translation-map labels — 2 November 2026
|
||||
|
||||
CONFIRMED functional defects, repaired locally with synthetic regressions: Career Profile completeness and application timeline category helpers used ordinary object property lookup. Unknown labels matching inherited Object properties (`constructor`, `toString`, `__proto__`) were incorrectly sent to the translator, losing the original text and producing missing visible/accessible labels. This is not a prototype-pollution or account-access finding; no such impact is claimed.
|
||||
|
||||
Minimal fix: Object.hasOwn guards in the two existing helpers. Known keys still translate normally, other strings remain data. Callers: ProfileCompleteness and CareerWorkspaceOverview; ApplicationTimeline. No API, persisted profile/category, UI language preference, generated-content language or revision behavior changes; no dependencies added.
|
||||
|
||||
RED: three inherited-name Career Profile cases failed (two known/custom control cases passed); three timeline-category cases failed before the patch (11 unselected cases were skipped in that diagnostic run). GREEN final combined execution: 41 tests across four suites, zero failures/pending, native exit 0: career-completeness-labels, career-history-view, career-workspace-page and application-intelligence. Do not add the overlapping earlier 27-case run to this total. Full typecheck and scoped four-file ESLint passed, zero warnings.
|
||||
|
||||
Native ignored JSON: job-tracker-ui/.artifacts/translation-map-fallbacks.json. Known-key test checks the translated catalogue key; timeline tests verify accessible button names for all three inherited-name canaries. No production or live provider/model used. Full integrated security testing remains deferred until relevant application changes are complete.
|
||||
|
||||
Correction to earlier static review: finite literal-key coverage alone did not prove the stated unknown-label fallback for these ordinary object maps. These regressions now verify it. The checklist category helper's current caller iterates CHECKLIST_CATEGORIES, so arbitrary unknown categories never reach its lookup; no speculative checklist change was made. Other maps with external keys, including processing-monitor maps, still need equivalent reachability/fallback review. Dynamic-call total remains 122 resolved / 66 pending; this remediation is not another resolved call count.
|
||||
|
||||
Rollback: revert the two helper lines and associated tests only; no data rollback needed. Remaining limits: no claim of native-language quality, full WCAG, all map coverage or final integrated security acceptance.
|
||||
|
||||
Final build: Next.js 16.4.1 static production build PASSED, exit 0, including TypeScript and all three generated pages. This also builds the session-message and preceding attachment-label fixes on this branch. API build-time base was local; no deployment or live service validation. Sanitized native reports are retained in evidence/translation-map-fallbacks.json.gz and evidence/session-boundary-message.json.gz (41 and 17 disjoint selected tests respectively).
|
||||
Binary file not shown.
Binary file not shown.
@@ -0,0 +1,24 @@
|
||||
{
|
||||
"recordedAtUtc": "2026-11-03T07:52:44.745521+00:00",
|
||||
"base": "d3d338376444b8abdcaf7200f682faa3daf1ad10",
|
||||
"policy": "UTF8 text/JSON SHA-256 after LF normalisation",
|
||||
"sources": {
|
||||
"job-tracker-ui/src/layout/AppShell.tsx": "603afbe21d854ec4af7b17ec75a58cfdd65cc053e72d63769d20df7a81c7acc3",
|
||||
"job-tracker-ui/src/build-metadata-localisation.test.tsx": "065c5550a18f7b3c7dca9bbb26c5564a53a53eaf389e7c9695596fcbb2c06f6e",
|
||||
"job-tracker-ui/src/i18n/translations.ts": "ed99d129f8702181429e10ec02f65f734220409fcba4de51d0d77a0d60871ea4",
|
||||
"job-tracker-ui/package.json": "3745394e406cefa40d30a87e840bccb359be147bac6ffba736e2ae90898a8626",
|
||||
"job-tracker-ui/package-lock.json": "bf31e90d7af03e8af059db2aaf893925b9e8881a30a1688034ed88ef45d4fcab"
|
||||
},
|
||||
"testReport": "1c7fb362460f2475fb4a782e26b56d1ee112595c3883cd6294a5b7ac6d72dd15",
|
||||
"validation": {
|
||||
"tests": "24 passed,5 suites",
|
||||
"typecheck": "exit0",
|
||||
"scopedLint": "exit0",
|
||||
"productionBuild": "exit0"
|
||||
},
|
||||
"limits": [
|
||||
"no fresh browser/native acceptance",
|
||||
"not combined with pending A3 navigation review992608c7",
|
||||
"188 historical dynamic-call review remains unchanged"
|
||||
]
|
||||
}
|
||||
File diff suppressed because one or more lines are too long
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -1,9 +1,5 @@
|
||||
# P10-05 — Acceptance reconciliation (OPEN)
|
||||
|
||||
3 November2026 reconciliation: parsed all four retained backend TRX artifacts and the frontend native JSON. **103 distinct historical backend cases**, zero case overlap/failure/skip; **92 historical frontend tests/5 suites** passed. [Machine reconciliation](p10-04-evidence/EVIDENCE_RECONCILIATION.json) retains uncompressed artifact hashes and counters. This is fresh evidence inspection, not fresh test execution. Application source under job-tracker-ui/src, JobTrackerApi and tools has no diff from the published cleanup checkpoint78f7396a to this branch's current documentation checkpoints.
|
||||
|
||||
Final A3 design/implementation approval is now received; dashboard and navigation milestone reviews are also accepted. A3 application-tracking implementation98e9502a is published separately and awaits its own Gate F. None of those UI branches, independent localisation fixes, or their selected test counts is integrated into this frozen cleanup branch or substituted for complete Phase10 qualification. Independent audit/preservation closure and the required environment/human qualifications remain open.
|
||||
|
||||
2 November 2026. This is an acceptance work register, not final acceptance. P10-01 CLEAN-20 is the only implemented deletion. P10-02/03 retain reviews found no additional proven-safe candidate. No further cleanup is authorised or needed merely to populate a checkpoint.
|
||||
|
||||
## Evidence applicability
|
||||
@@ -15,7 +11,7 @@ Fresh integrity check at continuation from 2a4acc17: all 263 indexed TEST_EVIDEN
|
||||
| Cleanup eligibility | CLEAN-20 blob/callers and narrow approval recorded in P10-00/01 | No additional deletion proven |
|
||||
| Frontend types/lint/build | PASSED fresh for CSS deletion; P10-01 | Full-suite execution is not represented by these checks |
|
||||
| Focused browser EN/NB/theme/responsive | PASSED five selected cases; P10-01 | Canary is not full browser regression or device acceptance |
|
||||
| Backend document/data contracts | PASSED 103 distinct selected historical cases, including14 attachment cases; P10-04 and3 November reconciliation | Not complete backend regression; no fresh execution in this reconciliation |
|
||||
| Backend document/data contracts | PASSED 89 selected cases; P10-04 | Not complete backend regression |
|
||||
| Frontend document workflows | PASSED 92 selected tests; P10-04 | Not complete frontend regression |
|
||||
| Routes/capabilities | Existing 34-route and 57-group reconciliation retained | 56 PARTIAL / one DEFERRED is not 57 accepted groups; independent closure review pending |
|
||||
| Historical CV/document/PDF | Accepted source/fixture-bound evidence retained; affected document contracts freshly checked | No fresh physical/PDF visual metric acceptance; unchanged metrics must not be reopened without affected change |
|
||||
@@ -27,7 +23,7 @@ Fresh integrity check at continuation from 2a4acc17: all 263 indexed TEST_EVIDEN
|
||||
|
||||
- CLEAN-20 implementation: locally validated and published; no further code cleanup proposed.
|
||||
- Phase 10 completion: OPEN; full acceptance is not established by targeted counts or this report.
|
||||
- Redesign completion and post-redesign Product Review acceptance: OPEN; final A3 design is approved and staged implementation is underway, with separate milestone and integrated qualification gates.
|
||||
- Redesign completion and post-redesign Product Review acceptance: OPEN; new full-application design also requires final owner approval.
|
||||
- Independent product/research/i18n/security offline work: may continue under the owner's direct parallel-work authorisation. Do not claim upstream acceptance or integrated release qualification for isolated branches.
|
||||
- Production release: NO-GO. No merge or deployment authorised.
|
||||
|
||||
|
||||
@@ -1,112 +0,0 @@
|
||||
{
|
||||
"reviewDate": "2026-11-03",
|
||||
"kind": "historical evidence reconciliation, not fresh tests",
|
||||
"backendReports": [
|
||||
{
|
||||
"file": "attachment-ownership-and-storage.trx.gz",
|
||||
"uncompressedSha256": "b589ad1139cb200d9de64b863d65e3304cea0230eda55d89476e5f79347fe84a",
|
||||
"cases": 14,
|
||||
"counters": {
|
||||
"total": "14",
|
||||
"executed": "14",
|
||||
"passed": "14",
|
||||
"failed": "0",
|
||||
"error": "0",
|
||||
"timeout": "0",
|
||||
"aborted": "0",
|
||||
"inconclusive": "0",
|
||||
"passedButRunAborted": "0",
|
||||
"notRunnable": "0",
|
||||
"notExecuted": "0",
|
||||
"disconnected": "0",
|
||||
"warning": "0",
|
||||
"completed": "0",
|
||||
"inProgress": "0",
|
||||
"pending": "0"
|
||||
}
|
||||
},
|
||||
{
|
||||
"file": "document-contracts.trx.gz",
|
||||
"uncompressedSha256": "692a0fe8016140c3198e76e6b3c1d56f438d80390666bc7f1b2dc06b4ac4ead5",
|
||||
"cases": 27,
|
||||
"counters": {
|
||||
"total": "27",
|
||||
"executed": "27",
|
||||
"passed": "27",
|
||||
"failed": "0",
|
||||
"error": "0",
|
||||
"timeout": "0",
|
||||
"aborted": "0",
|
||||
"inconclusive": "0",
|
||||
"passedButRunAborted": "0",
|
||||
"notRunnable": "0",
|
||||
"notExecuted": "0",
|
||||
"disconnected": "0",
|
||||
"warning": "0",
|
||||
"completed": "0",
|
||||
"inProgress": "0",
|
||||
"pending": "0"
|
||||
}
|
||||
},
|
||||
{
|
||||
"file": "p10-04-import-compatibility.trx.gz",
|
||||
"uncompressedSha256": "844cd54ff382bff0d48429336f8588ab010f0c72ea255ca02fe300b1561dc513",
|
||||
"cases": 36,
|
||||
"counters": {
|
||||
"total": "36",
|
||||
"executed": "36",
|
||||
"passed": "36",
|
||||
"failed": "0",
|
||||
"error": "0",
|
||||
"timeout": "0",
|
||||
"aborted": "0",
|
||||
"inconclusive": "0",
|
||||
"passedButRunAborted": "0",
|
||||
"notRunnable": "0",
|
||||
"notExecuted": "0",
|
||||
"disconnected": "0",
|
||||
"warning": "0",
|
||||
"completed": "0",
|
||||
"inProgress": "0",
|
||||
"pending": "0"
|
||||
}
|
||||
},
|
||||
{
|
||||
"file": "p10-04-local-data-compatibility.trx.gz",
|
||||
"uncompressedSha256": "1ac55913fdc3b705afbed27829fb280bef08d33c62fa26faa2c04e23c0c95908",
|
||||
"cases": 26,
|
||||
"counters": {
|
||||
"total": "26",
|
||||
"executed": "26",
|
||||
"passed": "26",
|
||||
"failed": "0",
|
||||
"error": "0",
|
||||
"timeout": "0",
|
||||
"aborted": "0",
|
||||
"inconclusive": "0",
|
||||
"passedButRunAborted": "0",
|
||||
"notRunnable": "0",
|
||||
"notExecuted": "0",
|
||||
"disconnected": "0",
|
||||
"warning": "0",
|
||||
"completed": "0",
|
||||
"inProgress": "0",
|
||||
"pending": "0"
|
||||
}
|
||||
}
|
||||
],
|
||||
"backendDistinctCases": 103,
|
||||
"overlaps": [],
|
||||
"frontend": {
|
||||
"numTotalTests": 92,
|
||||
"numPassedTests": 92,
|
||||
"numFailedTests": 0,
|
||||
"numPendingTests": 0,
|
||||
"numTotalTestSuites": 5
|
||||
},
|
||||
"notIntegrated": [
|
||||
"A3-IM03",
|
||||
"A3-IM04",
|
||||
"ca519cac document-date fix"
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,22 @@
|
||||
# Preliminary release discovery
|
||||
|
||||
2026-11-02. Branch `planning/release-readiness-discovery`; accepted conditional development baseline `5cb903b989742b7a96cb22ddf4c0e24993b18980`. Stage 1 IN_PROGRESS. No release candidate nominated. Production NO-GO. This report records source inspection and a bounded offline check, not full release qualification.
|
||||
|
||||
| Component / inspected owner | Dependency / failure boundary | Required release evidence |
|
||||
| --- | --- | --- |
|
||||
| `job-tracker-ui/package.json`, `Dockerfile`, `nginx.conf.template` | Next static export, React/MUI and React Router; nginx serves `out`, proxies `/api/`, `/health`, `/ready`; configured host and forwarded-header handling | Exact build/image, browser journeys and deployed proxy/TLS identity |
|
||||
| `JobTrackerApi/Program.cs`, `JobTrackerApi.csproj` | net9.0, EF 9.0.14, Pomelo 9.0.0; authentication/authorization then rate limiting/session middleware and controllers | Endpoint-by-endpoint ownership/session/CSRF/error tests; source registration alone is not security proof |
|
||||
| `JobTrackerApi/Data/DatabaseConfiguration.cs` | Defaults to MariaDB; missing connection throws; SQLite requires explicit transitional selection | Actual MariaDB migration/upgrade/rollback and preservation evidence; retain legacy paths |
|
||||
| `docker-compose.database.yml` | Development persistent volume and separate integration tmpfs service; MariaDB 12.2.2 pinned digest; loopback ports | Isolated provider tests; no claim of equality with production |
|
||||
| Career/CV domain and PDF | Program registers CareerProfileService, ApplicationAssetsService, CV/letter renderers and Playwright exporter | Canonical facts, null-as-inherit, revisions, historical artifacts and physical print remain separate contracts |
|
||||
| Background services | Program registers backup, rules, reminders, saved search, export, enrichment, summarizer probe, AI operation, retention, email recovery and account deletion workers | Verify configuration, failure recovery and tenant isolation for enabled workers; registration is not runtime activation |
|
||||
| Auth/mail/provider integrations | Architecture documents Google/Microsoft identity, Gmail/Graph/IMAP/SMTP, NAV, optional translation, local/external AI, Stripe | Synthetic local tests separate from licensed/provider/account delivery and consent |
|
||||
| `.gitea/workflows/ci-deploy.yml` | Test pipeline; deployment limited by source condition to push on `refs/heads/main` | Fresh hosted artifact/commit/runner evidence; development branch push is not hosted qualification |
|
||||
| `.gitea/workflows/mariadb-integration.yml` | Isolated runner label, explicit initial exit-1 isolation gate | Operator isolation evidence and authorised workflow review before enabling; do not remove gate during discovery |
|
||||
| Existing backup/deployment runbooks | Database, attachments/CV artifacts, keys and deletion tombstones; code rollback differs from data restore | Disposable restore with independent content/decryption/deletion checks; approved RPO/RTO and failure rehearsal |
|
||||
|
||||
Public boundary currently inspected: nginx host routing, `/health`, `/ready`, `/api/`; API controllers are mapped but a complete anonymous/authenticated endpoint census is still PENDING. External mail/job/AI requests, uploaded documents, browser credentials, database records and stored artifacts are separate trust boundaries. No live endpoints, Docker engines, databases, credentials, models or production services were accessed.
|
||||
|
||||
Local development, test and production are not interchangeable: integration uses a generated project and disposable service; production needs the external network, server-side environment, actual ingress and operator controls. Current architecture/runbooks describe these differences; exact intended staging/production configuration and image identity remain unverified.
|
||||
|
||||
The latest handoff's source-bound PDF metric/visual approvals supersede the older acceptance paragraph describing unchanged S01 coordinate failures. They are preserved for the approved development scope. Physical print, device, AT and language review remain open. No export was rerun because no renderer/font/fixture/application source changed.
|
||||
@@ -0,0 +1,11 @@
|
||||
# Discovery baseline and actual checks
|
||||
|
||||
Date 2026-11-02. Source `5cb903b989742b7a96cb22ddf4c0e24993b18980`; application freeze `ba04d817fed26d659bfa2a56b089d6cac851dc34`. No accepted post-roadmap release candidate, build identifier or release image exists in this discovery checkpoint.
|
||||
|
||||
Fresh check: `rtk proxy python scripts/test-mariadb-integration.py` exited 0; **5 tests passed** in 0.030 seconds. This existing offline suite mocks subprocess execution. The printed cleanup failure/exit 17 and setup error/exit 1 are intentional negative-test outcomes asserted by the suite, not a real container failure. No MariaDB/Docker execution occurred. This proves five runner guards, not database behavior, hosted isolation or a full regression.
|
||||
|
||||
Read-only source checks confirmed the MariaDB default/missing-connection fail-closed behavior and the hosted workflow's explicit isolation blocker. Refer to SYSTEM_INVENTORY for inspected paths. `git diff --check` is a documentation hygiene check, not product qualification.
|
||||
|
||||
Historical test totals, PDF exports, security scans and provider runs remain attributed to their original evidence. They are not fresh runs here. `docs/automation/handoffs/pre-phase10/FINAL_DEVELOPMENT_ENTRY.md` records the latest approved unchanged-source applicability and narrow PDF metric/visual closure. Direct chat does not adopt or activate its historical autonomous-controller instructions.
|
||||
|
||||
NOT RUN: full backend/frontend/browser/Python/provider suites, builds, container validation, security scan/advisory refresh, performance, native review, deployment smoke, restore or rollback rehearsal. These require the actual release-stage source/environment and their own applicable gates. Discovery does not mark any mandatory release gate PASS merely because historical tests exist.
|
||||
@@ -0,0 +1,36 @@
|
||||
# Recovery implementation review and rehearsal plan
|
||||
|
||||
2026-11-02; source `5cb903b989742b7a96cb22ddf4c0e24993b18980`. Read-only discovery. The entire 765-line `deploy/deploy.sh` was inspected, never executed or sourced. No operational keys, credentials, environment files, databases, containers or remote storage were accessed.
|
||||
|
||||
## Distinct recovery mechanisms
|
||||
|
||||
| Owner | Verified source behavior | Qualification boundary |
|
||||
| --- | --- | --- |
|
||||
| `SqliteDatabaseBackupRunner` | SQLite-only VACUUM snapshot and count retention; explicitly unsupported for MariaDB | Does not prove MariaDB backups exist |
|
||||
| `BackupController` | Authenticated, encrypted user-data export using application Data Protection; includes structured records and attachment metadata | Not a server-wide database/files/keys recovery set; do not use it as disaster recovery proof |
|
||||
| `deploy/deploy.sh:backup_database` | Requires explicit provider; SQL dump for MariaDB, volume archive for SQLite; rejects missing/empty/malformed/trailerless dumps | Format checks do not restore or compare records; emergency skip exists and is not approved here |
|
||||
| `backup_recovery_volumes` | MariaDB additionally archives required application data volume; independently archives tombstones when present | Consistency between dump/files/tombstones and current key availability still needs isolated rehearsal |
|
||||
| Retention/off-host copy | Daily/monthly retention and optional rclone copy | Source message calls remote encrypted but source does not establish actual remote encryption configuration; off-host configuration and recovery remain unverified |
|
||||
| `finish_deploy` | On failure after replacement, restarts previous backend/frontend image references when both exist; retains failed exit | No database reversal, no previous AI image restoration, and no post-rollback health check in this handler |
|
||||
| Tombstone store and replay | Validates ledger records; Program invokes `StageRestoredAccountsAsync` at startup; deleted identities are staged again | Test restored data with latest independent tombstones; corrupt ledger must fail closed. Existing AccountDeletionTests include restore replay, not a complete operational restore |
|
||||
|
||||
Build retry paths prune Docker build/system cache and deployment may warm an Ollama model. Therefore even a proposed "local deploy smoke" must not run this script against the shared workstation. No such action was taken.
|
||||
|
||||
## RR-11: backup connection parser mismatch - reproduced
|
||||
|
||||
The script's host `sed` expression accepts `Server=` but returns no host for `SERVER=` and `Host=`. The latter is a documented MySqlConnector alias ([official connection options](https://mysqlconnector.net/connection-options/), checked 2026-11-02). The script then fails its required-host check before dump execution. Impact: a valid application connection spelling can prevent deployment backup/deployment; no observed data loss or actual production impact. Engineering priority proposed P2; not a security vulnerability rating.
|
||||
|
||||
Three synthetic cases used only loopback and dummy identifiers. Exact source expression was extracted from the `db_host` assignment, then executed through Git Bash with `echo <shell-quoted synthetic input> | sed -n <shell-quoted source expression>`. Results: canonical `Server` -> `127.0.0.1`; uppercase `SERVER` -> empty; alias `Host` -> empty. Assertions confirmed all three results. No connection was opened. Initial direct Windows-to-sed invocations failed the positive-control assertion and were discarded as invalid harness evidence; the shell-native rerun passed its positive control.
|
||||
|
||||
Proposed future remediation: parse with the same supported connection-string semantics as the API, or explicitly validate/document a narrower deploy contract before any operational step. Cover aliases/case, quoted separators, duplicate keys, missing required values and secret-redaction behavior. Do not print real input. Any implementation belongs to an authorised release remediation scope, not P10 cleanup.
|
||||
|
||||
## Isolated rehearsal specification - NOT RUN
|
||||
|
||||
1. Bind accepted candidate, image digests, migration history and disposable host ownership. Use synthetic accounts and a separate temporary MariaDB/files/key/tombstone set; never copy production data here without separate authority.
|
||||
2. Seed two owners with canonical profiles, CV overrides, letter history, submitted packages, attachments, encrypted provider placeholders and completed deletion tombstones. Record independent counts and artifact hashes, without recording plaintext secrets.
|
||||
3. Produce the actual supported dump/files/tombstone recovery set. Demonstrate a failed dump or missing required volume prevents promotion. Verify off-host retrieval/decryption separately if that integration is approved.
|
||||
4. Restore into a second isolated environment. Independently compare rows/ownership/revisions/artifact bytes; exercise application decryption and document reopening. Restore an older database with newer tombstones and prove erased accounts cannot regain access. Inject a malformed ledger and assert fail-closed startup.
|
||||
5. Rehearse prior-image rollback after failed replacement, then after a representative additive migration and writes. Check `/health`, `/ready`, exact version and authenticated read/write preservation. Document when image rollback is insufficient and database restore would lose newer writes.
|
||||
6. Measure recovery duration and data-loss window against owner-approved RTO/RPO. No target or measurement exists in this checkpoint. Preserve cleanup and evidence identities; no production execution or release approval implied.
|
||||
|
||||
Fresh checks: Git Bash `bash -n deploy/deploy.sh` PASSED (syntax only); `python scripts/test-mariadb-workflow.py` PASSED 4/4 (source quarantine guards only). These are separate from the earlier 5/5 offline runner tests. Restore, failure injection, hosted isolation, live encryption and rollback health remain NOT TESTED.
|
||||
@@ -0,0 +1,21 @@
|
||||
# Preliminary release blocker reconciliation
|
||||
|
||||
Discovery only, 2026-11-02. These are qualification gaps unless a concrete defect is stated. No inferred P0/P1 vulnerability ratings or owner risk acceptance.
|
||||
|
||||
| ID | Historical item / current finding | Status / closure evidence needed |
|
||||
| --- | --- | --- |
|
||||
| RR-01 | Phase 9/10 and production NO-GO | Phase 10 assessment now independently published, implementation still awaits exact approval. Later roadmap acceptance absent. BLOCKED for final RC |
|
||||
| RR-02 | Old Linux 11/24 and later S01 failure narratives | Latest handoff records approved S01 36/36 per platform and owner visual acceptance for unchanged development output. Do not reopen these metrics without affected change; physical print/device remain NOT TESTED |
|
||||
| RR-03 | Python advisory/native parser/image qualification | Latest scoped conditional disposition retained; current advisories and production-equivalent native isolation NOT TESTED. No new scan or risk waiver |
|
||||
| RR-04 | Hosted MariaDB/isolation | Source explicitly fails before execution until isolated runner proof. BLOCKED; fresh local 5 guard tests do not close it |
|
||||
| RR-05 | Human/device/provider | Actual AT/contrast, physical devices/print, native language and live provider accounts not qualified here. BLOCKED/NOT TESTED by lane |
|
||||
| RR-06 | Old known-issues F19 SQLite fallback statement | Current DatabaseConfiguration defaults to MariaDB and throws without connection. Old wording is superseded for this source. SQLite retirement still BLOCKED on transfer/restore/parity gates |
|
||||
| RR-07 | Old F01 stale-write statement | MariaDB acceptance documents bounded RD21 resolution; later handoff carries it. Do not reopen all old F01 findings based on stale index wording; final affected API census/regression remains required |
|
||||
| RR-08 | MySQL TLS / dependency / production identity | Latest handoff retains MYSQL-TLS-01 and OPS-01. No live configuration read; current advisory disposition and deployed equivalence unverified |
|
||||
| RR-09 | Backup/restore and rollback | Existing procedures and historical seeded rehearsal are not a current restore. Need isolated recovery-set completeness, decryption, tombstone behavior, post-write rollback compatibility and agreed RPO/RTO |
|
||||
| RR-10 | AI quality/activation | Deterministic Docling fixtures are distinct from real-model semantic accuracy. Optional unqualified adapter remains disabled; no AI invocation authorised here |
|
||||
| RR-11 | Backup host parsing rejects supported `Host=` alias; uppercase spelling also unrecognised | REPRODUCED with synthetic input and shell-native positive control. Deployment aborts before backup; proposed P2 compatibility defect. Fix scope awaits authorised release remediation |
|
||||
| RR-12 | Rollback restores core images without post-rollback health qualification; no schema/data/AI reversal | VERIFIED source limitation, runtime impact NOT TESTED. Requires isolated post-migration/post-write recovery rehearsal; no rollback guarantee |
|
||||
| RR-13 | Off-host encryption and recovery-set consistency not established by script success messages | NOT TESTED operational qualification. Verify remote encryption, retrieval/decryption, database/files/key/tombstone consistency in approved isolation |
|
||||
|
||||
Next remediation is evidence work: complete the source/endpoint/environment census and resolve historical records against their exact latest evidence. RR-11 now has a bounded future fix proposal in 11_BACKUP_RESTORE_ROLLBACK.md; no runtime implementation is authorised by this discovery checkpoint. Every fix needs minimal scope, targeted verification and the applicable stage approval.
|
||||
@@ -0,0 +1,26 @@
|
||||
# Preliminary acceptance matrix
|
||||
|
||||
2026-11-02. **NO-GO for production.** This is a discovery snapshot, not Stage 7 final acceptance. No accepted final RC or production-equivalent build is nominated. PASS applies only to an executed gate, not historical source evidence.
|
||||
|
||||
| Mandatory gate | Current release verdict | Missing release evidence / dependency |
|
||||
| --- | --- | --- |
|
||||
| Functional regression | BLOCKED | Accepted final roadmap source; fresh applicable critical journeys |
|
||||
| Frontend/UX | BLOCKED | Accepted design/implementation and final source-bound browser evidence |
|
||||
| Accessibility | NOT TESTED | Actual AT/device/contrast/manual evidence plus automation |
|
||||
| Authentication/authorization | NOT TESTED | Final endpoint/tenant/session qualification |
|
||||
| Security assessment | BLOCKED | Dedicated security initiative start and predecessor gates; no scan run |
|
||||
| Backend APIs | NOT TESTED | Final API census and applicable regression |
|
||||
| MariaDB/migrations | BLOCKED | Hosted isolation and actual RC upgrade/recovery evidence; five offline guards are not this gate |
|
||||
| CV/PDF fidelity | BLOCKED | Final RC source equivalence and retained scoped approvals; physical print still missing |
|
||||
| AI integrations | BLOCKED | Explicit isolated-model qualification and semantic evidence |
|
||||
| Email/OAuth | BLOCKED | Actual configured provider/consent/account verification |
|
||||
| Performance/reliability | NOT TESTED | Approved load targets and bounded final-source measurements |
|
||||
| Docker/infrastructure | NOT TESTED | Exact images/environment/configuration/ingress parity |
|
||||
| CI/CD | BLOCKED | Hosted isolation and fresh actual run/artifacts |
|
||||
| Backup/restore | NOT TESTED | Disposable complete recovery rehearsal with content assertions |
|
||||
| Deployment/rollback | NOT TESTED | Authorised isolated rehearsal; production execution remains prohibited |
|
||||
| Monitoring | NOT TESTED | Failure detection, delivery and redaction evidence |
|
||||
| Documentation | NOT TESTED | Complete release-source/runbook reconciliation, beyond this partial discovery |
|
||||
| Human/device/provider | BLOCKED | Real reviewers/devices/accounts and source-bound records |
|
||||
|
||||
No gate is marked FAIL without fresh evidence of unacceptable behavior. No missing qualification is marked PASS. Historical source-specific acceptance may be reused where permitted and unchanged, but cannot establish final release readiness by itself.
|
||||
@@ -0,0 +1,11 @@
|
||||
# Release discovery handoff
|
||||
|
||||
Branch `planning/release-readiness-discovery`, baseline `5cb903b989742b7a96cb22ddf4c0e24993b18980`; documentation only. Stage 1 IN_PROGRESS, not complete. Full authoritative release prompt read. No final GO/NO-GO completion report or deployable release claimed.
|
||||
|
||||
Completed: initial source inventory, historical blocker reconciliation, preliminary 18-gate matrix and five fresh offline MariaDB runner guard tests. Preserved scoped PDF acceptance and separate model/provider/human/hosted/production gates.
|
||||
|
||||
Next authorised work: complete endpoint and environment census, map each failure boundary to existing test/runbook owners, and inspect remaining backup/restore/deployment implementation without executing it. Then prepare a concrete isolated-rehearsal plan. Final baseline/qualification depends on accepted roadmap source; do not run thousands of unchanged tests to fill this report.
|
||||
|
||||
Continuation: recovery implementation inspection and isolated rehearsal specification are now recorded in 11_BACKUP_RESTORE_ROLLBACK.md. RR-11 parser mismatch reproduced using three synthetic cases; RR-12/13 retain rollback/encryption qualification limits. Four source quarantine guard tests and shell syntax check passed. No deployment script execution. Next: endpoint/environment census, then remaining independent I18N/homepage audit work. Stage 1 remains IN_PROGRESS.
|
||||
|
||||
No production credentials/environment files were opened; no infrastructure, models, main branch or autonomous orchestrator changed. The earlier delegated researcher was interrupted by a service limit; parent supplied this partial checkpoint. No background agent remains active.
|
||||
@@ -0,0 +1,19 @@
|
||||
# RR-11 bounded remediation
|
||||
|
||||
Authorised by the owner's Continuous Roadmap Execution instruction explicitly prioritising this fix. Branch `codex/release-backup-parser`, based on published discovery `653f8d04d469dcd52c883d4b98bea76b8adacada`. Separate from CLEAN-20, full release qualification and infrastructure operations.
|
||||
|
||||
Replaced five inconsistent sed expressions with one stdlib Python parser and a shell-safe field transfer. Case-insensitive aliases, quoted separators/doubled quotes, Unicode and empty passwords survive to the dump command. Invalid ports, incomplete/ambiguous/control-bearing values and unsupported multi-host/socket/path forms fail before dumping. No eval; connection input travels via stdin, not argv; errors never include input. No dependency added. Existing dump/TLS/retention/rollback behavior is otherwise unchanged.
|
||||
|
||||
## Evidence
|
||||
|
||||
- Regression first: four test methods ran against the original backup function; eight subcase failures reproduced alias/case rejection and quoted-password truncation. Canonical/negative controls executed. No real dump or deployment.
|
||||
- Final targeted suite: **5/5 methods PASSED**, including 7 host spellings, quoted semicolon/equal/doubled quote/shell characters, Unicode/single quotes, empty password, and six invalid/ambiguous input cases. Tests run the actual backup function and mock only external dump/Docker boundaries.
|
||||
- Full offline script unittest set: **31/31 PASSED**, including targeted cases, ingress Compose rendering with synthetic env, workflow/runner guards, retry guard, supply-chain fixtures and offline model-evaluation helpers. No model invocation. Printed exit17/exit1 are expected mocked runner negative cases. Do not add targeted five to the overlapping total.
|
||||
- Ordinary unittest discovery found zero tests because repository filenames contain hyphens; recorded as NOT A PASS. Explicit importlib loading of every `scripts/test-*.py` unittest module (excluding standalone Docker topology runner) executed the 31 tests. Docker topology qualification NOT RUN.
|
||||
- Git Bash `bash -n deploy/deploy.sh`: PASSED.
|
||||
- Graphify AST update completed locally: 18,504 nodes / 45,920 edges; missing optional PDF/SQL extractors reported. Newly generated untracked graph output retained locally, not a runtime verification or introduced repository artifact.
|
||||
- Product/backend/frontend/full database/browser suites NOT RUN: this package changes only deploy parsing and its offline tests. Real dump/restore, Linux-host operational behavior, hosted CI and production validation remain NOT TESTED.
|
||||
|
||||
The first Unicode test attempt failed in the Windows test harness encoding before reaching product code; the harness was corrected to UTF-8, then passed. Parser stdin/stdout are explicitly UTF-8. No application user data or production credentials used.
|
||||
|
||||
Rollback: revert this bounded implementation commit to restore the prior parser (and its known limitation). No database/schema change needs reversal. RR-11 is FIXED AND OFFLINE-TESTED on this development branch; RR-12/13 and production remain open. No main merge/deploy authorised.
|
||||
@@ -0,0 +1,226 @@
|
||||
# Jobjakt — A3 Final Design Approval and Implementation Authorisation
|
||||
|
||||
I approve **A3 as the final Jobjakt UI/UX design foundation** and authorise its phased implementation across the application.
|
||||
|
||||
I have reviewed the design direction and am happy with the result.
|
||||
|
||||
This approval includes the consolidated A3 prototype, its established design system, navigation approach, layouts and connected workflows.
|
||||
|
||||
## 1. Confirmed design decisions
|
||||
|
||||
Preserve the approved A3 combination:
|
||||
|
||||
- Original A1 dashboard.
|
||||
- D1 visual foundation.
|
||||
- B1 application tracking.
|
||||
- Labelled, grouped and collapsible desktop sidebar.
|
||||
- Hybrid mobile navigation.
|
||||
- CV editor on the left with live preview on the right.
|
||||
- Full application-detail pages with contextual information on the right.
|
||||
- Optional quick-preview panels.
|
||||
- Career Profile overview first, with immediate editing actions.
|
||||
- Calendar agenda first, with an optional month view.
|
||||
- Automation controls under Settings.
|
||||
- Contextual AI assistance.
|
||||
- Optional, resumable dashboard onboarding checklist with on-demand walkthroughs.
|
||||
|
||||
Maintain the selected light/dark visual treatment and consistent responsive behaviour.
|
||||
|
||||
Do not restart design exploration or generate another five concepts.
|
||||
|
||||
Minor adjustments for implementation feasibility, accessibility and usability are permitted.
|
||||
|
||||
Consult me before making substantial changes to the approved visual direction or user journeys.
|
||||
|
||||
## 2. Implementation approval
|
||||
|
||||
I authorise the actual implementation of the approved A3 redesign within the appropriate Jobjakt development branches.
|
||||
|
||||
This includes:
|
||||
|
||||
- Shared design system.
|
||||
- Typography and colours.
|
||||
- Navigation.
|
||||
- Dashboard.
|
||||
- Application tracking.
|
||||
- Application details.
|
||||
- Job discovery.
|
||||
- Career Profile.
|
||||
- CV Builder.
|
||||
- CV import.
|
||||
- Cover letters.
|
||||
- Calendar.
|
||||
- Correspondence.
|
||||
- Documents.
|
||||
- Settings.
|
||||
- Automation controls.
|
||||
- Administration.
|
||||
- Onboarding.
|
||||
- Mobile layouts.
|
||||
- Light/dark modes.
|
||||
- Accessibility improvements.
|
||||
|
||||
The implementation must cover the actual application, not merely reproduce static prototypes.
|
||||
|
||||
## 3. Preserve existing functionality
|
||||
|
||||
The design handoff identifies 57 preservation groups and 34 routes.
|
||||
|
||||
Treat these as mandatory preservation requirements.
|
||||
|
||||
Do not remove, simplify or hide advanced functionality merely because it was not shown in the prototypes.
|
||||
|
||||
Preserve:
|
||||
|
||||
- Existing user data.
|
||||
- Career Profile ownership and persistence.
|
||||
- CV revisions and undo/redo.
|
||||
- Document imports and exports.
|
||||
- Application records.
|
||||
- Authentication.
|
||||
- AI permissions and qualification restrictions.
|
||||
- Dashboard customisation.
|
||||
- Administrative permissions.
|
||||
- Existing integrations.
|
||||
- English/Norwegian support.
|
||||
- Future European localisation.
|
||||
- Database compatibility.
|
||||
- Existing accessibility functionality.
|
||||
|
||||
Maintain all relevant RD21 data-integrity protections.
|
||||
|
||||
## 4. Implementation sequence
|
||||
|
||||
Use the implementation milestones documented in the A3 handoff.
|
||||
|
||||
Subject to the authoritative dependencies and Phase 10 gates, organise implementation approximately as follows:
|
||||
|
||||
**UI-01 — Shared design system and navigation**
|
||||
|
||||
Implement foundational styles, typography, components, navigation, themes and responsive structures.
|
||||
|
||||
**UI-02 — Dashboard and applications**
|
||||
|
||||
Implement dashboard layouts, interactive widgets, application tracking, Kanban and application-detail experiences.
|
||||
|
||||
**UI-03 — Career Profile and CV workflows**
|
||||
|
||||
Implement the approved Career Profile, CV Editor, template, import and cover-letter experiences.
|
||||
|
||||
**UI-04 — Job discovery and application journeys**
|
||||
|
||||
Implement approved job-discovery layouts and connections to the existing application workflows.
|
||||
|
||||
Coordinate with INT-GLOBAL-JOBS-01 to avoid conflicting implementations.
|
||||
|
||||
**UI-05 — Supporting workflows**
|
||||
|
||||
Implement calendar, reminders, correspondence, documents, administration, settings and automation controls.
|
||||
|
||||
**UI-06 — Onboarding and mobile refinement**
|
||||
|
||||
Complete guided optional onboarding, mobile navigation, small-screen layouts and responsive interaction parity.
|
||||
|
||||
**UI-07 — Integrated qualification**
|
||||
|
||||
Run full preservation, accessibility, responsive, browser and application regression acceptance.
|
||||
|
||||
Use the authoritative A3 implementation plan where it specifies more precise dependencies or acceptance requirements.
|
||||
|
||||
## 5. Autonomous development
|
||||
|
||||
Continue working through the implementation milestones without asking me to approve every ordinary change.
|
||||
|
||||
You may autonomously:
|
||||
|
||||
- Implement approved designs.
|
||||
- Refactor affected frontend components.
|
||||
- Introduce reusable design-system components.
|
||||
- Improve responsive layouts.
|
||||
- Fix implementation defects.
|
||||
- Add tests.
|
||||
- Update translations.
|
||||
- Run regression checks.
|
||||
- Commit validated checkpoints.
|
||||
- Update documentation.
|
||||
|
||||
Pause only when a genuine owner decision, mandatory gate or substantial design change is required.
|
||||
|
||||
If a task is blocked, record the blocker and continue independently eligible work.
|
||||
|
||||
Do not bypass Phase 10 cleanup approvals, required integration baselines or other authoritative development-entry gates.
|
||||
|
||||
## 6. Coordinate with the remaining roadmap
|
||||
|
||||
Continue the existing direct roadmap execution.
|
||||
|
||||
Do not use the autonomous orchestrator.
|
||||
|
||||
Coordinate A3 implementation with:
|
||||
|
||||
- Phase 10.
|
||||
- Product Review.
|
||||
- International Global Job Search.
|
||||
- Full European localisation.
|
||||
- Multilingual homepage redesign.
|
||||
- Security audit.
|
||||
- Release readiness.
|
||||
|
||||
Avoid duplicate implementations and unnecessary rewrites.
|
||||
|
||||
Use established accepted baselines, isolated branches and documented dependencies.
|
||||
|
||||
Do not treat provisional mockup content as actual product functionality.
|
||||
|
||||
## 7. Validation requirements
|
||||
|
||||
For each implementation milestone:
|
||||
|
||||
- Run relevant frontend tests.
|
||||
- Run required backend tests where workflows are affected.
|
||||
- Validate browser journeys.
|
||||
- Validate mobile layouts.
|
||||
- Check keyboard accessibility.
|
||||
- Check translation behaviour.
|
||||
- Check light/dark modes.
|
||||
- Test preservation requirements.
|
||||
- Compare implementation against the approved A3 design.
|
||||
- Record regressions and failures.
|
||||
|
||||
The prototype validation results are useful design evidence, but they do not qualify the implemented application.
|
||||
|
||||
Real screen-reader, physical-device and human accessibility tests remain pending until actually completed.
|
||||
|
||||
Do not claim unperformed tests passed.
|
||||
|
||||
## 8. Git and release restrictions
|
||||
|
||||
The latest design checkpoint is `237c79b8`.
|
||||
|
||||
The roadmap continuation checkpoint is `286535be`.
|
||||
|
||||
Verify the actual commits, branches and ancestry before integrating work.
|
||||
|
||||
Preserve the existing worktrees and acceptance records.
|
||||
|
||||
Keep validated changes in development branches and commit checkpoints.
|
||||
|
||||
Do not spend time repairing Gitea as part of this design implementation.
|
||||
|
||||
If publication fails, preserve the local work, record the issue and continue eligible work without falsely claiming publication success.
|
||||
|
||||
Never merge into main or deploy production without explicit approval.
|
||||
|
||||
## 9. Final objective
|
||||
|
||||
Deliver the approved A3 experience throughout the real Jobjakt application.
|
||||
|
||||
I want a cohesive, modern, approachable and powerful product, with equally strong desktop and mobile experiences.
|
||||
|
||||
Preserve the application's advanced capabilities while making everyday workflows easier to understand and use.
|
||||
|
||||
**This is my final approval of the A3 design and authorisation to begin its staged development implementation.**
|
||||
|
||||
It is not approval for production deployment or for bypassing outstanding security and release gates.
|
||||
|
||||
Continue with the next authorised implementation milestone, maintaining durable progress reports and proceeding through independently eligible work without unnecessary interruptions.
|
||||
@@ -0,0 +1,11 @@
|
||||
# A3-IM09 publication and owner acceptance
|
||||
|
||||
3 November 2026. Implementation `773c943165669bfc97bee46c53f73f124f398c0c` on `codex/a3-ui-09` is published and independently remotely verified. All45 source/143 evidence manifest entries match committed bytes;80 export assets separately hashed. Validation: `ACCOUNT_ADMIN_VALIDATION.md`.
|
||||
|
||||
Owner explicitly answered **"Approve IM09 and A3-IM10"**. IM09 Gate F is ACCEPTED; do not repeat. Next authorised scope: cross-application consistency, preserved secondary routes, responsive/localisation/accessibility checks and combined affected regression. Human/native-language, real providers/models, final integrated security/recovery and release approval remain separate.
|
||||
|
||||
143 distinct frontend cases/11 suites and69 local backend cases passed. Initial full browser16 controlled journeys/128 states passed; visual review exposed processing label/column issues and an affected rerun reproduced a focus race. Corrected processing19-case unit suite and16-configuration browser successor passed. Final distinct browser coverage is112 retained states plus16 refreshed processing states=128. Pilots, failed attempts and focused reruns are not added. Confirmation dialogs were cancelled and16 explicit export requests received fixture403; no real mutation, credential/provider/model operation or deletion.
|
||||
|
||||
Keep earlier IM08 granular Ghosted pause and mounted AI-entitlement refresh gaps OPEN. Independently published attachment-size delta `1ce93ca0e3a906673e636e56f1b910756ca78bb2` still needs narrow integration against this newer baseline; never replace the application tree with its older branch.
|
||||
|
||||
Full Phase10/Product Review/Global Jobs/European localisation, native/provider, final integrated security/recovery/hosted CI and release qualifications remain OPEN. No orchestrator/pre-P10/main/production changes.
|
||||
@@ -0,0 +1,31 @@
|
||||
# A3-IM09 Account and administration validation
|
||||
|
||||
3 November 2026. Owner explicitly approved **"Approve IM08 and A3-IM09"**. Isolated `codex/a3-ui-09` starts at published/remotely verified IM08 acceptance receipt `f0c8c6d321a70b4d477e99c7b9557246b6361cdf`. This is a presentation increment, not final authentication/security/release acceptance.
|
||||
|
||||
## Changes and preservation
|
||||
|
||||
- Account overview adds named navigation to identity, sign-in/connections and password/security groups. Keyboard actions focus and scroll existing groups. Forms remain mounted: changing sections does not reset an unsaved identity draft. Existing account avatar, local/external restrictions, password, 2FA, trusted-device, provider and session controls remain with their existing owners. Career Profile is still canonical and separate.
|
||||
- The account data link enters existing Settings Backup controls through `/settings?section=data`. Only this exact initial query selects section3; unsupported queries retain General. Existing sections, lifecycle availability, recent-sign-in export requirement, deletion phrase and confirmation writers remain unchanged.
|
||||
- Processing monitor has named filter/result targets and keyboard jump/return actions. No filter submission, reads, polling or mutations occur merely from moving focus. Visual inspection then found native-select labels overlapping the selected All value and a long failure chip squeezing Duration. Four labels now shrink above the value; failure chips wrap and the duration column retains readable width. An affected browser rerun exposed intermittent detail focus loss: the animation-frame callback could execute before React committed the heading ref. A failing scheduling regression reproduced it. Requested focus now runs after commit with the existing owner/session guards. Existing identity cancellation, permission failures, bounded events, pause/resume and owner-permitted job links remain. Existing admin users/audit/system components are retained and qualified alongside these changes.
|
||||
|
||||
No API, schema, migration, dependency, worker/provider/model configuration or physical renderer change. Rollback reverts this UI increment; no database rollback required. The IM08 granular Ghosted pause and mounted AI-entitlement refresh gaps remain OPEN.
|
||||
|
||||
## Verification
|
||||
|
||||
| Check | Result and scope |
|
||||
|---|---|
|
||||
| Frontend | **143 distinct cases PASSED** across11 suites. Initial stable application-source run142 passed, zero failed/skipped. Final processing successor19 passed, replacing the18 processing cases in142 and adding one scheduling regression:142−18+19=143. Profile/account security/presentation/providers/data export, admin users/audit/system/processing, Settings and translation catalogue. Native reports under `evidence/account-admin/frontend`. Intermediate18-case visual rerun overlaps these totals. |
|
||||
| Red contracts | Four expected failures before implementation, one supported-default case passed;65 filtered cases NOT RUN. Focused successor five passed; these overlap142. |
|
||||
| Initial broad attempt | `EARLY-MIXED.json`:135 passed/two new-contract failures across137 cases. Regression tests were added while the command ran, so this is **not a clean baseline** and provides no acceptance count. Superseded by the stable application-source142-case run. |
|
||||
| Backend | **69 PASSED**, zero failed/skipped. Users/last-admin, 2FA, session revocation/controller, processing, account export and API authorization posture. Native TRX under `evidence/account-admin/backend`. Local mock/InMemory/temp SQLite fixtures; no production accounts or providers. |
|
||||
| Static checks | Typecheck, full ESLint, static-export build, scoped verifier ESLint/syntax and diff check PASSED. Initial build/typecheck rejected unsupported test-query `exact` options; removed without changing product behavior. System `dotnet` could not resolve the SDK; existing user SDK/DOTNET_ROOT succeeded without config changes. |
|
||||
| Browser | Full16 controlled journeys/128 scans passed across EN/NB, light/dark,320/390/768/1440; `evidence/account-admin/browser/BROWSER.json`, with16 intercepted export denials and no mutations. Processing visual/focus corrections passed the affected16-configuration successor under `PROCESSING.json`. Final distinct coverage remains128 (112 unchanged states plus16 processing), not an additional full pass. Geometric checks verify native labels above selected text and Duration width. Pilot overlaps, not extra cases. Representative phone account and final desktop NB/dark processing captures were visually inspected. |
|
||||
| Review/graph | Independent source/verifier review, including the visual and postcommit focus fixes, found no actionable issues. No extra test reruns counted. Final AST-only update passed:18,858 nodes/46,544 edges/1,109 communities. Optional SQL parser absent and144 files yielded no symbols; generated graph remains local. |
|
||||
|
||||
Browser journeys exercise unsaved identity drafts across keyboard section jumps, cancelled session-revocation and account-deletion confirmations, an explicit export request rejected by a fixture403, disconnected-provider presentation, disabled last-admin deletion/demotion, empty audit, unavailable system reads and paused processing drill-down with a non-openable linked job. The verifier blocks external origins and unexpected writes; all API responses are synthetic. No credential change, reset, account deletion, provider connect/disconnect, model or production operation is executed. System normal-state actions and detailed audit action scenarios are covered by selected unit tests, not the browser's unavailable/empty captures. The first geometry-check selector matched both Task and the search label; the failed followup is retained and the selector now uses the control's actual label association. The saved diagnostic image shows the visual defect that axe did not detect; it is not an accepted final capture.
|
||||
|
||||
NOT RUN: real authentication/OAuth/email/2FA delivery, MariaDB/hosted CI, native device/screen-reader, live security attack simulation, complete European native-language review, integrated recovery/restore or release qualification. Reused physical-PDF acceptance is unaffected; no PDF rerun was justified.
|
||||
|
||||
## Next gate
|
||||
|
||||
After final browser evidence, source/evidence reconciliation, publication and independent remote readback, request Gate F for IM09 and progression to IM10: cross-application consistency, secondary-route preservation, responsive/localisation/accessibility and combined affected regression. The approved proposal requires owner milestone review before the next increment. Do not infer IM10 approval from the earlier IM09 answer. Full Phase10, Global Jobs dependencies and final integrated security/release gates remain separate.
|
||||
@@ -0,0 +1,13 @@
|
||||
# A3-IM08 bounded stale-proposal repair
|
||||
|
||||
3 November2026. IM08 is authorised and remains IN PROGRESS. This subpackage fixes a reproduced section-assistant defect without changing any model/provider/API/schema or acceptance writer.
|
||||
|
||||
The shared assistant sends source text, targetId, document/output language, context and sectionName when generating a proposal. Its existing invalidation effect omitted the last two inputs. CvBuilderEditor entry callers include edited entry title/subtitle in context, so a user could change facts while a request was pending, then see and apply the previous suggestion; a displayed review also survived those changes. Four controlled regressions reproduced both pending/visible cases for context and section name before the fix.
|
||||
|
||||
Added context and sectionName to the same invalidation effect. Existing requestId guards reject late success/failure/finally work and clear the old proposal. Generation remains explicit, Apply still requires server token acceptance, and parent source flush/revision/epoch guards remain unchanged. No silent content write or automatic regeneration. A translated section label may conservatively discard a prompt-bound proposal; it never changes document/output language to match UI language.
|
||||
|
||||
Checks PASSED:23 section-assistant cases plus59 parent studio cases,82 disjoint cases/2 suites; typecheck, scoped zero-warning lint and production build. Independent static review found no actionable issue and did not repeat tests. Initial58-case Settings/AI baseline overlaps the section cases and is not added. Parent suite emitted existing direct-focus act warnings at cv-builder-deep-link.test.tsx475/782; all59 cases passed, but this is not a warning-free test run. Fixture-only callbacks/tokens, no live model or semantic AI-quality claim.
|
||||
|
||||
NOT RUN for this one-line dependency repair:backend rerun, new browser sweep, physical PDF, native device, live models/providers, final integrated security/release. Existing rendered document layouts are unchanged; controlled React regressions exercise the affected async behavior directly. Other IM08 Settings/automation presentation and final scope qualification remain open; no Gate F acceptance is requested for this subpackage alone.
|
||||
|
||||
Native baseline/red/green/parent reports and source manifest are in evidence/ai-context. Red run:4 failed,4 passed,15 intentionally excluded by test-name filter. Final complete section suite23 passed,zero failed/pending; parent59 passed. Rollback reverts the effect-dependency change; no database/data rollback.
|
||||
@@ -0,0 +1,11 @@
|
||||
# A3-IM08 publication and owner acceptance
|
||||
|
||||
3 November 2026. Implementation `e2327c1fa2ceaf785d4058c802bafe0d3428c235` on `codex/a3-ui-08` is published and independently remotely verified. Earlier section-context fix `a88310481fbfa7701478043e8bf192ee45c7c28e` is also published/verified. Validation: `AI_SETTINGS_VALIDATION.md`;131 distinct frontend cases/eight suites,68 local backend cases,96 scoped accessibility scans/captures and16 controlled journeys. Capture refreshes, pilots and independent review overlap those totals.
|
||||
|
||||
Owner explicitly answered **"Approve IM08 and A3-IM09"**. IM08 Gate F is ACCEPTED; do not repeat. This approval was given with two disclosed open gaps: no per-user Ghosted-processing pause in the six-number rules contract, and mounted entitlement presentation requiring a full reload after saving AI preferences. Backend enforcement remains authoritative. Neither gap is silently closed by milestone acceptance.
|
||||
|
||||
Next authorised scope: IM09 account/security/session/connections/data controls and administration/processing presentation. Preserve authentication/recovery/RBAC/owner boundaries, last-admin/self restrictions, task-state permissions, safe diagnostics and explicit export/delete confirmation. No actual deletion for visual verification, production operation, live model or provider activation.
|
||||
|
||||
Independent attachment-size localisation `1ce93ca0e3a906673e636e56f1b910756ca78bb2` on `codex/i18n-attachment-sizes` is published/remotely verified;61 affected tests, types/scoped lint/build and static review passed. Its seven committed source/evidence hashes match. Keep that delta isolated until reconciled against the newer application baseline; do not merge its older tree wholesale.
|
||||
|
||||
Full Phase10, European localisation, Product Review/Global Jobs dependencies, final integrated security/recovery/native/provider/release qualification remain open. No orchestrator/pre-P10 changes, main merge or production deployment.
|
||||
@@ -0,0 +1,31 @@
|
||||
# A3-IM08 AI and automation validation
|
||||
|
||||
3 November 2026. Owner approved **"Approve calendar/documents/mail and A3-IM08"**. Isolated `codex/a3-ui-08` starts at accepted IM07 `fba80ef346bc021e675024638dacf9ccef7243db`, with published acceptance receipt `e5a979386d6377138e7ea7fd44958adb22838886`. First bounded context fix `a88310481fbfa7701478043e8bf192ee45c7c28e` is published and independently remotely verified. Its immutable source/evidence record remains `AI_CONTEXT_VALIDATION.md` at that commit.
|
||||
|
||||
## Result and preservation
|
||||
|
||||
Settings now has an Automation entry on desktop and mobile, using existing notification preference state and its explicit Save action. Its email-reminder switch is the same persisted preference shown in Notifications; changing sections preserves drafts. Links lead to AI privacy/usage, follow-up thresholds and individual saved-search alerts. Keyboard activation of the AI link focuses the existing settings group. Existing numeric section values and routes remain stable.
|
||||
|
||||
The copy follows actual service contracts: optional email delivery checks roughly every six hours, confirmed account address, at most one email per application per day. Six day thresholds influence reminders and optional Ghosted status processing; they are not pause switches. Per-search alerts and AI privacy have their existing owners. No workers, providers or backlog orchestration were activated or configured.
|
||||
|
||||
Section AI proposals now invalidate when context or section name changes, for pending responses and displayed reviews. Whole-document proposals now invalidate when output language changes, without generating again or applying the old result. A Pro account without AI entitlement sees manual-editing guidance and a Settings link instead of an upgrade prompt. Free-plan upgrade behavior and session dismissal remain intact.
|
||||
|
||||
The existing Career Profile owner, CV null-as-inherit settings, save queue, undo/history, revision preconditions, opaque proposal token and explicit review/apply remain authoritative. UI language stays separate from document output language. No renderer, API, schema, dependency, model configuration or provider permissions changed. Reverting IM08 source commits restores prior presentation; no database rollback is required.
|
||||
|
||||
## Evidence
|
||||
|
||||
- **131 distinct frontend cases across eight suites PASSED**. This is the union of Automation45, whole-document studio60, section assistant23, and notice/catalogue6 with three catalogue cases overlapping Automation45. Reports are under `evidence/ai-settings/frontend` and the published `evidence/ai-context/a3-ai-context-green.json`. Older baseline58, parent59, pilot and independent-review reruns are not extra cases. Studio tests emit existing direct-focus React act warnings; this is not a warning-free test claim.
|
||||
- **68 local backend cases PASSED**, no failures/skips: notification settings, tenant-bound worker fixtures, AI privacy policy, usage metering and CV AI readiness. Native TRX under `evidence/ai-settings/backend`. InMemory/temp SQLite and mocked/captured providers; no MariaDB, model inference, real email or hosted CI qualification.
|
||||
- **16 controlled browser journeys and96 scoped axe scans/captures PASSED**. EN/NB, light/dark,320/390/768/1440. Final report is `evidence/ai-settings/browser/BROWSER.json`; capture refreshes overlap the same cases. Final captures wait for instant scroll-to-top; phones use viewport captures, tablets/desktop full-page captures. Representative phone EN/light and desktop NB/dark images were visually inspected. Six states exercise saved reminder preference, AI preference disabled, manual CV save without inference, proposal review, language-change discard and explicit token apply. Each journey intercepts five mutations and two proposal responses. No canonical-profile write is accepted by the fixture. Actual API/model responses are synthetic; this is not backend end-to-end or semantic AI/translation acceptance.
|
||||
- Typecheck, full ESLint, static-export build and scoped browser-script lint PASSED. One initial import-casing error failed build/typecheck and was corrected to tracked `accountPlan`; subsequent checks passed. Initial browser pilot failed because a Select accessible name includes its value; selector corrected, pilot passed. An earlier unavailable export server and an accidental wrong test-runner invocation are not test evidence; package files are unchanged.
|
||||
- Independent source review found the same import-casing issue, corrected before final build. No remaining findings in shared drafts/save guards, AI focus, entitlement presentation or language invalidation. Its27 selected tests overlap the131 total. Final harness review found no actionable issues in interception or count assertions. AST-only graph refresh completed; optional SQL parser and symbol-less-file limits remain explicit. Generated graph stays local.
|
||||
|
||||
Red regressions remain available: context/name changes four failures before the fix; document-language one failure; missing Automation contract three failures; paid-plan notice two failures. Filtered cases were not executed in those red runs. Initial capture/pilot reports do not inflate final coverage.
|
||||
|
||||
## Open qualifications and next gate
|
||||
|
||||
Granular user pause for automatic Ghosted status processing is not represented by the existing six-number rules contract. It remains a capability gap; no fake switch or silent schema expansion was introduced. Existing AI preference changes are reflected by server-backed entitlement hydration on a full page reload, as exercised here. The card does not currently refresh the mounted App entitlement context after saving, so internal navigation alone can retain stale presentation until reload; backend enforcement remains authoritative. This existing UX gap is OPEN. Reusing the auth-changed event blindly would set authResolved false and risks unmounting drafts; investigate a safe refresh separately. This increment adds no new session or entitlement authority.
|
||||
|
||||
NOT RUN: live models, semantic output quality, paid/real providers, physical PDF, native device/screen reader, full integrated security, recovery/restore, hosted CI or production checks. Complete European localisation, Phase10 acceptance, Global Jobs dependencies, public launch and release readiness remain open. Root security policy remains on its isolated security branch.
|
||||
|
||||
The approved implementation proposal requires **Gate F: owner milestone review before the next increment**. After final publication/readback, request acceptance of IM08 and progression to IM09 account/session/connections/data/admin/processing presentation, preserving RBAC, owner isolation, last-admin/session safeguards and explicit destructive-action confirmation. No main merge, deployment, live-model activation or additional provider authority is included.
|
||||
@@ -0,0 +1,7 @@
|
||||
# Application-tracking publication and next review
|
||||
|
||||
3 November2026. Implementation `98e9502af5039429fb6da45353e719a27e8aa22d` on codex/a3-ui-04 pushed successfully. Independent remote readback returned that exact hash. Committed manifest verification returned zero mismatches:20 sources and56 evidence files;80 exported assets are separately hashed.
|
||||
|
||||
Owner already accepted dashboard/onboarding and authorised this increment with **"Approve dashboard/onboarding and A3-IM04"**. Do not repeat that decision. Application-tracking Gate F is now pending in this chat, requesting progression to A3-IM05 discovery presentation/filters and permitted saved-search UX. This does not approve new international providers, geography behavior, licensing, live services or release.
|
||||
|
||||
See [qualification](APPLICATIONS_VALIDATION.md), [desktop detail](evidence/applications/browser/detail-en-light-1440.png), [mobile board](evidence/applications/browser/board-nb-dark-320.png). Preserve UI03/UI02 refs and the original integration d3d33837. Independent document-date ca519cac remains on its own branch; do not claim it is integrated here. Other independently eligible roadmap work may continue while this review is pending.
|
||||
@@ -0,0 +1,39 @@
|
||||
# A3-IM04 B1 applications and right context
|
||||
|
||||
3 November2026. Authorised by the owner's exact reply **"Approve dashboard/onboarding and A3-IM04"**. codex/a3-ui-04 starts at accepted dashboard receipt dc93b589, without merging the older design tree. Implementation preserves existing task, data, revision and permission owners.
|
||||
|
||||
## Result
|
||||
|
||||
Table and Board retain shared filters/search/counts, all columns, density, paging, saved views, selection/bulk/trash and precise status controls. Filters now use quiet separators instead of another rounded container; results/board cards follow the D1/B1 foundation. Board's contained horizontal scroller is explicitly named and keyboard-focusable; existing pickup/drop/cancel and exact-status menu remain. No feature/action was removed to match a mockup.
|
||||
|
||||
Full detail puts primary task content left and recorded context right above1000px. Context follows primary content in DOM and stacks below it on narrow/compact-preview layouts. Jump focuses the named context heading; Return focuses the current labelled task panel without route changes. Source/company/location/country/salary/tags and recorded dates remain visible across sections. Existing overview dates move into this shared context; missing dates remain unknown and date-only deadlines remain local calendar dates. Original detail disclosure, description/translation distinction, preparation/next action/activity and every tab/subtab stay available. No new API read/write is introduced.
|
||||
|
||||
Visual review reproduced an existing trust defect: a null nextStep claimed the application was fully prepared despite missing CV/letter data. Two EN/NB tests failed first; the existing message now says no next action is recorded and asks the user to review preparation, with informational severity. It no longer infers readiness from absence of a next action.
|
||||
|
||||
## Evidence and preservation
|
||||
|
||||
| Lane | Result / exact scope |
|
||||
|---|---|
|
||||
| Baseline |62 tests/7 suites PASSED before changes |
|
||||
| Test-first contracts |Two missing-context failures; separately two false-readiness failures reproduced before their fixes |
|
||||
| Final core frontend |69 tests/8 suites PASSED, including new focus/context/readiness cases, table/board/workspace, daily/trust loop and catalogue |
|
||||
| Disjoint writer suites |57 tests/2 suites PASSED: application-assets and edit-job-revision.126 unique selected frontend cases across10 suites; reviewer52 and baseline overlap, never added |
|
||||
| Backend preservation |88 tests PASSED, zero failed/skipped: ApplicationWorkspace, JobQueryParity, Rd21JobPersistence, JobApplicationsAuthorization, JobPipeline, JobApplicationsAppliedDateHistory. InMemory/isolated SQLite and mocked summarizer; no real models/providers or MariaDB |
|
||||
| Typecheck / full lint / build |PASSED on final implementation sources; static export includes the copy correction |
|
||||
| Browser |Actual built React with local synthetic API responses;16 configurations at320/390/768/1440 × EN/NB × light/dark.48 axe scans/captures, zero returned violations.16 search → Board → precise Waiting status → full detail → context jump/return → originating filtered Board journeys |
|
||||
| Writes |16 PATCH status requests explicitly fulfilled by fixtures. Zero unexpected writes/page exceptions; no request reached a real backend. All external requests aborted. This is separate from backend service/controller tests |
|
||||
| Independent review |No actionable findings.52 tests/3 suites passed independently but overlap core69. Native horizontal ArrowRight scroll behavior was not explicitly asserted by the browser verifier |
|
||||
|
||||
Tests retain sorting, page size, optional columns, shared query/view history/membership, saved-view account ownership, partial bulk failures, trash restore, custom statuses, precise menu, keyboard pickup/drop/Escape/focus, dirty-letter/answers navigation, coherent/stale Answers snapshots, legacy documents/correspondence/notes links, aggregate errors/retry, CV source revisions, attachments/history/frozen packages and edit revision conflict behavior. Secondary domain unit tests use controlled components/services; browser journeys above exercise the actual table/board/overview only. They do not establish successful live workflows for every task/document tab.
|
||||
|
||||
Intermediate verification exposed one old date-summary selector after moving that summary into context; corrected to the new named landmark, retaining checks for recorded and unknown dates. Typecheck caught an unsupported testing-library exact option; removed it. Both were resolved before final runs. Baseline/red native reports remain separate from green evidence. Source/evidence manifest binds final sources and exported assets. UI language still does not change source job content or document language.
|
||||
|
||||
## Open qualifications and rollback
|
||||
|
||||
No backend implementation, schema, dependency, route, permissions or revision writer changed. All57 inherited groups/34 route declarations remain; membership is not blanket functional/security acceptance. Canonical Career Profile/CV override/revision/RD21 contracts and physical document renderer remain untouched. No reason to reopen accepted PDF metrics or visuals.
|
||||
|
||||
Rollback this presentation increment on its branch; no data rollback. Existing application records, filters and saved views use the same owners. UI03 agenda compatibility remains documented separately. The independently published document-date patch ca519cac remains separate and is not silently included in these results.
|
||||
|
||||
NOT RUN: MariaDB, real service-backed browser/database end-to-end, hosted CI, native devices/touch/screen-reader/actual zoom, native-language review, licensed providers/live AI, final integrated security or release qualification. Final all-route integrated acceptance remains A3-IM10. Phase10, Product Review overall, Global Jobs, full Europe localisation, homepage and release gates remain open.
|
||||
|
||||
Next: publish/read back this increment, then required owner Gate F before A3-IM05 discovery presentation/permitted saved-search UX. Provider/geography expansion remains governed by the separate Global Jobs prerequisites and rights.
|
||||
@@ -0,0 +1,29 @@
|
||||
# A3-IM07 calendar subpackage — local qualification
|
||||
|
||||
3 November 2026. Owner approved progression to A3-IM07 after UI06. This calendar subpackage is independently implemented and locally qualified; **A3-IM07 remains open** for correspondence/document presentation and combined preservation evidence. No next milestone acceptance is requested yet.
|
||||
|
||||
The existing `/reminders` route now opens a date-level agenda above the unchanged workflow reminders. Agenda is default, with a persisted owner-scoped Month toggle. Upcoming recorded dates precede earlier dates; month selection and native calendar-day buttons retain linked application access. No view action creates a provider event or alters a reminder. Earlier reminder snooze/clear/retry/focus behavior remains with RemindersView.
|
||||
|
||||
Added authenticated `GET /api/calendar/agenda?from=YYYY-MM-DD&to=YYYY-MM-DD` to the existing ApplicationCalendarController. The inclusive range is limited to62 days and translated to an exclusive next-day query boundary. Explicit owner and nondeleted filters precede a narrow projection; company labels also require matching ownership. Deadline-only Saved applications are included even though the reminder attention feed excludes them. The response contains jobApplicationId,jobTitle,companyName,kind(deadline/follow-up),date and unchanged recordedAt. There are no schema, migration, model, writer or provider changes. Existing ICS and consent-scoped provider event endpoints are unchanged.
|
||||
|
||||
Calendar grouping retains the stored date; the view does not convert an unzoned legacy timestamp into an inferred timezone or appointment time. Original recordedAt stays on the time element and linked application. Current data has no interview appointment date and lacks original source precision/timezone metadata; that remains an explicit capability gap. Interviews are not fabricated from stage or note text. Undated work remains in the existing reminder workflow, not a guessed event.
|
||||
|
||||
| Evidence | Result |
|
||||
|---|---|
|
||||
| Baseline |70 existing reminders/calendar/documents/inbox cases across4 suites passed; not additional to overlapping later checks |
|
||||
| New contract red |Backend compilation failed because Agenda/DTO did not exist. Frontend suite could not resolve new component. These are missing-contract red checks, not executed runtime test failures |
|
||||
| Intermediate defect |Initial new month-navigation test failed: shared resource hook requires explicit dependency values, not just a new callback. Supplying from/to deps fixed actual missing month reload; no shared hook behavior changed |
|
||||
| Final frontend |25 selected cases/4 suites passed: new agenda8, existing reminder/calendar preservation and catalogue coverage. Reviewed7-case rerun overlaps and predates final upcoming-order case |
|
||||
| Backend |10 passed, zero failed/skipped. InMemory/isolated SQLite: saved deadlines, raw wall-clock date, inclusive last-day boundary, sibling-owner/deleted/outside exclusion, invalid/oversized ranges, and unchanged provider/ICS contracts. Strict provider mocks prove no calendar-read provider access |
|
||||
| Types/full lint/build |Passed after source fixes. Initial typecheck found unsupported test query options and missing required error title; corrected, not relabelled passing. Final build includes TypeScript validation |
|
||||
| Rendered React |16 configs320/390/768/1440 × EN/NB × light/dark;48 whole-page axe scans/captures, zero violations/overflow/page errors/unexpected writes. Final rerun after upcoming-first order supersedes prior overlapping browser report |
|
||||
| Connected controlled journey |Three occupations; agenda date provenance, month/day selection, next-month empty and previous-month read, persisted view on reload, keyboard-linked deadline to application detail/context. Every API intercepted; no live backend/provider or mutations |
|
||||
| Independent review |No important/critical source findings;7 overlapping frontend cases passed. Awaiting empty state fixed reviewer's test-only act warning; no provider/backend/browser run independently repeated |
|
||||
|
||||
Native frontend/backend/browser evidence and source manifest are under [evidence/calendar](evidence/calendar). Native API tests use the repository SDK at C:\Users\Connor\.dotnet and no restore/network. Browser verifier: `rtk proxy node scripts/verify-a3-calendar.mjs` from job-tracker-ui against static export localhost4338. Pilot/previous-source reports overlap and are not added to totals. Selected browser fixture dates are recorded synthetic dates, never advertised as live appointments.
|
||||
|
||||
Rollback reverts this subpackage; no database/data rollback. Existing route, reminder rules/actions, provider consent, calendar export behavior, Career/CV/letter revisions and frozen package contracts remain. Full Phase10, Product Review, European localisation, Global Jobs, final integrated security and release acceptance remain open.
|
||||
|
||||
NOT RUN: real backend/browser integration, MariaDB, hosted CI, native devices/screen readers/touch/zoom, actual reminder delivery, Google/Outlook live calendar, timezone/precision migration, interview scheduling, final security/release qualification. The existing legacy follow-up export precision/timezone behavior is preserved, not newly qualified by the date-only calendar.
|
||||
|
||||
Next authorised work: narrowly reconcile validated document date patch ca519cac, complete document/inbox connected presentation and preservation checks, then publish complete IM07 evidence for its required Gate F. No provider activation or final UI08 gate is implied.
|
||||
@@ -0,0 +1,11 @@
|
||||
# Career/document publication and next owner gate
|
||||
|
||||
3 November 2026. Implementation `6f801251b0d44e0dfb18365ba3102a3d4d482313` on `codex/a3-ui-06` was pushed successfully. Independent `git ls-remote --heads origin refs/heads/codex/a3-ui-06` returned that exact commit. Committed source/evidence manifest verification matched all26 sources and151 evidence files with zero mismatches;80 static-export assets are separately hashed.
|
||||
|
||||
Local qualification:212 unique selected frontend cases/ten suites and103 isolated backend cases passed; types/full lint/build and final verifier lint/diff check passed. Full16-config browser matrix has96 axe scans; six EN/light boundary/focus configs have36 scans, four configs overlap,108 unique validated screenshots (plus one failed diagnostic PNG). All14 edit targets passed visible/unobscured focus at320/390/768/1000/1001/1440. Deliberate saves are intercepted fixtures only. Independent source review57 passing cases overlaps212; independent verifier review reconciled counts and fixture limits.
|
||||
|
||||
The original A3-IM06 implementation authorisation is satisfied within [CAREER_VALIDATION.md](CAREER_VALIDATION.md)'s scope. Owner then explicitly answered **"Approve Career/CV/letter and A3-IM07"**. Gate F is ACCEPTED; do not ask again. A3-IM07 Calendar/reminders/correspondence/documents is authorised, preserving closing-date provenance/precision/timezones, linked context, ICS/provider consent, attachment previews/downloads and mail conflicts/confirmed-send. Real provider activation remains separate. Earlier UI01–05 approvals remain accepted and must not be repeated.
|
||||
|
||||
Do not treat this as full Phase10, Product Review, European localisation, Global Jobs provider, import-engine, native-device, physical PDF, final integrated security or release acceptance. No main merge/deployment. Independent `ca519cac` date localisation and `de3d5031` security policy remain isolated; no older workstream source was wholesale merged. The generated graph remains local and untracked.
|
||||
|
||||
Next independent eligible candidate while the owner reviews: reproduce and localise fixed-decimal attachment size presentation in the existing attachment owners on the separate localisation branch. Follow the existing number-formatting contract, preserve units/thresholds and unknown/zero semantics, test EN/NB, then reconcile that small patch before any A3 integration. Final integration of completed isolated patches requires combined checks.
|
||||
@@ -0,0 +1,36 @@
|
||||
# A3-IM06 Career Profile and document workflows
|
||||
|
||||
3 November 2026. Owner approved **"Approve discovery and A3-IM06"**. Isolated `codex/a3-ui-06` starts at discovery receipt `027907a80666f7ddd51c848411ceaacec6768f20`. No unrelated workstream was merged. Local qualification is complete within the boundaries below; owner Gate F remains pending. Publication identity is recorded separately in CAREER_PUBLICATION.md.
|
||||
|
||||
Career overview now offers immediate edit actions for all fourteen existing canonical sections. Saved completeness indicators come from the server's existing seven-section assessment; unscored sections invite review, and unsaved drafts hide stale indicators. Editing projects and certifications now reaches every supported field through the existing canonical profile draft and versioned Save. Edits preserve opaque IDs, metadata and sibling facts. No new profile, score, API, schema or writer was introduced.
|
||||
|
||||
CV editing remains left and live preview right above 1000px; 768–1000px stacks both panes, and narrower phones retain the existing edit/preview switch. Cover letters use the same boundaries. Library cards reuse existing translated template labels while retaining unknown legacy IDs. A shared disabled-toolbar tooltip wrapper follows the existing MUI pattern. Renderers, physical document CSS, history/coalescing, autosave queues, conflict handling, null-as-inherit settings, frozen packages and RD21 remain unchanged.
|
||||
|
||||
| Evidence | Result and qualification boundary |
|
||||
|---|---|
|
||||
| Initial baseline |142 tests / seven suites passed before implementation; historical baseline, not added to final total |
|
||||
| Test-first regressions |Canonical project/certification controls, fourteen section edit destinations, tablet CV mode, friendly library names and tablet letter preview reproduced missing behavior before fixes |
|
||||
| Final frontend selection |212 unique selected cases / ten suites passed, zero failed/pending; latest full execution per disjoint suite in `a3-career-final-selection.json` |
|
||||
| Backend preservation |103 passed, zero failed/skipped: CareerProfileServiceTests, CvRevisionReadinessTests, CoverLetterWriterTests, CvBuilderTests; InMemory/temporary SQLite and mocked exporter/summarizer, not MariaDB/live models or physical PDF acceptance |
|
||||
| Types / full lint / production build |Passed after final application changes; final browser harness scoped zero-warning lint and diff check also passed |
|
||||
| Independent review |No actionable source or verifier safety findings.57 cases / three suites independently passed, overlapping212. Separate verifier review independently reconciled browser counts and unavailable fixture reads; browser/backend/build not independently rerun |
|
||||
| Rendered browser matrix |16 configurations:320/390/768/1440 × EN/NB × light/dark;96 whole-page axe scans, zero violations/overflow/page errors/unexpected writes. Six screens per journey:overview,profile,import review,library,CV editor,letter |
|
||||
| Boundary/focus checks |Six EN/light configurations:320/390/768/1000/1001/1440;36 scans, zero violations. All14 direct edit targets have visible/unobscured focus; CV/letter stack through1000 and split at1001. Four configurations overlap the main matrix:108 unique screen/config captures overall, not132 unique cases |
|
||||
| Fixture mutation boundaries |Main matrix48 explicit saves, boundary run18; three per journey:canonical project save preserving IDs/metadata/certifications/raw source, document-only rename preserving settings/version, manual letter save preserving revision precondition. All fulfilled in memory; no real API writes |
|
||||
| Publication |See CAREER_PUBLICATION.md for exact commit/ref and independent readback |
|
||||
|
||||
The broad intermediate frontend run passed152 of153 cases and failed an existing typing-burst undo test. Production history code was unchanged. The test's simulated synchronous burst crossed its real one-second grouping clock under slow rendering. An unchanged isolated rerun passed. The fixture now pins only that simulated burst's clock and restores it in `finally`; a separate regression advances two seconds and requires two undo steps. The complete59-case studio suite then passed. Earlier failed reports remain FAILED, with that suite superseded by the later complete studio execution; totals never add overlapping runs.
|
||||
|
||||
Two early tablet attempts lacked `matchMedia` in JSDOM and are harness failures, not behavioral red evidence. A corrected viewport fixture reproduced the actual old768px mobile-mode behavior. The first browser pilot assumed desktop tabs on phones; the source already uses a mobile selector. The corrected pilot completed six scans and three fixture mutations. A visibility probe initially sampled the mobile selector's exiting invisible modal backdrop; the verifier now waits for unobscured focus rather than weakening application behavior. No source fix was needed for these harness issues.
|
||||
|
||||
Source imports, review/retention/conflict/history and render contracts are covered by selected existing frontend/backend tests; browser import review exercises the legacy pending comparison, low-confidence selection and no Apply. It does not qualify a parser, model or the separately deferred CV-import overhaul. Controlled CV HTML previews are not real exporter output. Prior accepted physical PDF metrics/visual evidence is reused only for unchanged renderer/fixture sources; no fresh PDF or native-language visual acceptance is claimed.
|
||||
|
||||
No production backend, provider, model or source data is accessed by the browser verifier. Every API request is intercepted; unavailable secondary reads are recorded and appear as honest unavailable states (company list, optional thumbnail preview and linked-CV assistance). Deliberate Career Save, CV rename and letter Save are in-memory fixture mutations. All external requests are blocked. Fixed mobile navigation can appear within a full-page scroll capture; screenshots do not establish native-device behavior. Representative mobile320,tablet768,boundary1001 and desktop1440 captures were visually inspected; this is scoped engineering review, not owner/native-language acceptance.
|
||||
|
||||
Native reports, failed attempts, captures and source/evidence manifest are under [evidence/career](evidence/career). There are108 unique validated screen captures plus one FAILED-focus.png diagnostic,109 PNG files total. Frontend aggregate references reports in its own frontend directory. To repeat rendered checks from job-tracker-ui against the built static export on localhost4338: `rtk proxy node scripts/verify-a3-career.mjs`; set `A3_BOUNDARY=1` for the six additional boundary/focus configurations. The pilot is an overlapping diagnostic, never added to the final total. AST-only graphify update passed; missing optional SQL parser and symbol-less file diagnostics remain tool limitations, with no LLM/provider activation.
|
||||
|
||||
Rollback reverts this presentation/control increment on its feature branch; no data/database rollback is required. Version guards and existing conflict recovery remain required. The independent document-date patch `ca519cac` and root security policy `de3d5031` remain separate. All188 historical dynamic translation-call reviews are accounted for; this increment's paired literal EN/NB keys do not complete European localisation.
|
||||
|
||||
NOT RUN: real backend/browser end-to-end, MariaDB, hosted CI, native screen reader/device/touch/zoom, live models/providers, physical PDF rerender, final integrated security/recovery/release. Phase10, Product Review, Global Jobs, European localisation and release acceptance remain open. No main merge or production deployment.
|
||||
|
||||
Next mandatory Gate F: owner review of this published increment before A3-IM07 Calendar/reminders/correspondence/documents. Preserve deadline date precision, consent, existing ICS/export and confirmed-send boundaries. Other independently eligible roadmap work may continue while that decision is pending.
|
||||
@@ -0,0 +1,9 @@
|
||||
# Dashboard publication and Gate F receipt
|
||||
|
||||
3 November 2026. Implementation `c7d26d354c44b0bdd2976cf2f1c2b0737d7cc2d2` on `codex/a3-ui-03` was pushed successfully. Independent `git ls-remote --heads origin refs/heads/codex/a3-ui-03` returned the same full hash. Committed source/evidence manifest verification returned zero mismatches (23 sources,42 evidence artifacts; export hashes retained separately).
|
||||
|
||||
Navigation Gate F is accepted by the owner's exact reply **"Approve navigation and A3-IM03"**. Dashboard/onboarding Gate F is now pending; the question submitted in this chat requests acceptance and progression to A3-IM04 B1 application table/Kanban/full detail pages, retaining actions, revision/permission protections and right-side context. Do not begin that dependent work until answered. Independent localisation continues separately; no automatic branch combination.
|
||||
|
||||
See [qualification](DASHBOARD_VALIDATION.md) and [desktop capture](evidence/dashboard/browser/dashboard-en-light-1440.png), [mobile walkthrough](evidence/dashboard/browser/walkthrough-nb-dark-320.png). UI03's checklist item for owner acceptance remains open deliberately. This receipt does not accept Phase10, security or release readiness.
|
||||
|
||||
Git printed Windows filename-too-long warnings for unrelated Codex turn-diff checkpoint refs during commit. The application branch commit, source-manifest check, push and independent remote readback succeeded. No Git infrastructure/refs/hooks/configuration was repaired or bypassed. Worktree is clean except existing untracked generated graphify-out.
|
||||
@@ -0,0 +1,39 @@
|
||||
# A3-IM03 dashboard and onboarding qualification
|
||||
|
||||
3 November 2026. Owner accepted navigation992608c7 and explicitly answered **"Approve navigation and A3-IM03"**. This authorises this increment; the next milestone still requires Gate F review under the approved A3 implementation proposal. Publication receipt follows after committing.
|
||||
|
||||
## Implemented scope
|
||||
|
||||
New/reset defaults put Today first, Your week left and pipeline right, then metrics and retained analytics. Saved layouts retain order, hidden positions and geometry. All nine original widget IDs remain; one additive `agenda` ID is accepted by the existing schema2 server validator. Existing saved layouts append it hidden. No migration, endpoint or dependency change. Personal greetings use recorded first/display names only; unnamed accounts retain Dashboard.
|
||||
|
||||
Your week uses strictly parsed, recorded deadlines and follow-ups within seven local calendar days, from the existing attention feed. Date-only deadlines retain their calendar date and raw datetime attribute. Missing/free-text/invalid dates are omitted. It displays at most three entries and links to Reminders; it does not claim complete calendar or interview coverage. Full calendar remains A3-IM07 work.
|
||||
|
||||
Setup moves below the task dashboard. Existing dismissal keys still work; dismissal exposes a resume/walkthrough entry. Individual skips persist per owner and never increase completion. Completion remains based on the existing account/Career/mail/job reads. Walkthrough steps link to existing destinations, explain optional import/mail consent, support previous/next/close and focus return. No guidance action writes source data, grants access, or blocks manual tracking. Existing loading/error/retry remains.
|
||||
|
||||
## Fresh evidence
|
||||
|
||||
| Check | Result and boundary |
|
||||
|---|---|
|
||||
| Baseline | 71 frontend tests /9 suites PASSED before changes |
|
||||
| Test-first new behavior | Six frontend failures reproduced before implementation; backend agenda acceptance failed before whitelist addition |
|
||||
| Final selected frontend | 95 tests /12 suites PASSED, zero failed; dashboard/grid/CAS hook/customisation/presentation/onboarding/dates/control-loop/navigation/metadata/catalogue/provider. Baseline, red runs and reviewer45 overlap; do not add totals |
|
||||
| Backend layout | 36 DashboardPreferencesTests PASSED, zero failed/skipped; isolated SQLite HTTP host, real owner/CAS/bounds/collision/legacy tests. New agenda test rejects unknown IDs and overlap. Focused green1 overlaps36 |
|
||||
| Typecheck / full lint / build | PASSED on combined UI03 + localisation5e8a07d1 tree; zero-warning lint, fresh static export |
|
||||
| Actual React browser | 16 configurations: widths320/390/768/1440 × EN/NB × light/dark; 32 whole-page axe scans, zero returned violations;32 PNGs |
|
||||
| Connected journeys | All16: week dates/order, no overflow, desktop week/pipeline row, skip/reload/resume, dismiss/reload/resume, guide next/close/focus, hide agenda/save/reload |
|
||||
| Write boundary | 16 explicit layout PUTs fulfilled by in-memory fixtures; zero unexpected writes/page errors. Guidance causes zero writes. Every external request aborted; Google Fonts attempts are not provider validation |
|
||||
| Independent review | No actionable findings. Reviewer45 tests /3 suites PASSED, overlapping95; did not independently rerun backend/browser/build |
|
||||
|
||||
Native JSON/TRX, captures and source-bound hashes are in [evidence/dashboard](evidence/dashboard). Browser harness: `rtk proxy node scripts/verify-a3-dashboard.mjs` from job-tracker-ui against the static export on localhost4338. Browser persistence is controlled in-memory API behavior, separate from real backend SQLite tests; this is not an integrated database E2E pass. Screenshots use synthetic nurse, teacher and engineer data; English job descriptions in Bokmål UI are source content, not translated UI labels. Fixed-header placement in full-page scroll captures is a browser capture artifact, not a native-device result.
|
||||
|
||||
New catalogue keys are paired EN/NB and covered by catalogue QA. The existing widget-title dynamic domain now has ten IDs, including agenda, each backed by both catalogues. All188 historical dynamic reviews remain accounted for; full European localisation is still open. The independent mobile build-metadata fix is now combined and included in selected tests. Prior navigation/foundation evidence remains historical source-bound evidence, not a fresh full rerun.
|
||||
|
||||
## Preservation, recovery and open gates
|
||||
|
||||
Schema2 bounds, collisions, CAS and ownership remain in their existing owners. No route declarations or permission flags changed. Career Profile, CV/letter revisions, null-as-inherit overrides and RD21 owners are untouched. No physical document renderer changes warrant reopening accepted PDF metrics/visuals.
|
||||
|
||||
Rollback: revert this increment on the feature branch, retaining localisation5e8a07d1. No source job/profile data or database schema is changed. An old build may ignore/omit the new agenda preference on a subsequent layout save; all nine old widgets remain compatible. Production rollout/rollback qualification is still required before deployment. Existing layouts are never automatically reset.
|
||||
|
||||
NOT RUN: MariaDB, real backend/browser integrated journeys, hosted CI, native device/touch/screen reader/actual zoom, real provider/mail/model workflows, final integrated security, live recovery or release acceptance. No production services were accessed. Phase10 final acceptance and the wider roadmap remain open. The broader calendar and remaining A3 screens are not complete.
|
||||
|
||||
Next protected dependency: owner Gate F review of this dashboard/onboarding increment before A3-IM04 B1 application table/Kanban/detail implementation. Other independently eligible work remains authorised.
|
||||
@@ -0,0 +1,7 @@
|
||||
# Discovery publication and owner acceptance
|
||||
|
||||
3 November2026. Implementation `c9c6b1abc1f87a907d1e37062cfa5e2ed3fd933c` on codex/a3-ui-05 pushed successfully; independent remote readback matched. Committed source/evidence manifest had zero mismatches (14 sources,54 evidence files;80 exported assets separately hashed).
|
||||
|
||||
Owner then explicitly answered **"Approve discovery and A3-IM06"**. Discovery Gate F is ACCEPTED; do not ask again. Next authorised scope is Career Profile overview, CV library/editor/templates/import review and cover-letter presentation, preserving canonical ownership, editor-left/preview-right, null-as-inherit, undo/save/conflicts/history, frozen packages and RD21. Deferred CV-import engine overhaul remains excluded. This acceptance does not accept Global Jobs provider expansion, Phase10, final integrated security or release readiness.
|
||||
|
||||
See DISCOVERY_VALIDATION.md and UI-05.md for evidence/boundaries. The original integration/UI01–04 refs remain separate. Root security policy de3d5031 and document-date ca519cac remain on their independent branches and are not silently included.
|
||||
@@ -0,0 +1,31 @@
|
||||
# A3-IM05 existing discovery presentation qualification
|
||||
|
||||
3 November2026. Owner explicitly answered **"Approve applications and A3-IM05"**. Branch codex/a3-ui-05 starts at accepted application receipt172074e9. No older design tree or unrelated implementation branch merged.
|
||||
|
||||
Filters and saved searches form a left rail beside a single result list above1000px. Narrow screens preserve filters-before-results DOM order; Jump to results and Return to search filters move focus without requests or route changes. Source coverage explanation is above both columns. Existing query/location fields, sort, saved-search create/run/pause/delete/dismiss, source attribution/provenance/original links, Save-to-tracker route and busy/empty/error/retry owners remain unchanged. Added only three paired EN/NB labels. UI language does not translate source content.
|
||||
|
||||
This is presentation of the existing NAV workflow. No new country, provider, radius, taxonomy, matching or in-app full-description capability was fabricated. Global Jobs' future three-pane authorised-detail experience depends on GJ prerequisites, rights and actual data contracts. GJ-00 planning is separate; GJ-01+ acceptance/provider activation is not implied. Source master and initial planning pack were read at `E:\Storage\Projects\Active\Job tracker\docs\planning\global-jobs-prompts\` because this older integration branch does not contain that pack. The original external source's provider/prerequisite constraints remain intact.
|
||||
|
||||
| Evidence | Result and boundary |
|
||||
|---|---|
|
||||
| Baseline |21 discovery tests passed before edits |
|
||||
| Test-first focus contracts |Two EN/NB missing-landmark failures reproduced before implementation |
|
||||
| Final frontend |32 tests/3 suites passed: discovery23, provider6, catalogue3; reviewer23 and baseline overlap, not additional cases |
|
||||
| Backend preservation |14 passed, zero failures/skips: JobDiscoveryControllerTests, SavedJobSearchSqliteTests, SavedJobSearchAlertTests. Synthetic HTTP handler/FakeDiscovery, InMemory/isolated SQLite; no live NAV/provider request or app worker activation |
|
||||
| Types/full lint/build |Passed; new browser script also passed scoped zero-warning lint |
|
||||
| Built React browser |16 conditions:320/390/768/1440 × EN/NB × light/dark;48 whole-page axe scans, zero violations,48 PNGs |
|
||||
| Connected journeys |All16: initial guidance/no automatic provider search, keyboard jump/return, wide/stack geometry, three-occupation search, save nurse/Oslo query, pause alerts, manual saved run, retained original link, dismiss and separately confirmed deletion |
|
||||
| Mutation boundary |80 explicit requests fulfilled only by in-memory fixtures:16 each create/pause/run/dismiss/delete. Zero unexpected writes/page errors. All external requests aborted; no real backend/provider writes |
|
||||
| Independent review |No actionable findings;23 tests/one suite passed independently, overlapping32. Reviewer did not independently execute browser/backend |
|
||||
|
||||
Native reports/captures and source manifest: [evidence/discovery](evidence/discovery). Browser harness runs from job-tracker-ui: `rtk proxy node scripts/verify-a3-discovery.mjs`, against the static export on localhost4338. Synthetic nurse/teacher/engineer listings are fixtures, never represented as current live search results. Source data remains in its original language even in Bokmål UI.
|
||||
|
||||
Two harness defects were corrected: initial URL used a nonexistent /jobs/discover path instead of /discover; immediate uncheck assumed optimistic switch state. The final verifier clicks the control and waits for the existing backend-acknowledged state. No application behavior was weakened to satisfy either harness issue. Failed attempts are not passing journeys. Fixed bars can appear within full-page scroll captures; native-device layout is not qualified by those captures.
|
||||
|
||||
Existing unit coverage retains sorting/metadata, initial versus empty results, saved-list validation/loading/retry, per-search result boundaries, stale-free request snapshots, failure-retained drafts/toggles/deletion/dismissal, duplicate-start prevention, current-language errors without replay, and explicit mutation recovery. These are controlled contracts; the browser did not repeat every failure path or perform actual Save-to-tracker import.
|
||||
|
||||
No backend/schema/API/dependency/revision writer/route or physical document renderer changes. Existing owner/persistence/right checks stay with their services. Rollback reverts this UI increment; no database or data rollback. The separate ca519cac document-date patch and de3d5031 security policy are not silently combined here.
|
||||
|
||||
NOT RUN: live NAV/commercial providers, MariaDB, real backend/browser end-to-end, hosted CI, native screen-reader/device/touch/actual zoom/native-language review, final integrated security/recovery/release. Complete Product Review, Global Jobs, European localisation and Phase10 remain open. No production/main changes.
|
||||
|
||||
Next protected dependency: publish/remote verify and owner Gate F before A3-IM06 Career overview/CV/letter workflows. Deferred CV-import engine overhaul remains excluded; canonical Career Profile, null-as-inherit settings, undo/save/conflict/history and RD21 must be preserved.
|
||||
@@ -0,0 +1,216 @@
|
||||
# Jobjakt — Gate F Approval and Continued Autonomous Development
|
||||
|
||||
## Owner decision: APPROVED
|
||||
|
||||
I approve the **A3 UI-01 Foundation checkpoint under Gate F**.
|
||||
|
||||
The approved checkpoint includes:
|
||||
|
||||
- Updated palette and typography.
|
||||
- Shared UI controls.
|
||||
- Quieter, more consistent surfaces.
|
||||
- Light and dark theme foundations.
|
||||
- English and Norwegian compatibility.
|
||||
- Responsive foundation across the tested viewport widths.
|
||||
|
||||
Reported verification:
|
||||
|
||||
- 35 targeted tests passed.
|
||||
- 48 scoped browser/accessibility checks passed.
|
||||
- TypeScript typecheck passed.
|
||||
- Lint passed.
|
||||
- Build passed.
|
||||
- Application commit: `bdd1de0d`.
|
||||
- Latest branch receipt: `0d6de714`.
|
||||
- Remote publication verified.
|
||||
|
||||
This approval authorises progression beyond the foundation increment.
|
||||
|
||||
It does not constitute production acceptance or waive unperformed integration, accessibility, security or release testing.
|
||||
|
||||
## 1. Continue A3 implementation
|
||||
|
||||
Proceed immediately with the next authorised A3 milestone: **navigation**.
|
||||
|
||||
Preserve the approved A3 design direction:
|
||||
|
||||
- D1 visual foundation.
|
||||
- Original A1 dashboard.
|
||||
- B1 application tracking.
|
||||
- Labelled, grouped and collapsible desktop sidebar.
|
||||
- Hybrid mobile navigation.
|
||||
- CV editor left and live preview right.
|
||||
- Full application-detail pages with contextual information on the right.
|
||||
- Career Profile overview first.
|
||||
- Calendar agenda first, with month-view option.
|
||||
- Automation controls under Settings.
|
||||
- Contextual, optional AI assistance.
|
||||
- Optional, resumable onboarding.
|
||||
|
||||
Do not restart design exploration.
|
||||
|
||||
## 2. Complete as much authorised work as possible
|
||||
|
||||
I want you to continue development autonomously, making substantial progress without unnecessary interruptions.
|
||||
|
||||
After navigation, proceed through the remaining A3 milestones in their approved dependency order:
|
||||
|
||||
- Dashboard and application tracking.
|
||||
- Application details.
|
||||
- Career Profile.
|
||||
- CV Builder and import workflows.
|
||||
- Cover-letter editing.
|
||||
- Job discovery.
|
||||
- Calendar and correspondence.
|
||||
- Documents and administration.
|
||||
- Settings and automation.
|
||||
- Optional onboarding.
|
||||
- Responsive mobile refinement.
|
||||
- Integrated UI/UX qualification.
|
||||
|
||||
Follow the actual approved A3 implementation plan and existing preservation requirements.
|
||||
|
||||
For each increment:
|
||||
|
||||
1. Inspect the existing implementation.
|
||||
2. Implement the approved changes.
|
||||
3. Fix bounded defects.
|
||||
4. Run relevant tests.
|
||||
5. Validate responsive layouts and both themes.
|
||||
6. Verify English/Norwegian behaviour.
|
||||
7. Check accessibility.
|
||||
8. Verify preservation of existing functionality.
|
||||
9. Commit validated changes.
|
||||
10. Push where available.
|
||||
11. Record evidence and continuation status.
|
||||
12. Proceed to the next authorised increment.
|
||||
|
||||
Avoid repeatedly asking permission for ordinary reversible implementation decisions already covered by the approved design.
|
||||
|
||||
## 3. Milestone approvals
|
||||
|
||||
I want maximum autonomous progress, but genuine mandatory owner gates remain in force.
|
||||
|
||||
Where the approved implementation plan requires an owner milestone review:
|
||||
|
||||
- Complete the increment.
|
||||
- Prepare the review evidence and screenshots.
|
||||
- Record the exact proposed next scope.
|
||||
- Request the required approval.
|
||||
- Do not bypass that gate.
|
||||
|
||||
While awaiting approval, continue other independently authorised tasks that do not depend on the blocked milestone.
|
||||
|
||||
Do not treat my Gate F approval as blanket approval of all future protected gates.
|
||||
|
||||
Where the authoritative plan allows automatic progression, proceed without stopping.
|
||||
|
||||
## 4. Preserve the complete application
|
||||
|
||||
The A3 design handoff identifies 57 preservation groups and 34 routes.
|
||||
|
||||
Ensure every existing function remains available unless removal has been separately authorised and qualified.
|
||||
|
||||
Pay particular attention to:
|
||||
|
||||
- Career Profile persistence.
|
||||
- CV revisions and undo/redo.
|
||||
- Existing CV and cover-letter documents.
|
||||
- Imports and exports.
|
||||
- Authentication and account security.
|
||||
- Job application data.
|
||||
- Dashboard customisation.
|
||||
- Administration permissions.
|
||||
- RD21 data-integrity protections.
|
||||
- Existing integrations and automations.
|
||||
|
||||
Do not simplify away advanced features merely because they were absent from a design prototype.
|
||||
|
||||
## 5. Continue the wider roadmap
|
||||
|
||||
Continue independently eligible work across:
|
||||
|
||||
1. Phase 10 completion and acceptance.
|
||||
2. PRODUCT-REVIEW-01.
|
||||
3. International Global Job Search.
|
||||
4. Full European localisation.
|
||||
5. A3 application UI/UX implementation.
|
||||
6. Multilingual homepage redesign.
|
||||
7. Security audit and remediation.
|
||||
8. Release-readiness preparation.
|
||||
|
||||
Respect dependencies, explicit owner decisions and authoritative acceptance gates.
|
||||
|
||||
Coordinate Global Job Search, translations and A3 so their implementations do not conflict.
|
||||
|
||||
Do not repeat accepted work unnecessarily.
|
||||
|
||||
## 6. Blockers and continuation
|
||||
|
||||
If a task cannot proceed:
|
||||
|
||||
- Record the exact blocker.
|
||||
- Identify its impact and dependency.
|
||||
- Preserve completed work.
|
||||
- Continue another independently eligible task.
|
||||
- Revisit the blocker only when new evidence or an approval makes progress possible.
|
||||
|
||||
Maintain the existing durable roadmap continuation records.
|
||||
|
||||
Do not build or reactivate the autonomous orchestrator.
|
||||
|
||||
Do not spend development time fixing unrelated Git infrastructure issues.
|
||||
|
||||
Never claim unsuccessful publication or unperformed tests passed.
|
||||
|
||||
## 7. Validation expectations
|
||||
|
||||
Continue targeted verification throughout development.
|
||||
|
||||
Run broader regression suites when required by the approved milestone gates.
|
||||
|
||||
Keep these statuses distinct:
|
||||
|
||||
- Implemented.
|
||||
- Tested.
|
||||
- Accepted.
|
||||
- Published.
|
||||
- Production-ready.
|
||||
|
||||
The UI-01 browser checks do not qualify real backend journeys, native-device accessibility or integrated security.
|
||||
|
||||
Those requirements remain open.
|
||||
|
||||
## 8. Git and production restrictions
|
||||
|
||||
Use the existing authorised development branches and worktrees.
|
||||
|
||||
Verify the correct integration baseline before combining workstreams.
|
||||
|
||||
Commit and publish validated checkpoints when possible.
|
||||
|
||||
Do not merge into `main`.
|
||||
|
||||
Do not deploy production.
|
||||
|
||||
Do not activate unqualified AI models.
|
||||
|
||||
Do not perform destructive migrations without approval.
|
||||
|
||||
## Final instruction
|
||||
|
||||
**Gate F is approved for the A3 UI-01 Foundation checkpoint.**
|
||||
|
||||
Proceed immediately to navigation implementation.
|
||||
|
||||
Then continue through as much of the remaining authorised A3 overhaul and wider Jobjakt roadmap as possible.
|
||||
|
||||
Prioritise completing functional, integrated user journeys rather than accumulating disconnected partial implementations.
|
||||
|
||||
Minimise unnecessary interruptions.
|
||||
|
||||
Pause only for genuine mandatory decisions, and continue independent work whenever another task is blocked.
|
||||
|
||||
Keep the roadmap, test evidence and remaining approval items updated.
|
||||
|
||||
Do not merge into main or deploy production.
|
||||
@@ -0,0 +1,39 @@
|
||||
# A3-IM02 navigation validation and review
|
||||
|
||||
Status: implemented and tested; owner Gate F navigation review remains OPEN before dashboard/onboarding A3-IM03. Foundation Gate F is already accepted, not reopened. See UI-02.md for preserved owners and exact next scope.
|
||||
|
||||
## Fresh scoped evidence
|
||||
|
||||
| Check | Result / scope |
|
||||
|---|---|
|
||||
| Baseline | 15 tests / 3 suites PASSED before navigation edits; BASELINE.json |
|
||||
| New primary-navigation tests | Five expected failures before implementation; desktop preservation case already passed |
|
||||
| Current-route regression | Reproduced drawer staying open; fixed in shared handler; red/green case retained |
|
||||
| Final selected Jest run | 49 tests / 9 suites PASSED; FINAL_TESTS.json. Intermediate32/17 and reviewer11 overlap this total, not extra cases |
|
||||
| Typecheck / lint / production build | PASSED; built static export used API base /api for controlled loopback checks |
|
||||
| Real React screen matrix | 32 conditions: login + Companies × 320/390/768/1440 × EN/NB × light/dark |
|
||||
| Dialog and navigation accessibility | 56 scoped axe sweeps, zero returned violations: 32 complete screen surfaces, 16 company dialogs, 8 mobile More drawers |
|
||||
| Connected browser checks | 16 configurations: primary route selection and heading focus, secondary navigation, collapse persistence or More/Escape/current-route selection, reviewed synthetic company edit/save and phone notification clearance |
|
||||
| Primary routes | All four primary shell destinations visited in each configuration (64 transitions). API-unavailable content states are permitted; this verifies navigation/focus, not successful domain/backend journeys |
|
||||
| Write safety | 16 explicit company PUTs intercepted and fulfilled by local browser fixtures; zero requests reached a backend. Unexpected write methods/paths rejected; no unexpected writes or page exceptions observed |
|
||||
| Captures | 56 PNGs: 32 screens + 8 More drawers + 8 collapsed desktop/tablet + 8 phone notification states |
|
||||
| Preservation census | All 57 inherited groups retained; all 34 inherited route declarations present. Source membership is not complete functional or authorisation acceptance |
|
||||
| Independent source review | No important/critical findings. Conservative extra safe-area clearance noted; native notched-device review still pending |
|
||||
|
||||
The browser lane is the actual built React application, with controlled service responses, not the design prototype. It rejects every external request; 40 existing Google Fonts attempts were aborted. Provider/model/production services were never contacted. Only Companies has a successful synthetic mutation fixture; other core destination content may display honest unavailable-service states. No model was started. Main document/page renderer sources are unchanged.
|
||||
|
||||
During verification, a mistyped translation test path produced a failed harness run (two real suites/eight cases passed); corrected to the existing catalogue/provider files, then final nine-suite run passed. A broad alert selector also matched Next's route announcer; narrowed to the actual Snackbar feedback. These are resolved harness defects, not hidden passing tests. Layout review reproduced broken English labels at320px: content-based flex widths with minimum44px targets fixed them while retaining11px labels and long-text wrapping. The final browser assertions require Dashboard and Applications to fit one line in English.
|
||||
|
||||
No original concepts were regenerated. No route, advanced workflow, permission, document revision, schema, dependency, controller or production configuration was removed. Route declarations are unchanged; navigation grouping is changed deliberately. Existing admin visibility flags, router/legacy redirects, quick search, notification count semantics, desktop storage and ownership disposal remain in their existing owners.
|
||||
|
||||
## Review examples
|
||||
|
||||
- [Phone navigation](evidence/navigation/companies-en-light-320.png).
|
||||
- [Bokmål dark desktop](evidence/navigation/companies-nb-dark-1440.png).
|
||||
- [More drawer](evidence/navigation/more-en-light-390.png).
|
||||
- [Notification above the bar](evidence/navigation/feedback-nb-dark-320.png).
|
||||
- [Collapsed sidebar](evidence/navigation/collapsed-en-light-1440.png).
|
||||
|
||||
Run the installed harness from job-tracker-ui against the current static export on loopback port4338: `rtk proxy node scripts/verify-a3-theme.mjs --navigation`. This mode writes only evidence/navigation; historical foundation artifacts stay unchanged. SOURCE_MANIFEST.json binds final source, native reports, captures and exported assets. Historical foundation source hashes remain bound to bdd1de0d, not falsely reused as new navigation results.
|
||||
|
||||
NOT RUN: real database/backend workflows, hosted CI, real identity/mail/job providers, AI models, physical PDF/container requalification, native screen reader/touch/software keyboard, actual browser zoom, native-language review, final integrated security or release-readiness acceptance. Those gates remain separate. Full A3 UI/UX implementation is not complete.
|
||||
@@ -0,0 +1,38 @@
|
||||
# UI-01 — approved A3 foundation implementation
|
||||
|
||||
Status: A3-IM01 foundation ACCEPTED under Gate F by explicit owner attachment a178edeb-c3ef-4c0e-b4c2-bcd1ca84b90b, 3 November 2026. Do not repeat that approval request. Navigation A3-IM02 proceeds on codex/a3-ui-02; see UI-02.md. Original implementation branch `codex/a3-ui-01`, isolated integration worktree. Base `d3d338376444b8abdcaf7200f682faa3daf1ad10`; design source `237c79b8cb3e280d7e4d1ef95cdbb2c77bb81c69`; roadmap receipt `286535bef046417a09a156685c937e8be9155147`.
|
||||
|
||||
Owner's 3 November 2026 attachment explicitly approves the final A3 foundation and staged real-application implementation. Verbatim authorisation is retained in A3_APPROVAL.md. Gates C/D/E are approved for that scope; deployment, Phase 10, security/provider/native/device/release gates are not waived.
|
||||
|
||||
## Task ledger and verification plan
|
||||
|
||||
- [x] Verify branch/commits and use accepted integration baseline; preserve existing worktrees. Created implementation branch in the already isolated integration worktree, keeping its original branch ref unchanged. No wholesale merge of the older design tree.
|
||||
- [x] Baseline: four existing theme/dialog suites, 28 tests PASSED before production edits.
|
||||
- [x] A3-IM01: approved D1 palette, typography, quiet surfaces and shared controls implemented through existing theme.ts. Added visual-contract regression checks; retained semantic contrast, theme/system persistence, focus, reduced-motion, density and dialog checks.
|
||||
- [x] Targeted tests, types, lint, production build and actual application browser checks in EN/NB, both themes and mobile/desktop. See VALIDATION.md for exact source scopes and pending human/zoom checks.
|
||||
- [x] Validated checkpoint `bdd1de0dd3259e4e9e9f46c81948f865317c6054` committed, pushed to origin/codex/a3-ui-01 and independently confirmed by git ls-remote. No infrastructure repair. Subsequent documentation receipts do not change this immutable application/evidence identity.
|
||||
- [x] Gate F foundation review approved by the owner in GATE_F_FOUNDATION_APPROVAL.md. Navigation is A3-IM02, separately implemented and reviewed.
|
||||
|
||||
Scope reaches the existing ThemeProvider and every MUI theme consumer, including navigation semantic colours and shared fields/buttons/cards/dialogs. Preserve component APIs, routes, application state, server data ownership, RD21 and physical CV/PDF renderers. No dependency, API or database changes. Existing semantic status colours must retain readable contrast on all new surfaces; dividers are decorative and do not replace stronger essential field boundaries.
|
||||
|
||||
Ruling: use targeted shared-theme/dialog/state checks and relevant browser workflows rather than thousands of unrelated tests, following the owner's explicit evidence/testing instructions. Backend tests are unnecessary unless backend behaviour is changed. Prototype tests are not application qualification.
|
||||
|
||||
Ruling: approved global MUI roles will also be inherited by existing public React consumers; this is shared theme plumbing, not selection or implementation of a new homepage layout/claims/SEO. Keep the existing gradient API and physical document rendering untouched. Later launch-site decisions remain separate.
|
||||
|
||||
Rollback: revert this UI increment on its development branch; no persisted data/schema change. Re-run affected theme/layout checks. Never reset unrelated work or alter the autonomous orchestrator.
|
||||
|
||||
## Implemented behaviour
|
||||
|
||||
Shared MUI theme now uses approved violet canvas/text/accent/navigation roles in both schemes; existing state synchronisation/storage remains unchanged. App chrome uses the approved system font stack, more readable body rhythm and responsive page-title hierarchy. Shared cards use restrained borders without floating section shadows. Buttons use sentence case and 44px base height; outlined fields retain their notched focus indicator and now have a 44px base height. Existing density hit-region rules remain in force. Actual navigation structure and feature layouts are not represented as implemented yet.
|
||||
|
||||
Contrast verification exposed the old dark error role at 4.275:1 on the new elevated surface. Corrected dark error main/darker fills to #FF8A80/#FF7067 with explicit dark contrast text; thresholds were not lowered. Final semantic contrast tests pass, and code review checked standard alert text against composited surfaces. CV/template/letter previews use isolated document HTML; physical renderer source, fonts, metrics, fixtures and historical document acceptance were not changed.
|
||||
|
||||
Independent code review: no important/critical findings. Accepted minor recommendation to assert every collected scoped axe violation array, rather than only colour contrast. Reviewer's 16 theme tests overlap the final 30 and must not be added to them. Initial two-width browser artifact was superseded by the final four-width run, not added as extra coverage.
|
||||
|
||||
## Continuation and review gate
|
||||
|
||||
Actual selected validation: 30 theme/state/dialog tests in five suites plus five disjoint navigation/CV-thumbnail tests in two suites; baseline28 and review16 are overlapping and excluded from that35. Full typecheck/lint/build passed. Final actual React browser lane:32 screen conditions,16 keyboard dialog journeys,48 scoped axe sweeps with zero returned violations,32 screenshots, zero page exceptions or attempted backend writes. All32 existing Google font requests aborted. No physical document or native/human acceptance reopened.
|
||||
|
||||
Historical pre-approval gate note (now satisfied by the explicit attachment above): the approved design handoff `docs/product-modernisation/08-a3-handoff/IMPLEMENTATION_PROPOSAL.md` at design checkpoint237c79b8, A3-IM01 row says "Owner milestone review before next increment." User's ordinary-implementation authorisation persists; do not ask about individual reversible changes after the relevant milestone entry is authorised.
|
||||
|
||||
Next UI task after that review: retain all34 routes and57 groups while implementing the approved labelled grouped/collapsible desktop sidebar and hybrid mobile navigation through existing AppShell/router owners. Do not merge this branch into main or activate deployment. The original codex/direct-roadmap-integration ref remains at d3d33837; its existing isolated worktree is currently checked out on codex/a3-ui-01. Generated graph is untracked (18,714 nodes/46,204 edges). Design approval record b7051a3e is local-only on the prototype branch; do not publish that restricted branch.
|
||||
@@ -0,0 +1,27 @@
|
||||
# A3-IM02 — navigation
|
||||
|
||||
Status: IMPLEMENTED and TESTED; Gate F navigation review OPEN before the next dependent increment. Branch codex/a3-ui-02 from approved foundation receipt 0d6de714. Owner attachment a178edeb-c3ef-4c0e-b4c2-bcd1ca84b90b explicitly accepts foundation Gate F and authorises navigation; later protected milestone reviews remain separate. Verbatim approval: GATE_F_FOUNDATION_APPROVAL.md. Publication receipt is recorded in the continuing roadmap handoff.
|
||||
|
||||
Review [navigation evidence and screenshots](NAVIGATION_VALIDATION.md): final 49 tests / 9 suites; typecheck/lint/build; 56 scoped browser accessibility sweeps with zero violations; 56 captures; 16 configurations with primary/secondary navigation, focus/persistence, controlled company save and phone feedback clearance. No live backend qualification. Native/human/device/zoom and final integrated security/release gates remain open.
|
||||
|
||||
Tasks: inspect existing owners/callers and baseline tests; add failing mobile/route-preservation tests; implement five-destination hybrid navigation through AppShell, promote Discovery in existing App nav groups, retain every secondary tool/permission/route; reserve mobile clearance for feedback and actions; verify targeted tests, typecheck/lint/build, actual controlled-API browser journeys in both languages/themes/viewport classes; commit/push/read back; prepare next scope and required Gate F review.
|
||||
|
||||
No API/schema/dependency or physical document changes. Existing theme/state/router/dialog/toast owners remain. Keep desktop collapse persistence, route-heading focus, skip link, command palette, notification semantics, account menus, legacy redirects and admin guards. Use existing 768px small breakpoint for hybrid mobile navigation, matching compact header controls and the approved tablet sidebar arrangement.
|
||||
|
||||
Baseline navigation/notification/readiness results remain separate from final totals. UI-01's35/48 evidence qualifies its own foundation scope only. After this increment, A3-IM03 dashboard/onboarding and A3-IM04 application layouts await the source-defined next milestone review; other independent roadmap work may progress while that decision is pending.
|
||||
|
||||
## Implemented scope
|
||||
|
||||
The existing AppShell now provides Dashboard, Applications, Discover, Career and More on phones. More and the existing header trigger open the same accessible MUI drawer, retaining all secondary destinations. Career includes builder deep links; Applications includes job/detail/legacy aliases. Secondary tools select More. Visible primaries are derived from the existing permitted navigation tree; hidden ancestors are pruned. No new route or permission system.
|
||||
|
||||
Desktop retains labelled/grouped navigation, whole-sidebar collapse persistence and secondary menus. Discovery is now a primary Job Search item. Reminders, correspondence, analytics and existing Operations are workspace destinations; companies/offers/trash, CVs/documents, accounts and admin tools remain accessible. No route declarations removed or rewritten.
|
||||
|
||||
The bottom bar is measured, so wrapped labels/safe areas reserve actual space in main padding, native scroll clearance and existing Snackbar positioning. Notifications and feedback remain above the bar. Desktop/public contexts retain zero bar clearance. Native notched-device review remains pending; existing safe-area padding adds a conservative extra gap after the measured bar.
|
||||
|
||||
Regression found/fixed: choosing the current destination returned before closing the mobile drawer. The shared handler now closes it and focuses the heading after the transition, while Escape still returns to the opener. Red/green unit regression and browser checks cover it. No unsaved-document guard, persistence, API or physical renderer is replaced.
|
||||
|
||||
Independent read-only review found no important/critical findings; reviewer 11 tests overlap the final selected suite and are not additional evidence. All 188 historical dynamic-call reviews remain accounted for; four new static EN/NB navigation keys were added with catalogue parity checks. No new European language was advertised or enabled.
|
||||
|
||||
## Next proposed scope / protected review
|
||||
|
||||
Gate F navigation review required before dependent A3-IM03. Proposed next scope: approved A1 dashboard hierarchy and optional resumable onboarding using existing DashboardView/grid/layout/checklist owners; preserve schema-2/CAS, hidden positions/gaps, collision handling, drag/resize/keyboard alternatives, existing-data completion, skip/resume and notification behaviour. No schema migration, new provider/model or loss of widgets. Then prepare that increment's targeted state/browser/preservation evidence and review. Existing A3 approvals persist; request only this mandatory milestone entry, not a new overall design choice.
|
||||
@@ -0,0 +1,20 @@
|
||||
# A3-IM03 — A1 dashboard and optional onboarding
|
||||
|
||||
Status: IMPLEMENTED / VALIDATED; publication and owner Gate F review tracked in DASHBOARD_VALIDATION.md. Owner explicitly answered the navigation Gate F question: **"Approve navigation and A3-IM03"** on 3 November 2026. Approved navigation checkpoint992608c7 remains immutable. Branch codex/a3-ui-03 starts there, with the independently validated small localisation patch d4b938fa applied as5e8a07d1. No wholesale merge of the older i18n/theme tree. Combined checks qualify this integration only for the stated scope.
|
||||
|
||||
## Scope / task ledger
|
||||
|
||||
- [x] Read existing DashboardView, OnboardingChecklist, DashboardGrid/layout/hook/editor, source-backed completion tests, backend DashboardLayout reader/validation and current A3 contracts.
|
||||
- [x] Baseline dashboard/grid/layout/onboarding and combined navigation/metadata checks.
|
||||
- [x] Task-first A1 defaults for new/reset layouts; existing geometry, schema2/CAS and controls preserved. Additive agenda ID is the only server contract change (ruling below); no migration.
|
||||
- [x] Quiet hierarchy, personal greeting when a recorded name exists, movable week glance beside pipeline; reporting retained. Week coverage limited to recorded attention-feed dates.
|
||||
- [x] Optional owner-scoped setup, skip/resume and on-demand walkthrough; skips never count as completed data. Guidance controls do not mutate source data or grant consent.
|
||||
- [x] Targeted regression, types/lint/build and fixture-backed browser journeys across languages/themes/viewports; physical renderer unchanged.
|
||||
- [x] Independent read-only review: no actionable findings; reviewer45 tests overlap final95.
|
||||
- [ ] Commit/publish/read-back and next Gate F owner review. Do not begin A3-IM04 before approval; continue unrelated eligible work.
|
||||
|
||||
Preservation:57 groups/34 routes remain; all nine existing widget IDs remain supported. Career Profile stays canonical, account identity remains separate, old dismissal keys remain compatible, owner disposal prevents cross-account state. Existing layout persistence and rendering logic stay in their owners. Legacy version1 preferences keep their recorded order; schema2 coordinates are not repacked on load. API/provider/model/backend/production qualification remains distinct from controlled browser evidence.
|
||||
|
||||
Ruling: the week panel must be separately movable/hideable to reproduce A1's week-left/progress-right row. Add one `agenda` widget ID to the existing catalogue and server JSON whitelist; no schema migration or new endpoint. Keep all nine old widgets and their saved coordinates. Existing saved layouts append the new widget hidden; only new/reset defaults show it. Backend parser/CAS/bounds/collision protections remain unchanged and require targeted regression. The earlier plan's "no backend contract change" assumption is superseded by this small additive ID; no new calendar/provider service is introduced.
|
||||
|
||||
Next dependency after review: A3-IM04 / approved B1 application tracking/detail work. No automatic advance through a future protected owner gate.
|
||||
@@ -0,0 +1,17 @@
|
||||
# A3-IM04 — B1 applications and persistent right context
|
||||
|
||||
Owner reply3 November 2026: **"Approve dashboard/onboarding and A3-IM04"**. Dashboard implementation c7d26d35 and publication receipt dc93b589 are accepted for progression. Isolated codex/a3-ui-04 starts at dc93b589; no older design-tree merge. A3 frozen design237c79b8 and original five concepts remain unchanged.
|
||||
|
||||
## Bounded implementation plan
|
||||
|
||||
- [x] Baseline62 tests/7 suites passed before edits.
|
||||
- [x] B1 quiet filter/results surfaces and compact board cards through existing MUI owners. Existing density/sort/filter/page/columns/saved views/bulk/trash owners retained.
|
||||
- [x] Persistent right context above1000px; context follows the task in DOM and narrow/compact layouts. Named jump/return controls. Existing dates moved, next action/preparation/activity/details and tabs retained.
|
||||
- [x] Full-page/preview, list return/focus, unsaved guards, source language, precise status menu and revision writers retained. Corrected reproduced unsupported fully-prepared claim when next action is absent.
|
||||
- [x] Test new focus/navigation contract first; final126 selected frontend,88 backend, types/lint/build and16 controlled browser journeys/48 scans/captures passed. Limits in APPLICATIONS_VALIDATION.md.
|
||||
- [x] Independent read-only review: no actionable findings; reviewer52 tests overlap selected totals.
|
||||
- [ ] Final source-bound evidence, coherent commits, publish/remote verify and Gate F before A3-IM05.
|
||||
|
||||
Affected callers: JobTable's jobs/trash/table/board modes; Kanban card/status navigation; ApplicationWorkspace full-page and overlay callers, primary/secondary tabs; shared EN/NB keys/tests/browser fixtures. APIs, persistence, schema, permissions and physical document rendering are unchanged. No provider/model calls, database migrations or dependency changes.
|
||||
|
||||
Rollback: revert this presentation increment on its branch; no data rollback. Do not modify revision writers just to ease fixtures. Remaining breadth must stay OPEN until qualified; baseline tests alone are not complete IM04 or Phase10 acceptance.
|
||||
@@ -0,0 +1,13 @@
|
||||
# A3-IM05 — discovery presentation and existing saved searches
|
||||
|
||||
3 November2026 owner reply: **"Approve applications and A3-IM05"**. Application implementation98e9502a/publication receipt172074e9 accepted for progression. Isolated codex/a3-ui-05 starts at172074e9. No new international provider or geography authorization is inferred.
|
||||
|
||||
## Bounded plan
|
||||
|
||||
- [x] Baseline21 existing discovery tests passed.
|
||||
- [x] Filter/saved-search rail left, result list right above1000px; narrow logical stack and named jump/return focus. Existing source explanation prominent.
|
||||
- [x] All existing handlers/semantics retained; no unsupported provider/country/radius controls or API changes.
|
||||
- [x]32 selected frontend/3 suites,14 mocked-provider/local backend tests, type/lint/build,16 controlled browser journeys/48 scans/captures passed. Independent review found no actionable issue; reviewer23 overlaps32.
|
||||
- [ ] Publish/readback, Gate F before A3-IM06 Career/CV/letter work.
|
||||
|
||||
Callers: JobDiscoveryPage, its EN/NB messages, tests and browser fixtures only. Existing API/data/provider owners retained. Canonical occupation/geography expansion remains Global Jobs work with its own prerequisites and permissions; GJ-01+ is not accepted by a presentation change. Rollback reverts presentation/tests; no migration or data rollback. Preserve source ads and generated-content language distinction.
|
||||
@@ -0,0 +1,21 @@
|
||||
# A3-IM06 — Career Profile and document workflows
|
||||
|
||||
3 November2026. Owner explicitly answered **"Approve discovery and A3-IM06"**. Isolated codex/a3-ui-06 starts at published/independently verified discovery receipt027907a80666f7ddd51c848411ceaacec6768f20. No older design/source tree merged. Root security policy and independent document-date fix remain separate.
|
||||
|
||||
## Scope and work packages
|
||||
|
||||
- [x] Inspect current CareerProfilePage/overview/section owners, CV library/editor/preview and letter presentation. Existing editor already places edit left/preview right and owns queues, conflicts, undo and export; retain these behaviors.
|
||||
- [x] Establish selected Career/import/library/studio/letter baseline; no full-suite/PDF rerun merely for restart.
|
||||
- [x] Career overview: useful section indicators and immediate section edit/focus actions, using existing canonical profile/draft state. Preserve unknown/loading/error states and source-backed overall completeness; do not count skipped setup as complete.
|
||||
- [x] Audit every canonical section against actual editable controls. Initial source shows projects/certifications in StructuredCvProfile but no corresponding CareerProfileSections controls; investigate and close supported UI gaps through the existing revision writer, preserving stable IDs/metadata, or record a precise limitation.
|
||||
- [x] Align studio responsive presentation with approved1000px split contract and existing mobile edit/preview mode; keep focus, controls, template/gallery/history/import review, library actions and letter workflow connected. Refine quiet chrome where needed, not physical document CSS.
|
||||
- [x] Qualify existing import/source/proposed/selected/conflict/retention and letter history/revision behavior. No import-engine overhaul, new schema/API/dependency, provider/model activation or changed renderer metrics.
|
||||
- [x] Fix affected bounded EN/NB display issues without rewriting working terminology. Fixed decimal attachment-size display remains a known candidate, not yet fixed.
|
||||
- [x] Targeted frontend/backend/types/lint/build plus actual React controlled Career/CV/letter journeys, responsive/theme/locale/accessibility checks and independent review. Reuse unchanged accepted physical PDF metrics/visuals; distinguish controlled previews from physical exports.
|
||||
- [ ] Commit/publish/remote verify each coherent package; only request next Gate F after this increment is complete and reviewable. A3-IM07 Calendar/reminders/correspondence/documents still needs that gate.
|
||||
|
||||
Affected callers: CareerProfilePage and CareerWorkspaceOverview/section editors; existing CV library/editor/template/preview and ApplicationCoverLetterSection/Document chrome; their tests and EN/NB catalogue. Canonical state, API writers, revisions and renderers stay in existing owners. Rollback presentation/controls commits on this branch; no database/data rollback. Changes must not silently replace source facts or reset null-as-inherit overrides.
|
||||
|
||||
Source comparison identified current studio compact boundary899.95px while the approved A3 handoff uses1000px. Verify field/preview geometry and focus at the boundary before changing it. The overall milestone remains IN PROGRESS; baseline/reused evidence alone cannot accept it.
|
||||
|
||||
Local qualification:212 unique frontend cases/10 suites,103 backend cases,types/full lint/build,16 controlled browser journeys/96 axe scans plus six boundary journeys/36 scans (four configurations overlap;108 unique captures), independent review57 overlapping cases. Exact evidence and limitations:CAREER_VALIDATION.md. Physical renderer and backend sources unchanged. Gate F before IM07 remains pending.
|
||||
@@ -0,0 +1,20 @@
|
||||
# A3-IM07 Calendar, correspondence and documents
|
||||
|
||||
3 November 2026. Owner explicitly answered **"Approve Career/CV/letter and A3-IM07"**. Isolated `codex/a3-ui-07` starts at accepted/published UI06 receipt19dad316. Approval record7e410e79 is published/remotely verified. UI06 implementation6f801251 and all earlier approvals remain accepted; no repeat gate.
|
||||
|
||||
- [x] Inspect current reminder, calendar/provider, document and inbox owners and approved A3 journeys/coverage.
|
||||
- [x] Establish selected baseline; preserve existing reminder mutation/retry/focus and correspondence/document trust boundaries.
|
||||
- [x] Calendar: agenda first with persisted view-only preference and accessible optional month view; include recorded deadlines even for saved applications missing from attention feed. Keep workflow reminders available, linked context, raw date provenance, unknown-date disclosure, loading/error/retry. Do not derive interview times from stage or assume timezone/precision lost in legacy DateTime storage.
|
||||
- [x] Qualify owner-scoped bounded calendar read and server/local date boundaries, including soft-deleted and sibling-owner exclusion. No schema migration/provider activation/calendar writes needed for calendar display.
|
||||
- [x] Correspondence: quiet inbox/context presentation using current read/draft/send owners; preserve uncertain outcomes/conflicts/explicit confirmed-send and provider permissions. No live send.
|
||||
- [x] Documents: connected library/filter/source/download presentation, preserve URL allowlists, frozen data, private/public state and failures. Reconcile the independently validated ca519cac date patch narrowly before combining it.
|
||||
- [x] Targeted frontend/backend/types/lint/build and controlled rendered EN/NB/themes/widths/focus/accessibility journeys; independent review.
|
||||
- [ ] Publish coherent validated checkpoints, verify remote refs, update evidence and durable handoff. Next mandatory Gate F before A3-IM08.
|
||||
|
||||
Scope reaches existing RemindersView, ApplicationCalendarController, correspondence/document presentation and their tests/fixtures/catalogues/navigation. Existing reminder attention feed excludes deadline-only Saved applications; using it as a complete calendar would silently omit deadlines. Add a narrow bounded read to the existing calendar owner instead of changing the attention feed's meaning or fetching an unbounded full board. Existing calendar ICS/provider exports remain unchanged and require explicit user actions/consent.
|
||||
|
||||
Current JobApplication fields store Deadline/FollowUpAt as nullable DateTime, with no independent interview appointment or original source precision/timezone metadata. Display recorded calendar dates with raw values retained, label the date-level boundary, and do not manufacture appointments. Any later interview scheduling/data-model qualification must be recorded separately. Unknown-date attention remains the existing reminder workflow, not a guessed calendar event.
|
||||
|
||||
Rollback: revert this feature increment; no database/data rollback for presentation and bounded read. Preserve canonical Career Profile, CV/letter history/settings, RD21 and all previous routes. Full roadmap/security/release acceptance remains open.
|
||||
|
||||
Local final qualification:WORKSPACE_VALIDATION.md;108 unique frontend cases/8 suites,52 backend cases,types/lint/build,48 final calendar plus96 document/mail browser scans/captures. Interview scheduling/original date precision-timezone data remains an explicit gap, not fabricated appointments. Initial calendar194e01ed published/remotely verified; complete increment publication/next Gate F pending.
|
||||
@@ -0,0 +1,14 @@
|
||||
# A3-IM08 Contextual AI and Settings automation
|
||||
|
||||
3 November2026. Owner explicitly approved **"Approve calendar/documents/mail and A3-IM08"**. Isolated codex/a3-ui-08 starts at accepted UI07 fba80ef346bc021e675024638dacf9ccef7243db. Acceptance receipt e5a979386d6377138e7ea7fd44958adb22838886 is published and independently remotely verified. No live model activation; application automation controls are distinct from the paused, untouched backlog orchestrator.
|
||||
|
||||
- [x] Inspect SettingsView, rules/notification owners, AI privacy/usage and contextual section-assistant callers.
|
||||
- [x] Initial selected baseline:58 cases/5 suites passed, not blanket AI quality or full roadmap acceptance.
|
||||
- [x] Contextual assistance: context/section-name invalidation published at a8831048; output-language invalidation reproduced and fixed. Manual editing, explicit review/token apply, source/document-language separation and existing quota/consent/failure/retry/close retained.
|
||||
- [x] Settings Automation entry exposes the existing persisted email-reminder switch and links to AI privacy, numeric follow-up thresholds and individual saved-search alerts. Shared drafts and preference writers retained. Service timing/disable limits are explicit; granular Ghosted processing pause remains a data-contract gap, not a fake control.
|
||||
- [x] Scoped EN/NB, responsive/focus/accessibility presentation;131 distinct frontend cases/eight suites,68 local backend cases,16 controlled journeys/96 scoped scans. Types/full lint/build and independent review passed after correcting an import-casing error. Capture reruns overlap, not extra coverage. See AI_SETTINGS_VALIDATION.md.
|
||||
- [ ] Publish validated checkpoints and exact evidence; update durable handoff. Next Gate F before IM09 account/session/connections/admin/processing views.
|
||||
|
||||
Remaining source limitation:rules expose only six integer day thresholds1–365, not independent enable flags; email-follow-up notifications and AI/privacy preferences have actual existing boolean controls. Do not represent thresholds as disable switches or imply a general worker-control API. A Pro account with unavailable AI now receives manual-editing/settings guidance while free-tier upgrade behavior remains intact.
|
||||
|
||||
No schema/dependency/migration planned for presentation and bounded stale-proposal fix. Existing canonical Career Profile, CV/letter history/settings, RD21, per-owner data, quota/consent and server review/apply stay authoritative. Rollback reverts this UI increment; no database rollback. Full integrated AI/security/native/provider/release qualifications remain separate.
|
||||
@@ -0,0 +1,14 @@
|
||||
# A3-IM09 Account and administration
|
||||
|
||||
3 November 2026. Owner explicitly approved **"Approve IM08 and A3-IM09"**. Isolated `codex/a3-ui-09` starts at published/remotely verified acceptance receipt `f0c8c6d321a70b4d477e99c7b9557246b6361cdf`, from implementation `e2327c1fa2ceaf785d4058c802bafe0d3428c235`. No repeat approval required for this scope.
|
||||
|
||||
- [x] Reconcile actual Git state; retain generated graph locally and all prior milestone refs.
|
||||
- [x] Inspect ProfilePage identity/password/providers, existing 2FA/sessions, ConnectedAccountsPage, BackupCard, admin users/audit/system and processing owners.
|
||||
- [x] Account presentation: named section navigation/focus targets, mounted forms and retained drafts, direct data-settings entry without new writers. Identity/Career Profile separation and existing local/external/security/provider actions preserved.
|
||||
- [x] Processing presentation: named filters/results and keyboard jump/return; existing polling/identity/events/permissions retained. Corrected native-label overlap, constrained duration column and a reproduced precommit detail-focus race. Existing admin presentation retained.
|
||||
- [x]143 distinct frontend cases/11 suites,69 local backend cases,128 distinct scoped browser states across16 configurations.112 unchanged states reused plus16 refreshed processing scans;18/19-case reruns overlap, not added. Types/full lint plus affected successor lint/build and independent review passed. See ACCOUNT_ADMIN_VALIDATION.md.
|
||||
- [ ] Commit/publish validated checkpoints, verify remote refs, update durable handoff; Gate F before IM10.
|
||||
|
||||
No API/schema/dependency/migration/model/provider change planned. No real account deletion, security-credential reset, production operation or provider activation for visual verification. Existing confirmations and backend permission checks remain authoritative; fixture tests do not establish live security acceptance. IM08 granular Ghosted pause and mounted AI entitlement-refresh gaps remain OPEN, not silently addressed by this presentation increment.
|
||||
|
||||
Affected callers: /profile, /settings data entry, /admin/processing and existing tests. All existing routes and handlers remain. Rollback reverts the isolated UI increment; no database rollback. Full Phase10, European/local/native/provider, final integrated security/recovery/release gates remain separate.
|
||||
@@ -0,0 +1,33 @@
|
||||
# A3-IM01 — implementation validation
|
||||
|
||||
3 November 2026. This qualifies a bounded shared-theme increment in the actual React application. It does not qualify the entire A3 redesign, Phase 10, Product Review, international discovery, European localisation, security or release readiness.
|
||||
|
||||
| Check | Result | Scope |
|
||||
|---|---|---|
|
||||
| Existing baseline | PASSED: 28 tests / 4 suites | Theme contrast/state, loaded company states and dialog flow before edits. BASELINE.json |
|
||||
| A3 visual contract before implementation | FAILED as expected: 2 tests | Old light/dark canvas values differed from approved A3; no production code had been changed |
|
||||
| First new-palette regression | FAILED, corrected | Dark error text 4.275:1 on new elevated surface; changed colour, retained 4.5 threshold |
|
||||
| Final targeted theme/state/dialog tests | PASSED: 30 / 5 suites | Includes the baseline 28 and 2 new A3 visual-contract cases; not 58 independent tests. THEME_TESTS.json |
|
||||
| Additional preservation checks | PASSED: 5 / 2 suites | Existing CV thumbnail/template rendering and shell navigation; disjoint from the 30 theme/state/dialog cases. PRESERVATION_TESTS.json |
|
||||
| Typecheck | PASSED | npm run typecheck, no incremental cache |
|
||||
| Lint | PASSED | npm run lint, zero-warning policy |
|
||||
| Static production build | PASSED | npm run build with NEXT_PUBLIC_API_BASE_URL=/api for controlled loopback browser checks; no deployment |
|
||||
| Actual React screen matrix | PASSED: 32 conditions | Login and loaded Companies × 320/390/768/1440px × EN/NB × light/dark |
|
||||
| Company dialog keyboard journeys | PASSED: 16 | Keyboard edit/open, visible focus, Escape and focus return; actual MUI controls |
|
||||
| Scoped axe sweeps | PASSED: 48, zero returned violations | 32 main surfaces + 16 dialogs; rule tags WCAG2 A/AA, 2.1AA, 2.2AA. Excludes shell/navigation from the main-surface sweep; not full WCAG conformance |
|
||||
| Actual form validation | PASSED: 16 screen variants | Empty login submit marks required fields invalid and focuses first field; no authentication POST |
|
||||
| Root reflow / colours / locale | PASSED in screen matrix | Actual built app body palette and html lang/scheme, no root overflow at the tested widths |
|
||||
| Source review | PASSED for bounded patch | Independent reviewer found no important/critical issue; physical document frames/renderers retain font ownership |
|
||||
| Graph | AST-only refresh completed | Generated graph untracked; no model/semantic graph call |
|
||||
|
||||
`evidence/BROWSER.json` records every screen/dialog scope, page exceptions, attempted writes and blocked external requests; `scripts/verify-a3-theme.mjs` reproduces it from the static export served locally on port 4338 by the existing serve-export script. All API responses are controlled synthetic fixtures, all write methods are rejected, and every remote request is aborted. No backend, production data, model, identity provider or mailbox was contacted. This is actual application rendering with controlled service responses, not live-service acceptance.
|
||||
|
||||
The first browser run reached all its two-width screen/dialog assertions but failed its final no-external-attempt assertion because the existing page head requests Google Fonts. The harness was corrected to permit only that **blocked** known font origin, retaining all aborts and rejecting any unexpected origin. The final four-width run supersedes that result. No remote font was downloaded. Removal/localisation of existing font imports requires separate caller/renderer review; it was not performed here.
|
||||
|
||||
Lint initially rejected CommonJS require imports in the new browser harness. Converted the harness to the project's existing ES-module script convention rather than suppressing lint rules or changing lint configuration. The final .mjs run and full lint supersede the failed intermediate harness check. No application source changed during this conversion.
|
||||
|
||||
Evidence has 32 populated screen screenshots. The built application's sidebar structure is still the existing one: only its shared semantic colours changed. Do not present these captures as completed A3 navigation or A1 dashboard implementation. The prototype's 480 conditions/50 axe sweeps are separate historical design evidence and are not included in these application counts.
|
||||
|
||||
NOT RUN: real backend flows, full application regression, native screen reader, physical touch/software keyboard, actual browser zoom, native-language review, final integrated security, live provider/model, physical PDF/container requalification, backup/restore or hosted CI. Source-defined acceptance for those scopes remains open. Pending zoom/human checks prevent a claim of complete accessibility acceptance.
|
||||
|
||||
Reproduce sequentially from job-tracker-ui with installed dependencies: targeted Jest paths recorded in native JSON reports, npm run typecheck, npm run lint, NEXT_PUBLIC_API_BASE_URL=/api npm run build, serve-export on local port 4338, then `rtk proxy node scripts/verify-a3-theme.mjs`. Rebuild when application source changes; the evidence manifest binds source and exported assets to this checkpoint.
|
||||
@@ -0,0 +1,9 @@
|
||||
# A3-IM07 publication and owner acceptance
|
||||
|
||||
3 November 2026. Implementation `fba80ef346bc021e675024638dacf9ccef7243db` on `codex/a3-ui-07` was pushed successfully and independently verified by remote ref readback. Committed workspace manifest verification matched all28 sources and169 evidence entries;80 final static-export assets are separately hashed. Earlier calendar subpackage194e01ed was also published/read back; it is not an additional test total.
|
||||
|
||||
Owner then explicitly answered **"Approve calendar/documents/mail and A3-IM08"**. IM07 Gate F is ACCEPTED; do not ask again. Next authorised scope is contextual AI presentation and Settings automation, retaining manual fallback, explicit consent/review/apply, stale-input protections, usage/limits, errors/retry/cancel and accurate per-rule controls. No live model activation or production/provider operation is approved by this UI milestone.
|
||||
|
||||
Evidence: [WORKSPACE_VALIDATION.md](WORKSPACE_VALIDATION.md).108 unique selected frontend cases/eight suites,52 backend cases,144 scoped axe scans/captures,32 controlled journey executions. Browser draft-save/send responses were intercepted fixtures, not real deliveries. Independent reviewer70 plus earlier7 overlap, not extra cases. Actual interview scheduling and original source date precision/timezone metadata remain explicit data-model gaps; owner milestone acceptance does not fabricate those capabilities or waive their qualification.
|
||||
|
||||
Full Phase10/Product Review/Global Jobs/European localisation, physical/native/live-service, final integrated security/recovery/release qualifications remain open. Root security policy de3d5031 remains isolated. No orchestrator use, pre-P10 edit, main merge or production deployment. Feature refs UI01–07 remain preserved; next branch isolates UI08 from this checkpoint.
|
||||
@@ -0,0 +1,33 @@
|
||||
# A3-IM07 Calendar, correspondence and document qualification
|
||||
|
||||
3 November 2026. Owner explicitly approved **"Approve Career/CV/letter and A3-IM07"**. This increment is implemented and locally qualified within the boundaries below. Gate F remains required before A3-IM08. Feature branch `codex/a3-ui-07` preserves prior published UI01–06 refs and original integration baseline; no main merge or production deployment.
|
||||
|
||||
Calendar subpackage `194e01ed7ffbdad6f2e5ac61c88f47628987b337` was published and independently remotely verified. Its committed17-source/61-evidence manifest matched exactly. Current follow-up includes a localised MUI month selector, document and inbox keyboard landmarks, and a narrow integration of independently validated date patch ca519cac. Final publication receipt is recorded separately. The earlier calendar manifest describes immutable checkpoint194e01ed; use the final workspace manifest for current combined sources/evidence.
|
||||
|
||||
Calendar offers agenda first and an optional owner-scoped persisted month view, prioritises upcoming dates, and includes recorded application closing dates even for Saved applications omitted by the attention feed. Existing reminder groups/actions remain below it on `/reminders`. The narrow authenticated calendar read is explicitly owner/nondeleted scoped, inclusive and limited to62 days; it retains original recordedAt and stored calendar day. It does not infer an interview appointment, source precision or timezone missing from legacy data. Existing ICS/provider actions and consent remain unchanged.
|
||||
|
||||
The first rendered Bokmål calendar capture exposed a native month control displaying an English month name in an English-configured browser. The replacement reuses MUI Select and Intl for the selected UI language, with adjacent-month choices and previous/next navigation. A red locale regression preceded the fix; all eight agenda tests and a fresh48-scan browser run pass with exact EN/NB month-label assertions. A verifier lookup initially expected a label-only accessible name; MUI includes its selected value. Corrected that harness lookup and retained the failed attempt; no application behavior was weakened.
|
||||
|
||||
Documents retain existing metadata table/mobile cards, filters, pagination, linked sources, public/private/frozen distinctions, exact source/download allowlists and permission/error recovery. Named filters and Jump/Return move focus without requests. The ca519cac date patch was applied only to DocumentsPage and its ten EN/NB regression cases; both resulting blobs matched the isolated accepted patch before additional focus changes (02f4de2e and64090d7e). It rejects impossible/overflow/trailing-junk unzoned timestamps while preserving fractional-second metadata and wall-clock display. No whole localisation branch was merged.
|
||||
|
||||
Correspondence retains the existing inbox, inline plain-text message read, linked job context, draft editor, provider status, review queue and confirmation owners. Named filters/results include current loading/unlink/empty/detail/pagination notices; jump and return only move focus. Draft conflict/revision, definitive failure/new-attempt, uncertain-result lock, explicit send confirmation, saved draft retention and tenant protections remain unchanged. No external mail was sent.
|
||||
|
||||
| Evidence | Exact result and boundary |
|
||||
|---|---|
|
||||
| Final selected frontend |108 unique cases / eight suites passed, zero failed/pending. Latest complete execution per suite:agenda8,reminders11,calendar actions3,catalogue3,documents33,inbox37,attachments5,file-picker8. Baselines and independent reruns overlap and are not added |
|
||||
| Backend |52 unique cases:calendar10 plus document/inbox/provider/draft/send/attempt preservation42, all passed with zero failed/skipped. InMemory/temporary SQLite, mocked providers; MariaDB SQL composition test does not connect to MariaDB |
|
||||
| Types/lint/build |Passed. Final build's TypeScript validation and scoped verifier lint passed; earlier failed typecheck and failed navigation/month regressions remain failed historical attempts |
|
||||
| Calendar browser |16 configs320/390/768/1440 × EN/NB × light/dark,48 axe scans/captures on final localised month control; zero violations/overflow/page errors/writes |
|
||||
| Documents/mail browser |Same16 configs,96 axe scans/captures:documents,filtered document,inbox,message,send confirmation,uncertain result. Zero violations/overflow/page errors/unexpected writes. Relevant document/inbox sources and fixtures unchanged by subsequent calendar-only selector fix; that evidence is reused, not described as another fresh execution |
|
||||
| Browser total |32 controlled journey executions across two work packages,144 distinct route/state/config captures; no overlapping rerun totals added |
|
||||
| Controlled interactions |Document filter and request-free keyboard jump/return; explicit fixture-file download with verified bytes/name/source URL/raw date metadata. Inbox jump/return, inert script-looking plain text, manual reply, saved draft, confirmation before send, uncertain-result retention and disabled repeat send |
|
||||
| Mutation qualification |32 intercepted requests in the full document/mail matrix:16 draft saves and16 confirmed-send fixtures returning uncertain. Calendar0 writes. All API requests intercepted and all external origins blocked; no real storage/mailbox/OAuth/delivery |
|
||||
| Independent review |No actionable document/inbox source/verifier findings;70 matching frontend cases independently passed, overlapping108. Earlier calendar review covered seven cases before the extra ordering case, overlapping108; browser/backend/build not independently repeated |
|
||||
|
||||
Native suite aggregation is under [evidence/workspace](evidence/workspace); original reports remain under calendar and documents-inbox. Browser scripts are verify-a3-calendar.mjs and verify-a3-documents-inbox.mjs against the actual built React static export on localhost4338. Synthetic provider capability flags are fixtures, not access grants. Native download verifies a controlled text fixture, not licensed files or real storage integrity. Existing attachment preview/file-picker behavior is tested locally; physical PDF rendering is not reopened. Representative320px mobile and1440px Bokmål/dark captures were visually inspected. Fixed navigation can appear within full-page scroll captures; native-device behavior is not thereby accepted.
|
||||
|
||||
Known open capabilities and qualifications: actual interview scheduling and original date precision/timezone migration; current calendar is explicitly date-level. Live Google/Outlook consent/events, real mailbox/delivery/reminder service, real storage/backend-browser integration, MariaDB, hosted CI, native device/screen reader/touch/zoom and native-language review remain NOT RUN. Broader attachment decimal formatting remains an independent localisation candidate. European localisation, full Product Review/Global Jobs, Phase10, recovery, final integrated security and release readiness remain open.
|
||||
|
||||
No schema/dependency/migration or reminder/mail/file writer change in this presentation increment; the calendar read is additive. All existing routes, canonical Career Profile, document settings/history/frozen packages, RD21 and provider rights are retained. Rollback reverts the increment; no database/data rollback is required. Root security policy de3d5031 remains isolated and is not silently merged.
|
||||
|
||||
Next protected gate: owner review of the published IM07 result before A3-IM08 contextual AI presentation and Settings automation. Preserve manual fallback, explicit consent/review/apply, stale inputs, usage/limits, accurate rule controls, errors/retry/cancel. No live model activation follows from that UI gate. Independently eligible localisation/security/release preparation may continue while awaiting the decision.
|
||||
File diff suppressed because one or more lines are too long
@@ -0,0 +1,505 @@
|
||||
{
|
||||
"rows": [
|
||||
{
|
||||
"screen": "login",
|
||||
"width": 320,
|
||||
"language": "en",
|
||||
"mode": "light",
|
||||
"geometry": {
|
||||
"overflow": false,
|
||||
"background": "rgb(255, 255, 255)"
|
||||
},
|
||||
"violations": []
|
||||
},
|
||||
{
|
||||
"screen": "companies",
|
||||
"width": 320,
|
||||
"language": "en",
|
||||
"mode": "light",
|
||||
"geometry": {
|
||||
"overflow": false,
|
||||
"background": "rgb(255, 255, 255)"
|
||||
},
|
||||
"violations": []
|
||||
},
|
||||
{
|
||||
"screen": "company-dialog",
|
||||
"width": 320,
|
||||
"language": "en",
|
||||
"mode": "light",
|
||||
"violations": []
|
||||
},
|
||||
{
|
||||
"screen": "login",
|
||||
"width": 320,
|
||||
"language": "en",
|
||||
"mode": "dark",
|
||||
"geometry": {
|
||||
"overflow": false,
|
||||
"background": "rgb(40, 35, 52)"
|
||||
},
|
||||
"violations": []
|
||||
},
|
||||
{
|
||||
"screen": "companies",
|
||||
"width": 320,
|
||||
"language": "en",
|
||||
"mode": "dark",
|
||||
"geometry": {
|
||||
"overflow": false,
|
||||
"background": "rgb(40, 35, 52)"
|
||||
},
|
||||
"violations": []
|
||||
},
|
||||
{
|
||||
"screen": "company-dialog",
|
||||
"width": 320,
|
||||
"language": "en",
|
||||
"mode": "dark",
|
||||
"violations": []
|
||||
},
|
||||
{
|
||||
"screen": "login",
|
||||
"width": 320,
|
||||
"language": "nb",
|
||||
"mode": "light",
|
||||
"geometry": {
|
||||
"overflow": false,
|
||||
"background": "rgb(255, 255, 255)"
|
||||
},
|
||||
"violations": []
|
||||
},
|
||||
{
|
||||
"screen": "companies",
|
||||
"width": 320,
|
||||
"language": "nb",
|
||||
"mode": "light",
|
||||
"geometry": {
|
||||
"overflow": false,
|
||||
"background": "rgb(255, 255, 255)"
|
||||
},
|
||||
"violations": []
|
||||
},
|
||||
{
|
||||
"screen": "company-dialog",
|
||||
"width": 320,
|
||||
"language": "nb",
|
||||
"mode": "light",
|
||||
"violations": []
|
||||
},
|
||||
{
|
||||
"screen": "login",
|
||||
"width": 320,
|
||||
"language": "nb",
|
||||
"mode": "dark",
|
||||
"geometry": {
|
||||
"overflow": false,
|
||||
"background": "rgb(40, 35, 52)"
|
||||
},
|
||||
"violations": []
|
||||
},
|
||||
{
|
||||
"screen": "companies",
|
||||
"width": 320,
|
||||
"language": "nb",
|
||||
"mode": "dark",
|
||||
"geometry": {
|
||||
"overflow": false,
|
||||
"background": "rgb(40, 35, 52)"
|
||||
},
|
||||
"violations": []
|
||||
},
|
||||
{
|
||||
"screen": "company-dialog",
|
||||
"width": 320,
|
||||
"language": "nb",
|
||||
"mode": "dark",
|
||||
"violations": []
|
||||
},
|
||||
{
|
||||
"screen": "login",
|
||||
"width": 390,
|
||||
"language": "en",
|
||||
"mode": "light",
|
||||
"geometry": {
|
||||
"overflow": false,
|
||||
"background": "rgb(255, 255, 255)"
|
||||
},
|
||||
"violations": []
|
||||
},
|
||||
{
|
||||
"screen": "companies",
|
||||
"width": 390,
|
||||
"language": "en",
|
||||
"mode": "light",
|
||||
"geometry": {
|
||||
"overflow": false,
|
||||
"background": "rgb(255, 255, 255)"
|
||||
},
|
||||
"violations": []
|
||||
},
|
||||
{
|
||||
"screen": "company-dialog",
|
||||
"width": 390,
|
||||
"language": "en",
|
||||
"mode": "light",
|
||||
"violations": []
|
||||
},
|
||||
{
|
||||
"screen": "login",
|
||||
"width": 390,
|
||||
"language": "en",
|
||||
"mode": "dark",
|
||||
"geometry": {
|
||||
"overflow": false,
|
||||
"background": "rgb(40, 35, 52)"
|
||||
},
|
||||
"violations": []
|
||||
},
|
||||
{
|
||||
"screen": "companies",
|
||||
"width": 390,
|
||||
"language": "en",
|
||||
"mode": "dark",
|
||||
"geometry": {
|
||||
"overflow": false,
|
||||
"background": "rgb(40, 35, 52)"
|
||||
},
|
||||
"violations": []
|
||||
},
|
||||
{
|
||||
"screen": "company-dialog",
|
||||
"width": 390,
|
||||
"language": "en",
|
||||
"mode": "dark",
|
||||
"violations": []
|
||||
},
|
||||
{
|
||||
"screen": "login",
|
||||
"width": 390,
|
||||
"language": "nb",
|
||||
"mode": "light",
|
||||
"geometry": {
|
||||
"overflow": false,
|
||||
"background": "rgb(255, 255, 255)"
|
||||
},
|
||||
"violations": []
|
||||
},
|
||||
{
|
||||
"screen": "companies",
|
||||
"width": 390,
|
||||
"language": "nb",
|
||||
"mode": "light",
|
||||
"geometry": {
|
||||
"overflow": false,
|
||||
"background": "rgb(255, 255, 255)"
|
||||
},
|
||||
"violations": []
|
||||
},
|
||||
{
|
||||
"screen": "company-dialog",
|
||||
"width": 390,
|
||||
"language": "nb",
|
||||
"mode": "light",
|
||||
"violations": []
|
||||
},
|
||||
{
|
||||
"screen": "login",
|
||||
"width": 390,
|
||||
"language": "nb",
|
||||
"mode": "dark",
|
||||
"geometry": {
|
||||
"overflow": false,
|
||||
"background": "rgb(40, 35, 52)"
|
||||
},
|
||||
"violations": []
|
||||
},
|
||||
{
|
||||
"screen": "companies",
|
||||
"width": 390,
|
||||
"language": "nb",
|
||||
"mode": "dark",
|
||||
"geometry": {
|
||||
"overflow": false,
|
||||
"background": "rgb(40, 35, 52)"
|
||||
},
|
||||
"violations": []
|
||||
},
|
||||
{
|
||||
"screen": "company-dialog",
|
||||
"width": 390,
|
||||
"language": "nb",
|
||||
"mode": "dark",
|
||||
"violations": []
|
||||
},
|
||||
{
|
||||
"screen": "login",
|
||||
"width": 768,
|
||||
"language": "en",
|
||||
"mode": "light",
|
||||
"geometry": {
|
||||
"overflow": false,
|
||||
"background": "rgb(255, 255, 255)"
|
||||
},
|
||||
"violations": []
|
||||
},
|
||||
{
|
||||
"screen": "companies",
|
||||
"width": 768,
|
||||
"language": "en",
|
||||
"mode": "light",
|
||||
"geometry": {
|
||||
"overflow": false,
|
||||
"background": "rgb(255, 255, 255)"
|
||||
},
|
||||
"violations": []
|
||||
},
|
||||
{
|
||||
"screen": "company-dialog",
|
||||
"width": 768,
|
||||
"language": "en",
|
||||
"mode": "light",
|
||||
"violations": []
|
||||
},
|
||||
{
|
||||
"screen": "login",
|
||||
"width": 768,
|
||||
"language": "en",
|
||||
"mode": "dark",
|
||||
"geometry": {
|
||||
"overflow": false,
|
||||
"background": "rgb(40, 35, 52)"
|
||||
},
|
||||
"violations": []
|
||||
},
|
||||
{
|
||||
"screen": "companies",
|
||||
"width": 768,
|
||||
"language": "en",
|
||||
"mode": "dark",
|
||||
"geometry": {
|
||||
"overflow": false,
|
||||
"background": "rgb(40, 35, 52)"
|
||||
},
|
||||
"violations": []
|
||||
},
|
||||
{
|
||||
"screen": "company-dialog",
|
||||
"width": 768,
|
||||
"language": "en",
|
||||
"mode": "dark",
|
||||
"violations": []
|
||||
},
|
||||
{
|
||||
"screen": "login",
|
||||
"width": 768,
|
||||
"language": "nb",
|
||||
"mode": "light",
|
||||
"geometry": {
|
||||
"overflow": false,
|
||||
"background": "rgb(255, 255, 255)"
|
||||
},
|
||||
"violations": []
|
||||
},
|
||||
{
|
||||
"screen": "companies",
|
||||
"width": 768,
|
||||
"language": "nb",
|
||||
"mode": "light",
|
||||
"geometry": {
|
||||
"overflow": false,
|
||||
"background": "rgb(255, 255, 255)"
|
||||
},
|
||||
"violations": []
|
||||
},
|
||||
{
|
||||
"screen": "company-dialog",
|
||||
"width": 768,
|
||||
"language": "nb",
|
||||
"mode": "light",
|
||||
"violations": []
|
||||
},
|
||||
{
|
||||
"screen": "login",
|
||||
"width": 768,
|
||||
"language": "nb",
|
||||
"mode": "dark",
|
||||
"geometry": {
|
||||
"overflow": false,
|
||||
"background": "rgb(40, 35, 52)"
|
||||
},
|
||||
"violations": []
|
||||
},
|
||||
{
|
||||
"screen": "companies",
|
||||
"width": 768,
|
||||
"language": "nb",
|
||||
"mode": "dark",
|
||||
"geometry": {
|
||||
"overflow": false,
|
||||
"background": "rgb(40, 35, 52)"
|
||||
},
|
||||
"violations": []
|
||||
},
|
||||
{
|
||||
"screen": "company-dialog",
|
||||
"width": 768,
|
||||
"language": "nb",
|
||||
"mode": "dark",
|
||||
"violations": []
|
||||
},
|
||||
{
|
||||
"screen": "login",
|
||||
"width": 1440,
|
||||
"language": "en",
|
||||
"mode": "light",
|
||||
"geometry": {
|
||||
"overflow": false,
|
||||
"background": "rgb(255, 255, 255)"
|
||||
},
|
||||
"violations": []
|
||||
},
|
||||
{
|
||||
"screen": "companies",
|
||||
"width": 1440,
|
||||
"language": "en",
|
||||
"mode": "light",
|
||||
"geometry": {
|
||||
"overflow": false,
|
||||
"background": "rgb(255, 255, 255)"
|
||||
},
|
||||
"violations": []
|
||||
},
|
||||
{
|
||||
"screen": "company-dialog",
|
||||
"width": 1440,
|
||||
"language": "en",
|
||||
"mode": "light",
|
||||
"violations": []
|
||||
},
|
||||
{
|
||||
"screen": "login",
|
||||
"width": 1440,
|
||||
"language": "en",
|
||||
"mode": "dark",
|
||||
"geometry": {
|
||||
"overflow": false,
|
||||
"background": "rgb(40, 35, 52)"
|
||||
},
|
||||
"violations": []
|
||||
},
|
||||
{
|
||||
"screen": "companies",
|
||||
"width": 1440,
|
||||
"language": "en",
|
||||
"mode": "dark",
|
||||
"geometry": {
|
||||
"overflow": false,
|
||||
"background": "rgb(40, 35, 52)"
|
||||
},
|
||||
"violations": []
|
||||
},
|
||||
{
|
||||
"screen": "company-dialog",
|
||||
"width": 1440,
|
||||
"language": "en",
|
||||
"mode": "dark",
|
||||
"violations": []
|
||||
},
|
||||
{
|
||||
"screen": "login",
|
||||
"width": 1440,
|
||||
"language": "nb",
|
||||
"mode": "light",
|
||||
"geometry": {
|
||||
"overflow": false,
|
||||
"background": "rgb(255, 255, 255)"
|
||||
},
|
||||
"violations": []
|
||||
},
|
||||
{
|
||||
"screen": "companies",
|
||||
"width": 1440,
|
||||
"language": "nb",
|
||||
"mode": "light",
|
||||
"geometry": {
|
||||
"overflow": false,
|
||||
"background": "rgb(255, 255, 255)"
|
||||
},
|
||||
"violations": []
|
||||
},
|
||||
{
|
||||
"screen": "company-dialog",
|
||||
"width": 1440,
|
||||
"language": "nb",
|
||||
"mode": "light",
|
||||
"violations": []
|
||||
},
|
||||
{
|
||||
"screen": "login",
|
||||
"width": 1440,
|
||||
"language": "nb",
|
||||
"mode": "dark",
|
||||
"geometry": {
|
||||
"overflow": false,
|
||||
"background": "rgb(40, 35, 52)"
|
||||
},
|
||||
"violations": []
|
||||
},
|
||||
{
|
||||
"screen": "companies",
|
||||
"width": 1440,
|
||||
"language": "nb",
|
||||
"mode": "dark",
|
||||
"geometry": {
|
||||
"overflow": false,
|
||||
"background": "rgb(40, 35, 52)"
|
||||
},
|
||||
"violations": []
|
||||
},
|
||||
{
|
||||
"screen": "company-dialog",
|
||||
"width": 1440,
|
||||
"language": "nb",
|
||||
"mode": "dark",
|
||||
"violations": []
|
||||
}
|
||||
],
|
||||
"errors": [],
|
||||
"writes": [],
|
||||
"blockedExternalRequests": [
|
||||
"https://fonts.googleapis.com",
|
||||
"https://fonts.googleapis.com",
|
||||
"https://fonts.googleapis.com",
|
||||
"https://fonts.googleapis.com",
|
||||
"https://fonts.googleapis.com",
|
||||
"https://fonts.googleapis.com",
|
||||
"https://fonts.googleapis.com",
|
||||
"https://fonts.googleapis.com",
|
||||
"https://fonts.googleapis.com",
|
||||
"https://fonts.googleapis.com",
|
||||
"https://fonts.googleapis.com",
|
||||
"https://fonts.googleapis.com",
|
||||
"https://fonts.googleapis.com",
|
||||
"https://fonts.googleapis.com",
|
||||
"https://fonts.googleapis.com",
|
||||
"https://fonts.googleapis.com",
|
||||
"https://fonts.googleapis.com",
|
||||
"https://fonts.googleapis.com",
|
||||
"https://fonts.googleapis.com",
|
||||
"https://fonts.googleapis.com",
|
||||
"https://fonts.googleapis.com",
|
||||
"https://fonts.googleapis.com",
|
||||
"https://fonts.googleapis.com",
|
||||
"https://fonts.googleapis.com",
|
||||
"https://fonts.googleapis.com",
|
||||
"https://fonts.googleapis.com",
|
||||
"https://fonts.googleapis.com",
|
||||
"https://fonts.googleapis.com",
|
||||
"https://fonts.googleapis.com",
|
||||
"https://fonts.googleapis.com",
|
||||
"https://fonts.googleapis.com",
|
||||
"https://fonts.googleapis.com"
|
||||
],
|
||||
"scope": "actual static-export React application with controlled API; existing remote font requests aborted; no backend or provider qualification"
|
||||
}
|
||||
@@ -0,0 +1 @@
|
||||
{"numFailedTestSuites":0,"numFailedTests":0,"numPassedTestSuites":2,"numPassedTests":5,"numPendingTestSuites":0,"numPendingTests":0,"numRuntimeErrorTestSuites":0,"numTodoTests":0,"numTotalTestSuites":2,"numTotalTests":5,"openHandles":[],"snapshot":{"added":0,"didUpdate":false,"failure":false,"filesAdded":0,"filesRemoved":0,"filesRemovedList":[],"filesUnmatched":0,"filesUpdated":0,"matched":0,"total":0,"unchecked":0,"uncheckedKeysByFile":[],"unmatched":0,"updated":0},"startTime":1793671502665,"success":true,"testResults":[{"assertionResults":[{"ancestorTitles":[],"duration":66,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"template thumbnails retain distinct server-rendered samples in noninteractive sandboxed frames","invocations":1,"location":null,"numPassingAsserts":6,"retryReasons":[],"startAt":1793671505757,"status":"passed","title":"template thumbnails retain distinct server-rendered samples in noninteractive sandboxed frames"}],"endTime":1793671505824,"message":"","name":"C:\\Users\\Connor\\.codex\\worktrees\\direct-roadmap-integration\\Job tracker\\job-tracker-ui\\src\\cv-template-thumbnail.test.tsx","startTime":1793671503519,"status":"passed","summary":""},{"assertionResults":[{"ancestorTitles":[],"duration":258,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"language controls identify Bokmål with its native name and language code","invocations":1,"location":null,"numPassingAsserts":5,"retryReasons":[],"startAt":1793671506673,"status":"passed","title":"language controls identify Bokmål with its native name and language code"},{"ancestorTitles":[],"duration":108,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"[P5-01 PRES-E07 E08] grouped navigation exposes the current child without marking the parent as the page","invocations":1,"location":null,"numPassingAsserts":5,"retryReasons":[],"startAt":1793671506931,"status":"passed","title":"[P5-01 PRES-E07 E08] grouped navigation exposes the current child without marking the parent as the page"},{"ancestorTitles":[],"duration":222,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"[P5-01 PRES-E07 E08] collapsed secondary destinations remain keyboard-operable","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"startAt":1793671507039,"status":"passed","title":"[P5-01 PRES-E07 E08] collapsed secondary destinations remain keyboard-operable"},{"ancestorTitles":[],"duration":142,"failing":false,"failureDetails":[],"failureMessages":[],"fullName":"[P5-01 PRES-E08] successful shell navigation focuses the new route heading and exposes a skip link","invocations":1,"location":null,"numPassingAsserts":2,"retryReasons":[],"startAt":1793671507261,"status":"passed","title":"[P5-01 PRES-E08] successful shell navigation focuses the new route heading and exposes a skip link"}],"endTime":1793671507403,"message":"","name":"C:\\Users\\Connor\\.codex\\worktrees\\direct-roadmap-integration\\Job tracker\\job-tracker-ui\\src\\app-shell-navigation.test.tsx","startTime":1793671505840,"status":"passed","summary":""}],"wasInterrupted":false}
|
||||
@@ -0,0 +1,150 @@
|
||||
{
|
||||
"recordedAtUtc": "2026-11-03T02:07:53.565494+00:00",
|
||||
"base": "d3d338376444b8abdcaf7200f682faa3daf1ad10",
|
||||
"design": "237c79b8cb3e280d7e4d1ef95cdbb2c77bb81c69",
|
||||
"policy": "Text and JSON LF-normalised SHA-256; PNG/exported asset bytes raw",
|
||||
"sources": {
|
||||
"job-tracker-ui/src/theme.ts": "6b3c28a2a920e53e01ed9ee12ee2f5cdaa0fe7c3752415a97ca544c82fce8cfa",
|
||||
"job-tracker-ui/src/ThemeProvider.tsx": "1d25fd091ca632f7671e413db24e917d4ca4a375fddade0ca1ff397a8ae9f950",
|
||||
"job-tracker-ui/src/themePrefs.ts": "d775741cd6b2fc7ac59dca13e5e6cf5ffd3856cf4a2e011948b2dfb0d9c319ca",
|
||||
"job-tracker-ui/src/themeBootstrap.ts": "0035725a9d43077ede757c1f20382465a6f04511b63fb22ac65adcfb8ce5f2d0",
|
||||
"job-tracker-ui/src/a3-theme-contract.test.ts": "039382d49d84f84df81d583079f217a21ca0be4b9c90c82f2da744998fbfe73d",
|
||||
"job-tracker-ui/scripts/verify-a3-theme.mjs": "3d550137be4500b0a1711b88d34d01592ab33e2b9dad261a19b033dc4db609c0",
|
||||
"job-tracker-ui/package.json": "3745394e406cefa40d30a87e840bccb359be147bac6ffba736e2ae90898a8626",
|
||||
"job-tracker-ui/package-lock.json": "bf31e90d7af03e8af059db2aaf893925b9e8881a30a1688034ed88ef45d4fcab",
|
||||
"job-tracker-ui/src/App.tsx": "28d906c0f04d82da41125d4722a04dce2b2c1573e333b68a0ef83018d6f94c9f",
|
||||
"docs/pre-phase10-ux/preservation.json": "a4c2a5a0244ea89381008218de32daee1f615a250eb3808b60e0ee103c674d4d",
|
||||
"docs/ui-modernisation/A3_APPROVAL.md": "54243c73fcb15e9c03b81e2c6ee3cb0ed3485067891243a33da9eb83fb383fca"
|
||||
},
|
||||
"evidence": {
|
||||
"BASELINE.json": "2cf5b006ab9a3c499be32c0e3c3e4aff69708819b6516c6044b8db835dbfab74",
|
||||
"BROWSER.json": "f16dd11c041d3f9a57474acc8f3efd71639f048448894f9c1d97b114996d4261",
|
||||
"companies-en-dark-1440.png": "26ef08a0df3b17e33499cc2a0a6a78916702e4bed6d9254bfb60f23deaf0d6c3",
|
||||
"companies-en-dark-320.png": "b18d4e604f40a17bfdf2624d5823c17d467e03583beccc0e497893ee51c735ce",
|
||||
"companies-en-dark-390.png": "8f17a05b8b22cced76ef47326863b8317ed71ea2807db301cf762ad2f869ac28",
|
||||
"companies-en-dark-768.png": "ba34903cae2b5de339b667e3e6817b821c46e761d8467d876e1ca2bd0ce0202e",
|
||||
"companies-en-light-1440.png": "7ae163a26e395005cc09b2cca8f492ec64b52aae19be6251ef169f6f62a9645c",
|
||||
"companies-en-light-320.png": "bc4d8a94bf354c0968ea47d97bd59b56e42fa9e9730a4e59d4671060062f8b0d",
|
||||
"companies-en-light-390.png": "b01d0ffb8ca2703bc75dcf5ab1c34ac442737ba5d5f9792a1627eb959f665553",
|
||||
"companies-en-light-768.png": "826d7b6707f238703a0a4a74d81c1e5542bcc7f4d1da876e12557fce003b31b9",
|
||||
"companies-nb-dark-1440.png": "579072333acc7fefd677277083f9c9d2792523ef12d7ace02afe973f47c36c7f",
|
||||
"companies-nb-dark-320.png": "62795143d79221b2711077d5c0cdd5766d920418036f18340221a018c845e2a4",
|
||||
"companies-nb-dark-390.png": "e10db421d105c130e7265667b03f8018a934a826ecfcf2500880f89a3379590e",
|
||||
"companies-nb-dark-768.png": "fe2003b73991b7b80c206a0b2baa8fce90c9a994a24d0ab9813aa018e94b5c12",
|
||||
"companies-nb-light-1440.png": "6b3c2f917fb33db424f81be3777969122504455f380db3e5729cad26475487a2",
|
||||
"companies-nb-light-320.png": "5b8b170cdd93f9ee73049a9e307f3c7e8663c640f6cdd3b5e657d519c194f796",
|
||||
"companies-nb-light-390.png": "d18c51480b8fb8f75247118f3bbaeec55f0702e29a988aaf07bc143caf0ae913",
|
||||
"companies-nb-light-768.png": "b430df3421e72a6040730d5dff90e8584cb7926452d537d6fa5ac50353b742a8",
|
||||
"login-en-dark-1440.png": "7f14b204ac297a11d0f66ae14630fc178db576003f5739c8837c0d89a8c671b5",
|
||||
"login-en-dark-320.png": "1349497aa9a8c69135fd65a1b033c235519fea6158574df0bfe480168366fbe6",
|
||||
"login-en-dark-390.png": "e1bc62e9622daed83e702bece9fbbde56a0eb8b44d662436c3c88884dee53571",
|
||||
"login-en-dark-768.png": "398df1bc62c65b52808dfc4060a15f3ddda4ecd53600e1f0f1f48116d46330e8",
|
||||
"login-en-light-1440.png": "adf362ed3cb066a868d466317a5a5f1f9e32e80292d780a43b435e67d8250229",
|
||||
"login-en-light-320.png": "4b0c2f278b6224969bf8d16e73a4bce317948b6fa9b5f2a46ddb4c1692848455",
|
||||
"login-en-light-390.png": "526ae4c4c998c766ad4cb55ccce65db6dd6448c6ca3a88d5fa497d17ffff006a",
|
||||
"login-en-light-768.png": "569319b19e4bb37955a805778a87ca4dfd2b13c4c8c33c4ea9d2e0418f9e25cd",
|
||||
"login-nb-dark-1440.png": "e3dfcad81696cb40e33acae6b2ae9553eb773d5c02e84f9b5974f978a2345389",
|
||||
"login-nb-dark-320.png": "810c6f9b9dd368de5836620004f777b6c7bfd38d20bd6f9a41bef43082ae40b6",
|
||||
"login-nb-dark-390.png": "5dd78b744b92c33f70f40848c905a26f38184324cf77f51caf3d947d59d22902",
|
||||
"login-nb-dark-768.png": "a95543cb6c60c308f756d4f16f480be75d20b03fd9ab855ad3abcd56434bda2c",
|
||||
"login-nb-light-1440.png": "4ca9d0de9a2aaf217c484073f0b3ffffba91d33bfaceef313bc748ec3ad19cc3",
|
||||
"login-nb-light-320.png": "d2d9729bcc9c3cf8d3b8044c9b6e63d463a84b2f7aabb362ca5b7bebd9538804",
|
||||
"login-nb-light-390.png": "7fd0429224e620c58552a9e1ada72e830eb10b3ef392b76f0074a4e6d343f42f",
|
||||
"login-nb-light-768.png": "8f7d2a44913d5cc3dc835b9bde07f04fd56a300cc9bf502a34825777eb02cb74",
|
||||
"PRESERVATION_TESTS.json": "e3e0007714e0ea38daf016516f8442ec785ca6f588f6ffafe915723a32c34fd6",
|
||||
"THEME_TESTS.json": "eaccb949dc12cfc0845292bde4dfe2cda1a8af7c107357c52dc68aa2c4c3f195"
|
||||
},
|
||||
"exportAssets": {
|
||||
"404.html": "44f4f5ea405e5f3c283757c06815b9d76b80ccded65975710f79eb08cc686fe9",
|
||||
"favicon.ico": "8d4923e2c487805ea9f852a685b2cf0fb10512ded8290d2a5c37d1cc8fd0702a",
|
||||
"favicon.svg": "63ecf8f37f8bb146ecfae3917187c6b692d4e801641e8a314486a4007912f3a3",
|
||||
"index.html": "62802e5c9baf3cbb913a5602d23193265f35e68b70b262b262d509b5ad8d9e41",
|
||||
"index.txt": "f0e4bed88cef037cb296f31ccdada5fa0698b673ea8816de1e1901f7a5cf7510",
|
||||
"logo192.png": "bc652031597fabd19b9f14e22a71f809490d218037521b3b64d013418c1390b4",
|
||||
"logo512.png": "5129e9bc1ba812b711fd9a646d3a38a906d365a26ee685df183b8752458944d4",
|
||||
"manifest.json": "2667ce63c2e0835b7007239816a5597639321d333da396a78638dfa9e8a7c935",
|
||||
"robots.txt": "e5ab0d231eeb01b4a982d1c79a6729cac9797ad15a69247e4f28ba6afc149b4c",
|
||||
"_not-found.html": "44f4f5ea405e5f3c283757c06815b9d76b80ccded65975710f79eb08cc686fe9",
|
||||
"_not-found.txt": "6ee9df2ea06c8d6b46b4a2e397cbb0a209381f31125f5aa60d790ad65f2c7e5f",
|
||||
"__next._full.txt": "f0e4bed88cef037cb296f31ccdada5fa0698b673ea8816de1e1901f7a5cf7510",
|
||||
"__next._tree.txt": "b9100c9cbea4f7b3ba2f511d63c7d4b9d82ddf8b305cbefc4709fde4e99f742b",
|
||||
"__next.__PAGE__.txt": "a9259f14c2060132db3929f867737f869b58e47eeb73f7306a101565860da7f6",
|
||||
"mockups/dashboard.svg": "318be3adb1324c26eb30f05572a29528a3e38331c6a604652eef75b54f8c29dc",
|
||||
"mockups/pipeline.svg": "db2ef41faabeb90e7ce85413e168581686c54535d970fc7d8deda3888a479de4",
|
||||
"mockups/workspace.svg": "9bbab22349147c7b01d6e18c93c622a6f8aed6dedaf23715189ab54d60e1ddbd",
|
||||
"_not-found/__next._full.txt": "6ee9df2ea06c8d6b46b4a2e397cbb0a209381f31125f5aa60d790ad65f2c7e5f",
|
||||
"_not-found/__next._tree.txt": "128650e2c58388ed26616d9820dcbd1a477dbc1f8674d57742c69b584ced1f94",
|
||||
"_next/static/chunks/0-_aq6ipzcshj.js": "39f90c215bf52aef6274ed3dcc0f8af32e21a37fe8845b3bca0d6ea60da6a8c2",
|
||||
"_next/static/chunks/07vdc-duql714.js": "5a4840d1ba6b65782459968940a2f4cf973c99f0f77890f4171c4f420f339353",
|
||||
"_next/static/chunks/0bdt7ln111t48.js": "6184b1a61f22e2a640c17941634fdc75678ce93d142848d9f07f163e0d1fd201",
|
||||
"_next/static/chunks/0bwvt3mysnclc.js": "7705667a1b75812b7833d9c9dff47fe023015e58e382c40f4507d9948c973af4",
|
||||
"_next/static/chunks/0cz1d0mv5g_q7.js": "0973c1d64c88adc8e3c950410cb58b288f72118d5965b78049438deb8f2f9683",
|
||||
"_next/static/chunks/0enhs8x_8oeah.js": "44c76f6178d407e1f147fdf70015fd05c21e58ed220fc922d23dfd1e0f8631bd",
|
||||
"_next/static/chunks/0jcvc3qm6-lyk.js": "7c27e1fe373b822adc68c63096a5bf38444ad605b9743f0920271652989c56f1",
|
||||
"_next/static/chunks/0lxzrfwn1fphq.js": "1f1792240611f3fabb14afa6b66f80de20b035a3d0ceee2e40f5f6f589129774",
|
||||
"_next/static/chunks/0q20g9o8x-k8z.js": "3d4d9086985419aa8866b032158196c774acb8bf318f3c8245508c8daa9c5148",
|
||||
"_next/static/chunks/0q_pwu9jxv4-d.js": "42a43b3d7245a413c7c29b4cbe87823037a6dbc637e2e282c92405470e0f575d",
|
||||
"_next/static/chunks/0w69-xg9od0ja.js": "88a7bd64f4fddf57cdbf3e993be2a44e48d5b313e434038bc9a7337d107ae162",
|
||||
"_next/static/chunks/11-48p8kygxgp.js": "57eb9059599b5a5a30598d0a334912d58af571c0ffe28448ca76ad77c8ea8df9",
|
||||
"_next/static/chunks/13uq1xe3s3l_c.js": "dd5b46dbf29a692062dcedc2604ff9c254db1abfcf9d39f30ab96b2de87d1707",
|
||||
"_next/static/chunks/14-lfugawba2w.js": "6a5780ca3c84d7f130f3c0a14431c85c7a1e799e2645b8c171161dab40a64360",
|
||||
"_next/static/chunks/1435in_k_-dhc.js": "4757476512d5c4dd25f9264a18b304ed4824b23aff1c09e134fcbff21d9c36b6",
|
||||
"_next/static/chunks/145oicobmjvm7.js": "d6bbbdeed1381652dc7412e5ce673a077579ecd5cee8934cb6b533c814098764",
|
||||
"_next/static/chunks/14e7ovj0s3elm.js": "070567dd4d23fb9fa0b9ba132185a697af6578045d43b2b1c7bbb2a1594d935d",
|
||||
"_next/static/chunks/154b5a6du9olf.js": "49e4df3a3e10119ddc34f84767883b9228ff6798a07fd759c2fb8e2be62fe9fb",
|
||||
"_next/static/chunks/16lfece6cnlln.js": "716363ba044f30b0e70440756b4e5eafa2d25f2e1628e855e3bc4ab9eabee3d3",
|
||||
"_next/static/chunks/1d0xrdyyzw7qc.js": "c11668ff1e152008e0d7b4454af12eb36c97df46a5860938e2eb5d8429b374a8",
|
||||
"_next/static/chunks/1h7j7ef9e6i41.js": "cb6cd497566dc188b67d09b9c031ef9bbf36f2b85d0aac02621f56daa44faa34",
|
||||
"_next/static/chunks/1ke8pzecwofrg.css": "32e9ab963ebadebcbe2c68dffb24cfbfc8cc24255ad91b48b7941fc777bf7439",
|
||||
"_next/static/chunks/1m3dt58dmprbw.js": "3a80b00707e6a884a03fa636260511585f1760f37c24fd4861ead110e6b3e985",
|
||||
"_next/static/chunks/1req80b9jj38r.js": "eee4d2e3789e1215195dba99ad0f09d34f8c83da848322b76054722233e9dae3",
|
||||
"_next/static/chunks/1vlgr-jtg9qr0.js": "6e41421a30b7313860e86c2069ed9dde394e29d004eeb42af46b2d2d124a1acb",
|
||||
"_next/static/chunks/1w3q8yrcjn2jk.js": "365200e241ee9290e93d7c2fdba169f2b0a8e774541e3cbf3f6f2781110fa644",
|
||||
"_next/static/chunks/1xn023_28rgzj.js": "4f7f2108d030a48d039930736c92a55710975dddf419fe673f84d92899b1f575",
|
||||
"_next/static/chunks/1xwc-b795syag.css": "f73c002233f931ca14d0ae58815c47ca9f2659f25b1547a6d1fdca12a2a00b3f",
|
||||
"_next/static/chunks/1zi8i6dnxiac_.js": "8aea28bbe6a138e5d4b619429ca71570883a7aee974b86d5a4a746d90f704dbc",
|
||||
"_next/static/chunks/21n31t_q2ou2m.js": "bbd6a5dc061a64d5b7817babeeb5c2f90aae8ba21cff54fea1064c39f497af6a",
|
||||
"_next/static/chunks/22uh2tvaw80j2.js": "dafe6b4e23dc5c1d32f8b4a60c561238d2d5e7545f23ebc5b3f7304b48626dbf",
|
||||
"_next/static/chunks/22wx8--1b9tnq.js": "3f7d8e762371262c6a740b4dac21725b424847319afac46055e97074a99ff5f5",
|
||||
"_next/static/chunks/245ibf0f31ne8.js": "8b27ab5d720bd278b5d73a7e824bfcccf4cc893ced9fa6f1937bb2bc7a65f967",
|
||||
"_next/static/chunks/280cq9ekejv1f.js": "01de8c1c3555cdd8d711763065ea9d8aec2968c3053f61254e43e26c999027bf",
|
||||
"_next/static/chunks/2br3ad_-bc7k9.js": "80fa55f7a32db4d743fda36747c36994fde00a0f53f2eb25b2a6d07c6fb97cd7",
|
||||
"_next/static/chunks/2gd9s_n-0nl1p.js": "31e2811be51a3c4d0ff2d1e3cea756e7fd8d57ef89141b5de69f638c1301d039",
|
||||
"_next/static/chunks/2j9f-6w2x4auf.js": "a23068fc68514dcaa1375de8802bf7f9bdfc561835e4fe47b9e6fe8f7372f85c",
|
||||
"_next/static/chunks/2s2gjr6ro25dj.js": "7489e2ac285a05b563c2bcb4eaf9274bf930f2a7385f17d6d5e6850064b88b10",
|
||||
"_next/static/chunks/2u5qve004opku.js": "be388d9a6aa423082bafb4584c3facc65ddfed71bcfa5c1d06b097b408c5ff97",
|
||||
"_next/static/chunks/2wae6urahmel1.js": "ae86575883781981cc373601a07009101d81eba801f40d4607e6f3f168777a5b",
|
||||
"_next/static/chunks/2xlg4_1fj8fxh.js": "8ab4ba521db0167f3dbf684787ebf643cbc66fa7ffff7cdc65a8d8076a926155",
|
||||
"_next/static/chunks/2z42el0b2mp8_.js": "86ff990ef32c90c4839583e4f1d1bcbddb165dad3141b9fcd2ecec67f4ff24b8",
|
||||
"_next/static/chunks/334vtqp3-g1j6.js": "c33d42da97f3af7388e29273297e9f42c67f54b7f5ec77a5d0637e2da06d7f7e",
|
||||
"_next/static/chunks/3720519r84mh6.js": "54358db392a13914e3363046d594e824b1a3ef987913d95002bf48267dded4aa",
|
||||
"_next/static/chunks/3bqn9b34na0b9.js": "f1b8ebcc1b22251c33c9f3a5d11c1f893cad2da2e8744a441e790f7347aa9e73",
|
||||
"_next/static/chunks/3ckk_j5ril9ag.js": "87f631dae7b648d32171e9e05a3e000753ecb54f8d3b86a4401c0e4ab4d73553",
|
||||
"_next/static/chunks/3f96r6vscobou.js": "d4b452ff3f1433f8fe1df705a8f592326f51b5a8846e6c2790d28df5a977aed3",
|
||||
"_next/static/chunks/3gkylew_qn7cw.js": "7e6c74c81be0c41ab433e36d65b914f62c48f332922e27f7cc953476f4dd78cb",
|
||||
"_next/static/chunks/3mowdlh-jq9ii.js": "2c6ccd1500d28ec0c7312cb08ee221f0e4184ba21465ee166a054aa9a6c7f3ed",
|
||||
"_next/static/chunks/3os11ovm65tyl.js": "c5a908bd61f53f0d75927efb71e53aef8fdd9b2e4fef412a167990dbc702c166",
|
||||
"_next/static/chunks/3q4v10rrqy40n.js": "d87ff7b7a0f07d0d92eab3876481eb686a12d9c43d8b92cbe406aefa227a11c1",
|
||||
"_next/static/chunks/3q80eur194l-9.js": "7b52d29843c23a0ed74056eeb1704de14488f36e9d05f2f8271434c61051dce0",
|
||||
"_next/static/chunks/3u61o8t7m_jza.js": "86231c12e0f8cacc8638bed0bc4b34f645fc35e60de342dc154d3cce0c9a5afa",
|
||||
"_next/static/chunks/40y_aqqilokr2.js": "1f5a5260316134d6bffe949400752ee6b42addf908ae714ef4ae4ebde916dddd",
|
||||
"_next/static/chunks/43b5x8qjjh3ax.js": "6ee7261cf9a63e0e6ea181bbb09125e09948588b6e10b5c02727c686a6062a3a",
|
||||
"_next/static/chunks/442d7ylb3po0z.js": "d95cedfbdcd00c674fd718cbbf391ec01c0728018b0db2461a06df7074049132",
|
||||
"_next/static/chunks/turbopack-25fzg9ay_1ss-.js": "c40f39e993a30c96d6247bb3a7b581538bb046efe8ef8ec07bea3ba32291750f",
|
||||
"_next/static/ibUkuY7Y_5wUxZxd0jW38/_buildManifest.js": "9476e0afd3f9da68a64e6ec58631191fd3eaca62c9f5a377e7517fe9a89e59ea",
|
||||
"_next/static/ibUkuY7Y_5wUxZxd0jW38/_clientMiddlewareManifest.js": "5483e3295dc35dfe29ea932efc85341c916f10ff78ff5b0e965e003710893a4a",
|
||||
"_next/static/ibUkuY7Y_5wUxZxd0jW38/_ssgManifest.js": "678f6ce2cb80b1fe72fc67e7412be6e2ab6ada083111b64f7c40d35e3cba5e00",
|
||||
"_not-found/__next._not-found/__PAGE__.txt": "b29ec33fb211daa1fd701159576a82422aecee42bc24fa6927e28f4e22e3df0c"
|
||||
},
|
||||
"commands": {
|
||||
"typecheck": "npm run typecheck: exit 0",
|
||||
"lint": "npm run lint: exit 0",
|
||||
"build": "NEXT_PUBLIC_API_BASE_URL=/api npm run build: exit 0",
|
||||
"browser": "node scripts/verify-a3-theme.mjs: exit 0"
|
||||
},
|
||||
"limits": [
|
||||
"synthetic API fixture browser lane",
|
||||
"Google font requests aborted, not downloaded",
|
||||
"no backend or native-device/security/release acceptance"
|
||||
]
|
||||
}
|
||||
File diff suppressed because one or more lines are too long
@@ -0,0 +1,14 @@
|
||||
{
|
||||
"date": "2026-11-03",
|
||||
"branch": "codex/a3-ui-09",
|
||||
"base": "f0c8c6d321a70b4d477e99c7b9557246b6361cdf",
|
||||
"ownerApproval": "Approve IM08 and A3-IM09",
|
||||
"frontend": { "status": "PASSED", "distinctCases": 143, "suites": 11, "union": "Initial stable application-source142 minus18 earlier processing plus19 final processing cases", "focusedReruns": "Five contract cases and intermediate18 processing cases overlap; do not add.", "earlyAttempt": "EARLY-MIXED137 cases135passed2failed is not a clean baseline because regressions were added during execution. No acceptance claim." },
|
||||
"red": { "contracts": "Four expected failures, one default case passed,65 filtered NOT RUN", "focusRace": "One expected failure,18 filtered NOT RUN before moving requested focus after React commit" },
|
||||
"backend": { "status": "PASSED", "cases": 69, "failed": 0, "skipped": 0, "classes": ["UsersControllerTests", "TwoFactorControllerTests", "AuthSessionRevocationTests", "SessionsControllerTests", "AdminProcessingControllerTests", "AccountDataExportTests", "ApiAuthorizationPostureTests"], "environment": "Local mocks/InMemory/temp SQLite; no real account or provider operations. Existing user SDK/DOTNET_ROOT used after system dotnet lacked the pinned SDK; no config changed." },
|
||||
"static": { "typecheck": "PASSED", "fullLint": "PASSED", "finalAffectedLint": "PASSED", "buildIncludingTypecheck": "PASSED", "verifierSyntax": "PASSED", "diffCheck": "PASSED", "initialFailure": "Unsupported exact option in testing-library queries removed; no product behavior change." },
|
||||
"browser": { "status": "PASSED", "distinctConfigurations": 16, "distinctStates": 128, "aggregate": "112 unchanged account/admin states retained from BROWSER plus16 final processing states in PROCESSING", "configuration": "320/390/768/1440 x EN/NB x light/dark", "mutations": 0, "exportRequests": "16 explicit requests intercepted with fixture403", "limitations": "System capture is unavailable state; audit empty. No credential, revoke/delete, reset, provider, model or production operation.", "followups": "Visual defect escaped axe; label/column fixes then actual intermittent focus race reproduced and corrected. Failed selector/focus reports and diagnostic image retained, not accepted final states." },
|
||||
"review": "Independent source, verifier, visual correction and postcommit focus-fix reviews found no remaining actionable findings; no independent rerun totals added.",
|
||||
"notRun": ["Real authentication/OAuth/email/2FA delivery", "MariaDB/hosted CI", "Native devices/screen readers", "Integrated security attack simulation", "Recovery/restore/release/production qualification", "Physical PDF rerun, unaffected renderer"],
|
||||
"remaining": ["Gate F before IM10", "IM08 granular Ghosted pause and mounted AI entitlement refresh gaps", "Full Phase10/European localisation/Global Jobs/launch/security/release qualifications"]
|
||||
}
|
||||
@@ -0,0 +1,278 @@
|
||||
{
|
||||
"base": "f0c8c6d321a70b4d477e99c7b9557246b6361cdf",
|
||||
"policy": "LF-normalised text, raw PNG SHA256",
|
||||
"sources": {
|
||||
"job-tracker-ui/src/views/ProfilePage.tsx": "ef05e15a7d841fb75ebef0e2843b710c38e0c73d317b976e2b1da76a25723439",
|
||||
"job-tracker-ui/src/views/ConnectedAccountsPage.tsx": "09cbe497948cecacacc9e6e1b6c216bb0feb24977afcfe6c3a1ed0c10bd2708e",
|
||||
"job-tracker-ui/src/views/AdminProcessingPage.tsx": "e58d9a86dc937eac291c2d7114b514576b9d38bb6232e8a6a15bfac9b3137304",
|
||||
"job-tracker-ui/src/views/AdminUsersPage.tsx": "ed2377d7e004c78c3274c43d534c0a3db7b3468b2de2fa11210841e2cf31b53a",
|
||||
"job-tracker-ui/src/views/AdminAuditPage.tsx": "a9415d7c759e67079b5db64c05c9cecfe9d062cc5b0532c909261fc064c91343",
|
||||
"job-tracker-ui/src/views/AdminSystemPage.tsx": "64e85d9b13088b5229b6635674e9e6ff9ee6c4a62db7f66accb1dcddcedd16c0",
|
||||
"job-tracker-ui/src/components/SettingsView.tsx": "441e8e6b2aea95233a85fb425f07c7549d4bda3ccea4680fab7e7805a5ff24f8",
|
||||
"job-tracker-ui/src/components/SessionsSettingsCard.tsx": "057397bed9c98131f2913ec597f636af359e6d70984f37216816b0b7b78f5442",
|
||||
"job-tracker-ui/src/components/TwoFactorSettingsCard.tsx": "2945f262db833978a12653e0a155f5e979a8bd39b240ece3991649fc0cde888f",
|
||||
"job-tracker-ui/src/components/BackupCard.tsx": "94178fe3485b6812f1767628b4deb47357a9fa1cc6912d861acf75ebb6a85d89",
|
||||
"job-tracker-ui/src/components/EmailProviderConnections.tsx": "5c5211c49012f6dc77d049e7164dd1f5807c9254e3278c2f47158d7f6209d73d",
|
||||
"job-tracker-ui/src/components/GoogleAuthCard.tsx": "747afc361183bff1c558110eae9e2108d1e0ddb793dc789719623a7f3f38f4df",
|
||||
"job-tracker-ui/src/components/MicrosoftAuthCard.tsx": "36558ba83de1bca2a5b60d55c891c18a0d87ca9795404027e332ea1c67545ca5",
|
||||
"job-tracker-ui/src/App.tsx": "a176e52d81c4b6ded63c5f38cb27e853aa09312f2cc45fc7e5b5e44573e0fef3",
|
||||
"job-tracker-ui/src/auth.ts": "1cbdd59f73c5a961613b2569679f96630cded407974876a4ca8abccf28780b0e",
|
||||
"job-tracker-ui/src/sessionBoundary.ts": "09edca77c98294818d2ad0c409ce595f1b6ca0c1f60419fc1078b70f96f5b7b9",
|
||||
"job-tracker-ui/src/i18n/translations.ts": "d3167487ec82e302bb26c9269b4a79b03a269b85ed8414b11cf38a9bb8f3d0a7",
|
||||
"job-tracker-ui/src/profile-page.test.tsx": "37233ca196062ae91a6dcc9ce7146cc4e242c28ac2836c27c894bdbaec13d86e",
|
||||
"job-tracker-ui/src/account-security-flows.test.tsx": "8ff99509f50342fbb8ada67ec5f646404ac60773f2d72c84b772aca063c7cc8b",
|
||||
"job-tracker-ui/src/account-security-presentation.test.tsx": "12f8fc05eea372c6b1b7d60907f14845a23dcf79b7f44848ad04eb80ae5a0d35",
|
||||
"job-tracker-ui/src/account-providers.test.tsx": "fbb7748829fe01fa33e977a0c77bd8bc5b850a33fb43866a37c81962c090c664",
|
||||
"job-tracker-ui/src/account-data-export.test.tsx": "05e55a62459d7c2c4d04d110e411b25a53786460b13d375bf50b482699e154e5",
|
||||
"job-tracker-ui/src/admin-users-page.test.tsx": "af86966ae40f05115b38bd592ba6f43f6f78c7cdfda14eaa7189c2fded893eeb",
|
||||
"job-tracker-ui/src/admin-audit-page.test.tsx": "45f2a6274f465aa0c2b805d1ef163cee920b806827b2f3199ef7f89d76b1de3f",
|
||||
"job-tracker-ui/src/admin-system-page.test.tsx": "794fc020315dad975453102001b8d2e405dc289f020d5b817c4dc4d7c970a60c",
|
||||
"job-tracker-ui/src/admin-processing-page.test.tsx": "e6cb36eaa4d1a245f4f3ec1cad59395aed458cf5d655bf326e48d93aa0637391",
|
||||
"job-tracker-ui/src/settings-view.test.tsx": "819ff890e95bd3ee4ca5d696adccecce6b423c768df98f98c62644d546a48576",
|
||||
"job-tracker-ui/src/translation-catalogue.test.ts": "f20e8099f2c4dda76574ea3ed1e95b743eef5da82507d7cbc3f9925d52356b98",
|
||||
"job-tracker-ui/scripts/verify-a3-account-admin.mjs": "2332269be94223a56056a0134067b8fb49de305312c32d0a3d543cb1e0f8ffd3",
|
||||
"job-tracker-ui/package.json": "3745394e406cefa40d30a87e840bccb359be147bac6ffba736e2ae90898a8626",
|
||||
"job-tracker-ui/package-lock.json": "bf31e90d7af03e8af059db2aaf893925b9e8881a30a1688034ed88ef45d4fcab",
|
||||
"docs/ui-modernisation/UI-09.md": "633b384ecccf56e423d3e3fd36876f7ff20fc285bd68378c29216a7289d963df",
|
||||
"docs/ui-modernisation/ACCOUNT_ADMIN_VALIDATION.md": "a0979fe4a707094d2f948d182f883669725a8733233a106eaa0b7235b945c5a4",
|
||||
"global.json": "fd22f0dd0b4266472917812222b4ab513b0986fc303507a2dff7ffbb65e3c461",
|
||||
"JobTrackerApi.Tests/UsersControllerTests.cs": "6af9651f681db19ff8b7e9177b1c45e54d2ae7eec73cd052da493a80c9829ca7",
|
||||
"JobTrackerApi.Tests/TwoFactorControllerTests.cs": "dcd66852eda22f5ad5d9c8c9e59343941801ffa58432a9c2a42bac6050340232",
|
||||
"JobTrackerApi.Tests/AuthSessionRevocationTests.cs": "beb647dbadaa3f006d59737dd974788c28ad88701e0ffd1bfd47a9034e3f2835",
|
||||
"JobTrackerApi.Tests/SessionsControllerTests.cs": "e8c26af41f6194644e75d9c7f981c8f6528bcce1ef51df2c585e05fb22767d98",
|
||||
"JobTrackerApi.Tests/AdminProcessingControllerTests.cs": "61706c6d54cb05a444c969ac757837339b4039b5626f0c1ace2a86aa357af66d",
|
||||
"JobTrackerApi.Tests/AccountDataExportTests.cs": "df70bac7b1c2b43a0cc93082994db05436cb218acae77bbf68e8d91e067c58a0",
|
||||
"JobTrackerApi.Tests/ApiAuthorizationPostureTests.cs": "dc90d52e78e9810a296b4cfddc548f90db93378f4ef97b062bead9e83563b038",
|
||||
"JobTrackerApi/Controllers/UsersController.cs": "038198e3fda32688e7986998bbc3ddbe6777f892b05654c888cf70fd80429c3d",
|
||||
"JobTrackerApi/Controllers/TwoFactorController.cs": "413b95b217bff645bf7240539abee90a22650c54d6b84439ba5f6f58b048b233",
|
||||
"JobTrackerApi/Controllers/SessionsController.cs": "555be479e9be8261ccdfe67a460d006794e23bb00540071f39da9b03621db403",
|
||||
"JobTrackerApi/Controllers/AdminProcessingController.cs": "00d5ffdf2c7e88d5ab73e129ed8cd600d8d2f84bcf5dcb41e348e48f8deb6632"
|
||||
},
|
||||
"evidence": {
|
||||
"backend/a3-account-admin.trx": "b2231a264bab7f46da866f6c0012345843bab8549fa05dac31147eb754ec2d5e",
|
||||
"browser/account-en-dark-1440.png": "312a19684870357e94ae13f363ffd9b6f2f8ff09f6d5da5cc2ca356011257d8d",
|
||||
"browser/account-en-dark-320.png": "e11892c1350738a65f05a24b9ab30a99656df37afadc8cd1bfa5713063b9b6d6",
|
||||
"browser/account-en-dark-390.png": "0f09087ea340bbfd6e6c14626b2a1f817f4a1fa484b490c1f0f4a898c8239d3c",
|
||||
"browser/account-en-dark-768.png": "4ad5b191470a9aebcd21a82d30482f5b3f5f04c9881996c66093517d08013cf9",
|
||||
"browser/account-en-light-1440.png": "f097c8336d09c23a6308a682873bf7a4c150aa261068aaf2ad8e6df62f27ef6d",
|
||||
"browser/account-en-light-320.png": "deb9a9f1396636b2e773d999fea917930f29f85ea93cf827e77acc0774f6fac3",
|
||||
"browser/account-en-light-390.png": "854a103914531126a298378f1f5f2d6f3f15e7516164fc33461a2f305cd9b24f",
|
||||
"browser/account-en-light-768.png": "15a84024a902e58821c9facaca0996fb44dfa5222d6e9b8ea4f798fee3cbfe1f",
|
||||
"browser/account-nb-dark-1440.png": "b2ec47cceb3c7608dfac01f111d3d465a2b9f7a8840b3e899550f1bf64e97e34",
|
||||
"browser/account-nb-dark-320.png": "a97bd892a24356a080a28f283fd208e58337b525df27af0304a90129986bf842",
|
||||
"browser/account-nb-dark-390.png": "27361e6ac1cb2fa508cc455e82faaf586c011667f3007feff5359d04811934dc",
|
||||
"browser/account-nb-dark-768.png": "8dcfbe33f265bbffcbb52002d06c3589c23045550b2687ff4f3df9daf7b82332",
|
||||
"browser/account-nb-light-1440.png": "95b6378311b64650178b3b3c66119c8f045a67e84426c74bb52a0c931ab0a1d9",
|
||||
"browser/account-nb-light-320.png": "0e991de716e1fad299d7a70582f75e32a7f4cc6116086492289d8486a889922f",
|
||||
"browser/account-nb-light-390.png": "1c568a88328087d907472ff3531b3c5b0591a61c33355aeb9786382d5735718d",
|
||||
"browser/account-nb-light-768.png": "37f1cfd7c928e2b7e995878d144e95a1283135500e406afbe92ea4c7a8b03954",
|
||||
"browser/audit-empty-en-dark-1440.png": "f5a064b6748af23c30e346122b897d6bf923f4dda09d609e379116f9c96b3245",
|
||||
"browser/audit-empty-en-dark-320.png": "59deb082162fd39056298cb9328709e4699979b81ff8efae2bf9519a9f59a926",
|
||||
"browser/audit-empty-en-dark-390.png": "bbdfe4f3dccc877ca59433c2bf14cf83b3d32dc1bd15785c2c1cf2cd89bd5cf3",
|
||||
"browser/audit-empty-en-dark-768.png": "3374647e8248d1d9f49c6692adfed87d704d92f0cc1c422ec2a3e82ff262c91f",
|
||||
"browser/audit-empty-en-light-1440.png": "89d374d89c8dcf0957951b07869cb8b668649814f3b9c9100ca254b70edbcdc7",
|
||||
"browser/audit-empty-en-light-320.png": "ab4de07cdcb2535ad8e511e4b53e5e4065bfdb868f978828a098fcee245efbc3",
|
||||
"browser/audit-empty-en-light-390.png": "003c37665e1d1b8ac5835b51f25e077421b17695ed2892c7701aaa996e1bb1f3",
|
||||
"browser/audit-empty-en-light-768.png": "8343544a9ec13bfcfb64c4b153f4c7cddba343ab728940f84b5e1beaf4e6574e",
|
||||
"browser/audit-empty-nb-dark-1440.png": "4f487b80e9a7285acae2304d2aae9a28979418981d5bc39bd291e278a5106282",
|
||||
"browser/audit-empty-nb-dark-320.png": "e5f2fe733209a42ae12949769945446b608b25cf06908858f57ebfdd386ae0ba",
|
||||
"browser/audit-empty-nb-dark-390.png": "ab27ed4a92076caa9368d39926f74a8ad5cf340738afa21d8df33db048acf712",
|
||||
"browser/audit-empty-nb-dark-768.png": "dbb096c95a598e43eb1390ec24ea2310a70454673039da01dac3765b1274d484",
|
||||
"browser/audit-empty-nb-light-1440.png": "66d5bde26ec949c70528a495c4d95ccd2cb2ec149f3c58d2afcce9e353d963ec",
|
||||
"browser/audit-empty-nb-light-320.png": "e6f12ff4e64b7c944296b35488e2ebaa209bfc2bf6d1df7b973035bc836885ce",
|
||||
"browser/audit-empty-nb-light-390.png": "625573ab66f4d5d9d82df43ded61fcc7a46b78a5abdefc36a4395c896f675149",
|
||||
"browser/audit-empty-nb-light-768.png": "c5cb57e8501d68b4003f4a8444b8c2829ff67d52e0db2b37ebdfd45e1c895061",
|
||||
"browser/BROWSER.json": "a429dcc54a7191618d3cd45d82111e7f5bccdfa81a36830197972b067d1e60cc",
|
||||
"browser/connections-en-dark-1440.png": "5833a6e84522fc882fe5d2f68fc37e71d9530b079903917902fc3dbc8de2d1c1",
|
||||
"browser/connections-en-dark-320.png": "73e087e19d82cba08c581d7835207aa19cf8b1f786eb41f6626ca35f4376ead5",
|
||||
"browser/connections-en-dark-390.png": "bb8bbaea133aa56b3317331aefd9d0428af2cf33cdb3da82923f9db3f43e4e4f",
|
||||
"browser/connections-en-dark-768.png": "b6191b87cce449a1219b68cef6fc670aec51f1e240ecaa41ec1779fb81c3e66b",
|
||||
"browser/connections-en-light-1440.png": "ce08652198241065bcf521d2e3a8afa203f81d5b0462619abbe598e7112b0bbb",
|
||||
"browser/connections-en-light-320.png": "1385ebcd14623950c344293ce1b00707637f9ab9d7dc2b03e8dca06ab9c2ca4c",
|
||||
"browser/connections-en-light-390.png": "dc39bc33ac4ab22f147a826f5edd651e619de4fdc88d48967518fed690adcb43",
|
||||
"browser/connections-en-light-768.png": "f33764a3938a503092e357047e5e536a345686a9acd065a4edd33fb297b577c3",
|
||||
"browser/connections-nb-dark-1440.png": "ef40e26345be1548f36cd02625a8ea3e12698514a7dcd766a2e641b275546cd0",
|
||||
"browser/connections-nb-dark-320.png": "3e0aa3dd9ffcaec4d73eda99fb5f55dd4be4530d1e5e66ba479beac0e11d8082",
|
||||
"browser/connections-nb-dark-390.png": "d2bf47d3e2242ab9b77e25ae407b95d027f620003e32c56f5f9f5b895d60aae0",
|
||||
"browser/connections-nb-dark-768.png": "b35ee6e7587a1e81419236825b792dd52dc6d0c2d2713d0222325f8691d52d9d",
|
||||
"browser/connections-nb-light-1440.png": "ed3b23aa9b7351e1f4b78a1802959ab4eb96c0978974ea052d2c97b7b7f28c91",
|
||||
"browser/connections-nb-light-320.png": "71b3cd827b4397fe077c2f5c592d3eb91eb93f5ca6eae91b6537c4c3761162f7",
|
||||
"browser/connections-nb-light-390.png": "a9455e0aa234bd531983c5a2475c9c763ec1750ddfc8dad3b4172fd06a5c60d9",
|
||||
"browser/connections-nb-light-768.png": "c676f6fee7e0d13fa660a842fd518a6539b67987644d3c3609e449f08db224fe",
|
||||
"browser/data-confirmation-en-dark-1440.png": "00593f6a7df481dfe1780a354fd279712b03c656532a442d23ba58567176abb0",
|
||||
"browser/data-confirmation-en-dark-320.png": "ce7ccd2e85b7415a41fb8b46e84c079ce0f18a358f32766807a2e0b7efb8d864",
|
||||
"browser/data-confirmation-en-dark-390.png": "3f228e625a94d64301a2792ba3d510af6ca83860a0895d4445bd4e325e041858",
|
||||
"browser/data-confirmation-en-dark-768.png": "020cb5a6015ee60057d3115da9d18f2ba3f709801dccf052895f57ab4199a5fd",
|
||||
"browser/data-confirmation-en-light-1440.png": "ffb996ae39c64dfde4bef6cedc51b8ab3bac93f1db6fd6075f6764b65892340d",
|
||||
"browser/data-confirmation-en-light-320.png": "9d396778a016291d7bd1cd6c109dd5ed07d17094ca14e06badc7326b4a54e97b",
|
||||
"browser/data-confirmation-en-light-390.png": "7eede982c752be4a72e60656cba17752f09344dc6b19addb4431f0b09835865e",
|
||||
"browser/data-confirmation-en-light-768.png": "57aa98764e7344f54bac2a9b76b94a203e649048429fd0b21ec947c61051af61",
|
||||
"browser/data-confirmation-nb-dark-1440.png": "f539f8e0bf57c97e757262e4ae77a04625d82b13b7d83e6a588326b2f66e9b44",
|
||||
"browser/data-confirmation-nb-dark-320.png": "e01d53f5a416a3396c9e3a08f8eda510492465fb3419070654e01304cecd3266",
|
||||
"browser/data-confirmation-nb-dark-390.png": "0ce246cf1499bddad3cae89b57c86ac259b4ea5881199a3d9abf558c50798299",
|
||||
"browser/data-confirmation-nb-dark-768.png": "097452eb9d99e08a471240cb522ed0cfe432fc080395550efa0a02778d15ef0d",
|
||||
"browser/data-confirmation-nb-light-1440.png": "4624974d46ecbb1a6e49b3ae455ed1dc452a44a45a6bc75f92a96cbac6448839",
|
||||
"browser/data-confirmation-nb-light-320.png": "dcecfc1167e9d2835440a8b51ce6f9d75949b649f1580f5c01286037be3794f3",
|
||||
"browser/data-confirmation-nb-light-390.png": "12a0511b6316002a1b067e931eb6c1710e0e2c25c3d07fa80a870bff331517bc",
|
||||
"browser/data-confirmation-nb-light-768.png": "3ecea84e17f96389c48965f8f535650505d145f341938be46a475e98d2b1f8e6",
|
||||
"browser/DIAGNOSTIC-processing-en-dark-1440.png": "dc097dc658e24b2cc52e98e381c4de9a5dc722fbd47a3ef3cd6a1a3844cb4d33",
|
||||
"browser/last-admin-en-dark-1440.png": "69e18f7ee4ac23b5db2048ac2caa1cd03d884cc5ca348f2fca59384ca9d6ae2b",
|
||||
"browser/last-admin-en-dark-320.png": "9758fdf20bf94cf8c06e60c08a84f89bd1ae3e3e3c93cfeb96bb5138482fce1f",
|
||||
"browser/last-admin-en-dark-390.png": "c4009a35125a3cd3c147589c442505e72556e022b4c8dffb5f47d47fbbac93b8",
|
||||
"browser/last-admin-en-dark-768.png": "f924e1d2ecb55495c4809e925ded6cff917b250953ecb1c60ea3381d16f8b12b",
|
||||
"browser/last-admin-en-light-1440.png": "fcd84ea36ce7f6ecbc4b3a833bfd2fb2042cf3c1950e544075b288fa5b44f0d6",
|
||||
"browser/last-admin-en-light-320.png": "8563406cd5049091242bfcef3de8706fb840b41a25fbb034248cdbee27c0f0d5",
|
||||
"browser/last-admin-en-light-390.png": "2a38b94b67c8a88a49cf7092d7f49e1f483038551c23588401d15e3e534c9917",
|
||||
"browser/last-admin-en-light-768.png": "9a747128a4697e48f0653080e8d92102cc476df0e19ff9d3ea96890e6900391e",
|
||||
"browser/last-admin-nb-dark-1440.png": "0d5b20937b36d106b6b266f1f9fca722b13760723b305faa868632d6eaecd3cb",
|
||||
"browser/last-admin-nb-dark-320.png": "4b5f340ca7498c1f073a6d208c941042a355d2a71606c20fc043e197e2a12c2f",
|
||||
"browser/last-admin-nb-dark-390.png": "16862b263e2d38774e7236285c5d057dc745194315ed38d1fb64c99c12670044",
|
||||
"browser/last-admin-nb-dark-768.png": "71d4151ed9d471487c0e82bf5a9e00e9cc59516e706c86e3dcffbc8a306024ae",
|
||||
"browser/last-admin-nb-light-1440.png": "0db0b99f4afefef2195728534a7859ffb2231cad9aea2f290ea6a4a240656a03",
|
||||
"browser/last-admin-nb-light-320.png": "79fb6979de2663d6e6db124d17011f0b4ba348b3fbbdaa0b0834ed7966a88cba",
|
||||
"browser/last-admin-nb-light-390.png": "b6f26151f802e7fdd75fabe906c1d9b05841cd0c773f2534ed0d2260315c09a4",
|
||||
"browser/last-admin-nb-light-768.png": "622aa1ea4897dc223232bea50fd72a028a1cbdb5d9222ade3336eb83c48b8b1e",
|
||||
"browser/PILOT.json": "f12253c8d625e0d01970af6e2e88e04ac110084a8cf7d3b8f5fb1cee37fac0ab",
|
||||
"browser/processing-detail-en-dark-1440.png": "df8e6b45f22652fba8e9284048eac87862e9b0c194a49f0252968c4966c45d1a",
|
||||
"browser/processing-detail-en-dark-320.png": "409ab47edaaf8616dc38f54d3df414aa7a5b39526cd8e54d35a999f7317656b8",
|
||||
"browser/processing-detail-en-dark-390.png": "5025d103291f6a6e8c3d65687ef26252499bda4312668220ff392570308ba656",
|
||||
"browser/processing-detail-en-dark-768.png": "2a963c520af031ec67062c5350a20657afccd8d46185518f99f3f2a757cbf27b",
|
||||
"browser/processing-detail-en-light-1440.png": "e107f573f14d1193ac8d7539027e9ae4466cead93b114bd363fe3c8dca23373b",
|
||||
"browser/processing-detail-en-light-320.png": "39b2a7d4f571f5f7ddceedb7433c80be8146a6691c2f0c5f8e0385d93328653d",
|
||||
"browser/processing-detail-en-light-390.png": "01a412d2021e03197dbbe0fd1b3e961a365f705c821edd4f91f9200774a6803e",
|
||||
"browser/processing-detail-en-light-768.png": "c998727f22c2a9c9bfe337d144e0a89df7e0588cb9a4bffd5a12e67c3112c9fb",
|
||||
"browser/processing-detail-nb-dark-1440.png": "04fe773bcb0debe4477895a52800ea5649312cf5f9f6b5d69b32764046088ad8",
|
||||
"browser/processing-detail-nb-dark-320.png": "792e92b333611ee02b9dfea5c54f33449b5ed2618d13f77dff91ef36fd518e25",
|
||||
"browser/processing-detail-nb-dark-390.png": "648e2ba2f1dfb6a458131a0a891e09e8147494421c8e58e5c86708b1ea160d8b",
|
||||
"browser/processing-detail-nb-dark-768.png": "1c369b9193a8e22e5e91dd3ffd8688f359be3c5fca414e2bcf91bf0a3fc978af",
|
||||
"browser/processing-detail-nb-light-1440.png": "060eef411e9e726b01240764b9cb6eb013ba8d74420b16a611d49c0c04dcfbe9",
|
||||
"browser/processing-detail-nb-light-320.png": "08cfc058f7084e9ce6987f56d89c2a0e6de613059fdaec91228b0022dfd802de",
|
||||
"browser/processing-detail-nb-light-390.png": "217525914575c5dd83e43ed4f04c7d1e81038255559dd3a91a29b2412e416668",
|
||||
"browser/processing-detail-nb-light-768.png": "e7dcf4c7167a66826103c023ed65882c70e9cd58799075caef4d66b5461e23db",
|
||||
"browser/PROCESSING-FOCUS-FAILURE.json": "a4a4299ca46be25c86e4bd6845ae7a8d54b2c933e580baa1d1d75cbf4f4852e8",
|
||||
"browser/PROCESSING-SELECTOR-FAILURE.json": "222b4ded745c97097372841633c24c33f2f2ae7288a53da51e482de9e74c6b18",
|
||||
"browser/PROCESSING.json": "1f94e9f879e775b0550bf6ab79219fd4068c728e0bd0383b0b6e81cacf76d722",
|
||||
"browser/session-confirmation-en-dark-1440.png": "d4f076ac65e892871de3b77f66e1136a956a13e7ddd6b76271bf3652b551bde5",
|
||||
"browser/session-confirmation-en-dark-320.png": "7cfa5ab5b4b3073ef98502bb6eeef8a87b1e7ab7611f65647f995ea71bc6b6b0",
|
||||
"browser/session-confirmation-en-dark-390.png": "47844007c4a47454fb662c2526abeb630cb23a20b21ce78ed14dbc8033eb56e0",
|
||||
"browser/session-confirmation-en-dark-768.png": "da5681552922f8406548a790e360b5cfe7e7edcff511133c26ad0f1bca3e0877",
|
||||
"browser/session-confirmation-en-light-1440.png": "a28533fd8d56c5351115b6cd1528b61f10d8673e8150ad1cba695394d329b5f7",
|
||||
"browser/session-confirmation-en-light-320.png": "b974599c525fbf15c560cb7de6d63abef494e7d8dd88f146c5dac8bda5aa0222",
|
||||
"browser/session-confirmation-en-light-390.png": "86c35e888d6a5cbdcf965ca62bf22ab7183b790215b56ee867a045b18cc4484c",
|
||||
"browser/session-confirmation-en-light-768.png": "11a662b899b187feb16d1f21b2b25d5d777e894dfbc1be92e9c8b211be734dcf",
|
||||
"browser/session-confirmation-nb-dark-1440.png": "907c377c06520569714a933bf8df4390d59a05382eceae1f81ce6242fe1cbd48",
|
||||
"browser/session-confirmation-nb-dark-320.png": "2ff35e814f11dc13a5d0a3639fa822a9b447b6bf36f3b7b63d76afef6a6b16fd",
|
||||
"browser/session-confirmation-nb-dark-390.png": "2a2a5cc16fcbb5b33b3144ea17592649bf388c6f30f5c2597a2b9eaf46eeccf7",
|
||||
"browser/session-confirmation-nb-dark-768.png": "0d31988dfb055c57781c4494ab8327c1228a7041fcb24132062b07c6153bb433",
|
||||
"browser/session-confirmation-nb-light-1440.png": "26e947c72034b871926c5b36fea9e94bd28564faa3089720bacac17a6a805eba",
|
||||
"browser/session-confirmation-nb-light-320.png": "2f7182dac97e25d3e66f899d9bbec6d541193475be5cba3c3fef6e64d02c6b22",
|
||||
"browser/session-confirmation-nb-light-390.png": "c444040f296e56e39ef3a0ba8764b28e6962c017848d8c1fc2554fbacb3f1050",
|
||||
"browser/session-confirmation-nb-light-768.png": "4d34151694e777658ebc3db248ee8bd89502ecb26259cc3ed0eb883b3fb918a0",
|
||||
"browser/system-unavailable-en-dark-1440.png": "f150be599ab2553150f94031ec37fa78e405cef033948c2f6a4aee7cfe1c01fd",
|
||||
"browser/system-unavailable-en-dark-320.png": "38ad2690ba2b9238df74f4789ceaa6da3cb5f6b202efc747b937552ea4eca89e",
|
||||
"browser/system-unavailable-en-dark-390.png": "7b7f8d83166384382d1463747528d8848ef9732062c3c984c43ac711a162c680",
|
||||
"browser/system-unavailable-en-dark-768.png": "48d061f268576ee0a166c148a34444b462ce46acec3f510211ac0436388a4cf3",
|
||||
"browser/system-unavailable-en-light-1440.png": "db9983b2930ebb1cf6a7f538415fb051a5be126801f572ec75e00626d6c3d4e9",
|
||||
"browser/system-unavailable-en-light-320.png": "e49cf63329d2300e3969d1277acaa9d430fc089cab5e9f65867b34cbd35a56dc",
|
||||
"browser/system-unavailable-en-light-390.png": "5596c9a06b7df55b42aa37cdce4c30029ce2114ab19a2805e6616b82ee6c9270",
|
||||
"browser/system-unavailable-en-light-768.png": "f3190a85526feaedace3e4ad5173f378c5bb0f9f67a41b3dedc737d752da0683",
|
||||
"browser/system-unavailable-nb-dark-1440.png": "aee6c72e72487e8263675e7b058bc381d27d72433c5e686d7363c6b2b39540ca",
|
||||
"browser/system-unavailable-nb-dark-320.png": "b5453f3c4e90879a5ba601fbe7f38baa0769add396db014ec66b28eca0f67291",
|
||||
"browser/system-unavailable-nb-dark-390.png": "45cd536abf4c8bd59c277da58c5c0babf0b40309dd0f92d05340caf8906eb7ad",
|
||||
"browser/system-unavailable-nb-dark-768.png": "83808b28e03773061b840f6e8deb6a781e1ab674aa2012f45d2b4a28fe20b99b",
|
||||
"browser/system-unavailable-nb-light-1440.png": "17d151f3b306d20aa572e171c4c0464426099b6a2341494e8c0f1abf3c68dc72",
|
||||
"browser/system-unavailable-nb-light-320.png": "73de2d08f2be161a1660c1f6b06d20f341ead9aa6d733d693d63c095cfb8b7d1",
|
||||
"browser/system-unavailable-nb-light-390.png": "93787446e12eaef9af49360f787fe42c8eca33b80713338af9a0ddee24a09959",
|
||||
"browser/system-unavailable-nb-light-768.png": "1a03e3f2fd41467b5127cbd6bd168d7ad5ac59435f158acb1bdfbf7b4c9dbd07",
|
||||
"CHECKS.json": "bbbcb6e8f6f06c90647c27a564faceaceb3fb1a7c09b9155ea40348fb214a194",
|
||||
"frontend/a3-account-admin-focused.json": "655c2e2e4324e327ffd06ad3747c0534203ab1042c50230299714bacd501a2ac",
|
||||
"frontend/a3-account-admin-red.json": "20de17c1d8b4453e892488e812fc70dd62767244c78e5480bb5b17d37e7bb8b5",
|
||||
"frontend/a3-account-admin-tests.json": "c8388116b5ad8ddc47076622a4853c40916bff46308438a6d338850f6581bf37",
|
||||
"frontend/a3-processing-focus-red.json": "49682f344bbebb037d814837bf6cf65faa57b343a398a9eabda891d317024561",
|
||||
"frontend/a3-processing-focus-tests.json": "8bbfb741f03305423ae97f0b1b64586b6e94e1da94763c546ad93a8fa68f36d7",
|
||||
"frontend/a3-processing-visual-followup.json": "f5435a0d1cc63548af5870b7ebd234c0f1bf60a3b115089bfa086f43c29d4ed0",
|
||||
"frontend/EARLY-MIXED.json": "a5ebe1f73555605b16deaeed363c3dea906d24652b737a3e931f4311ccace25e"
|
||||
},
|
||||
"export": {
|
||||
"404.html": "954109e56c1cd08c8bf77822b01d4106a1ca1f47c859b27b56d4601750a0ee07",
|
||||
"__next.__PAGE__.txt": "e14c09bd8d4d294073a560d7684b64ef26286466166e42f85704c74d59898fd8",
|
||||
"__next._full.txt": "7da037b1ca24971bc461e03de6e9391e21dd6d554db4c4cf8cdf21297b3ea988",
|
||||
"__next._tree.txt": "47a1866d6447fc675e909b4374ac830a3760f0695a1123e39cf468fd2077e792",
|
||||
"_next/static/chunks/0-_aq6ipzcshj.js": "39f90c215bf52aef6274ed3dcc0f8af32e21a37fe8845b3bca0d6ea60da6a8c2",
|
||||
"_next/static/chunks/0ah1fzqmie05a.js": "5c65505a7dcbac63ac71d254e619a4c800943bfb4fa16cd40c10cdbe7e9b6e31",
|
||||
"_next/static/chunks/0bdt7ln111t48.js": "6184b1a61f22e2a640c17941634fdc75678ce93d142848d9f07f163e0d1fd201",
|
||||
"_next/static/chunks/0bwvt3mysnclc.js": "7705667a1b75812b7833d9c9dff47fe023015e58e382c40f4507d9948c973af4",
|
||||
"_next/static/chunks/0c-j9v44ea4gk.js": "d7e04926724f76dc50b5202522fab3bb553370d040396394e84c342de466512b",
|
||||
"_next/static/chunks/0cz1d0mv5g_q7.js": "0973c1d64c88adc8e3c950410cb58b288f72118d5965b78049438deb8f2f9683",
|
||||
"_next/static/chunks/0gamdsp7ql8cu.js": "f641cd9e2957f5c01234df02211a085f8e8fe2009cf84817e4143f3c477e1dc2",
|
||||
"_next/static/chunks/0h_-smu-bk788.js": "970ef0fa47ce6dfff261c624e08054841b6969b4afc5b0ebfad89126d7543bbc",
|
||||
"_next/static/chunks/0jcvc3qm6-lyk.js": "7c27e1fe373b822adc68c63096a5bf38444ad605b9743f0920271652989c56f1",
|
||||
"_next/static/chunks/0q1wd_b10phzr.js": "307f4a4ed0f1ef2d87b9de51dbcac2382a39aa8bab359994ee7aa41529215b4e",
|
||||
"_next/static/chunks/0q20g9o8x-k8z.js": "3d4d9086985419aa8866b032158196c774acb8bf318f3c8245508c8daa9c5148",
|
||||
"_next/static/chunks/0q_pwu9jxv4-d.js": "42a43b3d7245a413c7c29b4cbe87823037a6dbc637e2e282c92405470e0f575d",
|
||||
"_next/static/chunks/0yg1x7i96lj87.js": "2aad3c0f9e8b7b5a5123a2a439970c49db0be353236e22f9b6eafaaf01328c15",
|
||||
"_next/static/chunks/14-lfugawba2w.js": "6a5780ca3c84d7f130f3c0a14431c85c7a1e799e2645b8c171161dab40a64360",
|
||||
"_next/static/chunks/1435in_k_-dhc.js": "4757476512d5c4dd25f9264a18b304ed4824b23aff1c09e134fcbff21d9c36b6",
|
||||
"_next/static/chunks/145oicobmjvm7.js": "d6bbbdeed1381652dc7412e5ce673a077579ecd5cee8934cb6b533c814098764",
|
||||
"_next/static/chunks/14e7ovj0s3elm.js": "070567dd4d23fb9fa0b9ba132185a697af6578045d43b2b1c7bbb2a1594d935d",
|
||||
"_next/static/chunks/16lfece6cnlln.js": "716363ba044f30b0e70440756b4e5eafa2d25f2e1628e855e3bc4ab9eabee3d3",
|
||||
"_next/static/chunks/19zh-dmyml5oj.js": "2ab304f9b4155cdbac4d22e1b0b56b1c1f775c4bbb3ee93c425e297182bf522e",
|
||||
"_next/static/chunks/1_vy97gdckb4k.js": "93355d018547a26be1b678f43086179f2ad6de3d590b92eda5d7f8f9aaa9ec7f",
|
||||
"_next/static/chunks/1d0xrdyyzw7qc.js": "c11668ff1e152008e0d7b4454af12eb36c97df46a5860938e2eb5d8429b374a8",
|
||||
"_next/static/chunks/1ke8pzecwofrg.css": "32e9ab963ebadebcbe2c68dffb24cfbfc8cc24255ad91b48b7941fc777bf7439",
|
||||
"_next/static/chunks/1m4qrvmbq_fq9.js": "4d36c8ec83dc817f273178dc22f329ab026578075f58de68b6f133bcf911a8a1",
|
||||
"_next/static/chunks/1req80b9jj38r.js": "eee4d2e3789e1215195dba99ad0f09d34f8c83da848322b76054722233e9dae3",
|
||||
"_next/static/chunks/1xn023_28rgzj.js": "4f7f2108d030a48d039930736c92a55710975dddf419fe673f84d92899b1f575",
|
||||
"_next/static/chunks/1xwc-b795syag.css": "f73c002233f931ca14d0ae58815c47ca9f2659f25b1547a6d1fdca12a2a00b3f",
|
||||
"_next/static/chunks/1zi8i6dnxiac_.js": "8aea28bbe6a138e5d4b619429ca71570883a7aee974b86d5a4a746d90f704dbc",
|
||||
"_next/static/chunks/22wx8--1b9tnq.js": "3f7d8e762371262c6a740b4dac21725b424847319afac46055e97074a99ff5f5",
|
||||
"_next/static/chunks/2b2nivoqiaper.js": "f20a0bfbfc4fd335a0e8fa6abf552d24c94a81a2b01690fad1ea088c22fd2086",
|
||||
"_next/static/chunks/2b49wlharl6fd.js": "40619f8a5a03fc7479b0679717b1e5ec0dea0a1944ce77f4ce9d29d2486fdb5c",
|
||||
"_next/static/chunks/2br3ad_-bc7k9.js": "80fa55f7a32db4d743fda36747c36994fde00a0f53f2eb25b2a6d07c6fb97cd7",
|
||||
"_next/static/chunks/2dmc6iqxm14fz.js": "3b20898e0cde315c48d6fd46abd562269bbf73c850528a4be2cfc2b9aa0c8f5e",
|
||||
"_next/static/chunks/2ftgr1rx3r0dw.js": "8866e9ef62ab057bf9923604724edbb463bbdd6dd3fcbf614585f76005874811",
|
||||
"_next/static/chunks/2ghgf2s9b2iou.js": "23d8ff31e2128d0541c1887785fb75885323fea7c5d4f35826513b75c12c2ae3",
|
||||
"_next/static/chunks/2itnratrnd9c5.js": "8be0b191c2d54f7233ebf2f1e169b3bfef680fa93da21c08d8c43b05c3ec174f",
|
||||
"_next/static/chunks/2kpcazmi6n6mk.js": "bea0de681fceff50056bfeccc5d035aff54d20918288051cb64bb259edd250c7",
|
||||
"_next/static/chunks/2s2gjr6ro25dj.js": "7489e2ac285a05b563c2bcb4eaf9274bf930f2a7385f17d6d5e6850064b88b10",
|
||||
"_next/static/chunks/2u5qve004opku.js": "be388d9a6aa423082bafb4584c3facc65ddfed71bcfa5c1d06b097b408c5ff97",
|
||||
"_next/static/chunks/2xkey6z2nw7xp.js": "0f25bf09513b31298148cd262507b20b5a9ca5533317168c16481c544c6ffd6f",
|
||||
"_next/static/chunks/2z42el0b2mp8_.js": "86ff990ef32c90c4839583e4f1d1bcbddb165dad3141b9fcd2ecec67f4ff24b8",
|
||||
"_next/static/chunks/2z9e_b61gtc22.js": "b9d717dad26828438d4ff56cabca41a8055f5eaa54420fd0aeb6b4ba7d5baa0d",
|
||||
"_next/static/chunks/31n24zcvyae0y.js": "110921bad10425af1d689cb939d97be75c7c0af9c35f8b16c5ff237db6fce893",
|
||||
"_next/static/chunks/324qfub45abd6.js": "77ef8e17b89234fb19a80796d5d04d3e297c459e5cb41b35b5bc78c0b10b4984",
|
||||
"_next/static/chunks/32_ah983ce851.js": "0c3cd0d2a5ad789e31226a9ea0506c50016804311a58548c7784b7b45aaecd14",
|
||||
"_next/static/chunks/3329nxgnx3721.js": "ceedc7c69bf0617733b65bbf9f6a682a5d53177d4e8fdb86b8982cda2175f232",
|
||||
"_next/static/chunks/357yqeklh7414.js": "0192ab7198ebbe299d34a934c504dd4b562d1cccebb6e9d4c5163930c881b14c",
|
||||
"_next/static/chunks/3721l8sfm8icl.js": "06b67611b3a93515a375b803b54fe7063c049824f1ebf5c7f7db8701b5091e7c",
|
||||
"_next/static/chunks/3bqn9b34na0b9.js": "f1b8ebcc1b22251c33c9f3a5d11c1f893cad2da2e8744a441e790f7347aa9e73",
|
||||
"_next/static/chunks/3ckk_j5ril9ag.js": "87f631dae7b648d32171e9e05a3e000753ecb54f8d3b86a4401c0e4ab4d73553",
|
||||
"_next/static/chunks/3gkylew_qn7cw.js": "7e6c74c81be0c41ab433e36d65b914f62c48f332922e27f7cc953476f4dd78cb",
|
||||
"_next/static/chunks/3la4obitihzpv.js": "9a5a57b46db389b98f1fd5baa86eba1a360300dae9d1ff3ffeae7bc3378135b9",
|
||||
"_next/static/chunks/3q4v10rrqy40n.js": "d87ff7b7a0f07d0d92eab3876481eb686a12d9c43d8b92cbe406aefa227a11c1",
|
||||
"_next/static/chunks/3u61o8t7m_jza.js": "86231c12e0f8cacc8638bed0bc4b34f645fc35e60de342dc154d3cce0c9a5afa",
|
||||
"_next/static/chunks/3vu8rhjp4sv29.js": "a89673de9ad162f1a7dbb98af4027e67f84502c346abe94fb0341eff22385432",
|
||||
"_next/static/chunks/40y_aqqilokr2.js": "1f5a5260316134d6bffe949400752ee6b42addf908ae714ef4ae4ebde916dddd",
|
||||
"_next/static/chunks/43b5x8qjjh3ax.js": "6ee7261cf9a63e0e6ea181bbb09125e09948588b6e10b5c02727c686a6062a3a",
|
||||
"_next/static/chunks/turbopack-25fzg9ay_1ss-.js": "c40f39e993a30c96d6247bb3a7b581538bb046efe8ef8ec07bea3ba32291750f",
|
||||
"_next/static/k5Uv9-xecPcDM03XeUb81/_buildManifest.js": "9476e0afd3f9da68a64e6ec58631191fd3eaca62c9f5a377e7517fe9a89e59ea",
|
||||
"_next/static/k5Uv9-xecPcDM03XeUb81/_clientMiddlewareManifest.js": "5483e3295dc35dfe29ea932efc85341c916f10ff78ff5b0e965e003710893a4a",
|
||||
"_next/static/k5Uv9-xecPcDM03XeUb81/_ssgManifest.js": "678f6ce2cb80b1fe72fc67e7412be6e2ab6ada083111b64f7c40d35e3cba5e00",
|
||||
"_not-found/__next._full.txt": "381b6b4c6b9fb38cf51eb052390a12a2b25b45e793032d67beee54c88c92881a",
|
||||
"_not-found/__next._not-found/__PAGE__.txt": "76e9f4864f8bd355500a8bae9b077d4f9264678c9fcd6ec88f0809fffa7836e0",
|
||||
"_not-found/__next._tree.txt": "176fea8c3bfee7c85f5f9ee1dece5d2ff6c92cebaa844b73cab1e2267ff1b9f3",
|
||||
"_not-found.html": "954109e56c1cd08c8bf77822b01d4106a1ca1f47c859b27b56d4601750a0ee07",
|
||||
"_not-found.txt": "381b6b4c6b9fb38cf51eb052390a12a2b25b45e793032d67beee54c88c92881a",
|
||||
"favicon.ico": "8d4923e2c487805ea9f852a685b2cf0fb10512ded8290d2a5c37d1cc8fd0702a",
|
||||
"favicon.svg": "63ecf8f37f8bb146ecfae3917187c6b692d4e801641e8a314486a4007912f3a3",
|
||||
"index.html": "29ad9d608dd66506dbf8dc02d24d69afe92ff852644ef68d207cd0da19f52d68",
|
||||
"index.txt": "7da037b1ca24971bc461e03de6e9391e21dd6d554db4c4cf8cdf21297b3ea988",
|
||||
"logo192.png": "bc652031597fabd19b9f14e22a71f809490d218037521b3b64d013418c1390b4",
|
||||
"logo512.png": "5129e9bc1ba812b711fd9a646d3a38a906d365a26ee685df183b8752458944d4",
|
||||
"manifest.json": "2667ce63c2e0835b7007239816a5597639321d333da396a78638dfa9e8a7c935",
|
||||
"mockups/dashboard.svg": "318be3adb1324c26eb30f05572a29528a3e38331c6a604652eef75b54f8c29dc",
|
||||
"mockups/pipeline.svg": "db2ef41faabeb90e7ce85413e168581686c54535d970fc7d8deda3888a479de4",
|
||||
"mockups/workspace.svg": "9bbab22349147c7b01d6e18c93c622a6f8aed6dedaf23715189ab54d60e1ddbd",
|
||||
"robots.txt": "e5ab0d231eeb01b4a982d1c79a6729cac9797ad15a69247e4f28ba6afc149b4c"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,442 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<TestRun id="543dd54d-cf92-436a-be12-ed4c316f2a97" name="Connor@CESNIMDA 2026-11-03 19:36:52" runUser="Cesnimda\Connor" xmlns="http://microsoft.com/schemas/VisualStudio/TeamTest/2010">
|
||||
<Times creation="2026-11-03T19:36:52.6655627+01:00" queuing="2026-11-03T19:36:52.6655631+01:00" start="2026-11-03T19:36:48.5720372+01:00" finish="2026-11-03T19:37:04.8480589+01:00" />
|
||||
<TestSettings name="default" id="6b001c56-1ad6-4b64-a5ed-1101ac2bfa36">
|
||||
<Deployment runDeploymentRoot="Connor_CESNIMDA_2026-11-03_19_36_52" />
|
||||
</TestSettings>
|
||||
<Results>
|
||||
<UnitTestResult executionId="8c5b5e3e-6b88-4129-a8c5-25ca8afabb98" testId="811715cd-47a0-c1dd-1dc7-cfb874cd9cb3" testName="JobTrackerApi.Tests.SessionsControllerTests.RevokeOthers_revokes_every_other_session_but_leaves_the_current_one_usable" computerName="CESNIMDA" duration="00:00:00.0117103" startTime="2026-11-03T19:36:53.8272847+01:00" endTime="2026-11-03T19:36:53.8272849+01:00" testType="13cdc9d9-ddb5-4fa4-a97d-d965ccfc6d4b" outcome="Passed" testListId="8c84fa94-04c1-424b-9868-57a2d4851a1d" relativeResultsDirectory="8c5b5e3e-6b88-4129-a8c5-25ca8afabb98" />
|
||||
<UnitTestResult executionId="c1890c2a-1eed-4be5-89d8-7f0c88327365" testId="b9e6b511-16dc-188e-b0b4-b3c6d1ea5901" testName="JobTrackerApi.Tests.AdminProcessingControllerTests.Processing_reads_share_a_bounded_account_rate_limit" computerName="CESNIMDA" duration="00:00:00.3704136" startTime="2026-11-03T19:37:00.6851917+01:00" endTime="2026-11-03T19:37:00.6851923+01:00" testType="13cdc9d9-ddb5-4fa4-a97d-d965ccfc6d4b" outcome="Passed" testListId="8c84fa94-04c1-424b-9868-57a2d4851a1d" relativeResultsDirectory="c1890c2a-1eed-4be5-89d8-7f0c88327365" />
|
||||
<UnitTestResult executionId="8b6dc4f2-d2f0-4c59-8f6c-fbf894a521fa" testId="4bd6fee0-c227-757a-f276-68c01ee512d8" testName="JobTrackerApi.Tests.AdminProcessingControllerTests.Diagnostic_filters_are_applied_before_pagination(query: "jobId=9999")" computerName="CESNIMDA" duration="00:00:00.3216283" startTime="2026-11-03T19:36:56.8166972+01:00" endTime="2026-11-03T19:36:56.8166976+01:00" testType="13cdc9d9-ddb5-4fa4-a97d-d965ccfc6d4b" outcome="Passed" testListId="8c84fa94-04c1-424b-9868-57a2d4851a1d" relativeResultsDirectory="8b6dc4f2-d2f0-4c59-8f6c-fbf894a521fa" />
|
||||
<UnitTestResult executionId="53b236b9-1f0c-4bda-97ce-560f2dbfc641" testId="4d32ba02-105a-512c-8d73-cbe2ab1e1f04" testName="JobTrackerApi.Tests.AdminProcessingControllerTests.Diagnostic_filters_are_applied_before_pagination(query: "worker=untracked")" computerName="CESNIMDA" duration="00:00:00.3266894" startTime="2026-11-03T19:36:57.5248514+01:00" endTime="2026-11-03T19:36:57.5248521+01:00" testType="13cdc9d9-ddb5-4fa4-a97d-d965ccfc6d4b" outcome="Passed" testListId="8c84fa94-04c1-424b-9868-57a2d4851a1d" relativeResultsDirectory="53b236b9-1f0c-4bda-97ce-560f2dbfc641" />
|
||||
<UnitTestResult executionId="09151881-21d2-4326-a43c-38d379aa90e7" testId="60b6bfd7-91ef-c23f-ffe4-217e3ea1388b" testName="JobTrackerApi.Tests.UsersControllerTests.List_marks_the_current_user_and_last_admin_safety_state" computerName="CESNIMDA" duration="00:00:00.9463192" startTime="2026-11-03T19:36:51.9790630+01:00" endTime="2026-11-03T19:36:51.9790637+01:00" testType="13cdc9d9-ddb5-4fa4-a97d-d965ccfc6d4b" outcome="Passed" testListId="8c84fa94-04c1-424b-9868-57a2d4851a1d" relativeResultsDirectory="09151881-21d2-4326-a43c-38d379aa90e7" />
|
||||
<UnitTestResult executionId="3d166b11-e5e4-48d8-aff2-05762ae9560d" testId="f4f25456-ee0d-29ca-3483-47a23d62bba6" testName="JobTrackerApi.Tests.ApiAuthorizationPostureTests.Admin_controllers_require_the_admin_role_not_merely_a_signed_in_user" computerName="CESNIMDA" duration="00:00:00.0032809" startTime="2026-11-03T19:36:51.9436670+01:00" endTime="2026-11-03T19:36:51.9436674+01:00" testType="13cdc9d9-ddb5-4fa4-a97d-d965ccfc6d4b" outcome="Passed" testListId="8c84fa94-04c1-424b-9868-57a2d4851a1d" relativeResultsDirectory="3d166b11-e5e4-48d8-aff2-05762ae9560d" />
|
||||
<UnitTestResult executionId="e41b3484-9519-4aae-8afd-ba9e539f9b27" testId="a55b51f5-22e2-c043-4279-8e10e60d7349" testName="JobTrackerApi.Tests.UsersControllerTests.SetRoles_revokes_existing_sessions_and_trusted_devices_when_roles_change" computerName="CESNIMDA" duration="00:00:00.2886598" startTime="2026-11-03T19:36:54.5532612+01:00" endTime="2026-11-03T19:36:54.5532618+01:00" testType="13cdc9d9-ddb5-4fa4-a97d-d965ccfc6d4b" outcome="Passed" testListId="8c84fa94-04c1-424b-9868-57a2d4851a1d" relativeResultsDirectory="e41b3484-9519-4aae-8afd-ba9e539f9b27" />
|
||||
<UnitTestResult executionId="8057b950-194c-4cb1-b1d6-fa7fb2837f9c" testId="d044b79a-5986-914c-d41a-518baadb7963" testName="JobTrackerApi.Tests.AccountDataExportTests.Account_export_requires_a_session_created_within_fifteen_minutes" computerName="CESNIMDA" duration="00:00:03.9819997" startTime="2026-11-03T19:36:55.0148289+01:00" endTime="2026-11-03T19:36:55.0148293+01:00" testType="13cdc9d9-ddb5-4fa4-a97d-d965ccfc6d4b" outcome="Passed" testListId="8c84fa94-04c1-424b-9868-57a2d4851a1d" relativeResultsDirectory="8057b950-194c-4cb1-b1d6-fa7fb2837f9c" />
|
||||
<UnitTestResult executionId="44b56b4e-2968-4e4f-8771-6fecc4a150c2" testId="2e1eabfd-4621-c98f-059d-33f191976c67" testName="JobTrackerApi.Tests.SessionsControllerTests.TwoFactor_challenge_creates_a_user_session_row_on_completion" computerName="CESNIMDA" duration="00:00:02.6409119" startTime="2026-11-03T19:36:53.6737842+01:00" endTime="2026-11-03T19:36:53.6737844+01:00" testType="13cdc9d9-ddb5-4fa4-a97d-d965ccfc6d4b" outcome="Passed" testListId="8c84fa94-04c1-424b-9868-57a2d4851a1d" relativeResultsDirectory="44b56b4e-2968-4e4f-8771-6fecc4a150c2" />
|
||||
<UnitTestResult executionId="c785d69f-aeb3-4bd6-bf31-588bd0e347c0" testId="1cb270c5-b90d-5d22-75bd-18446f0697ab" testName="JobTrackerApi.Tests.AdminProcessingControllerTests.Failure_metadata_uses_the_recorded_failure_instead_of_later_success(status: "waiting_for_retry")" computerName="CESNIMDA" duration="00:00:00.5119080" startTime="2026-11-03T19:36:55.5173834+01:00" endTime="2026-11-03T19:36:55.5173844+01:00" testType="13cdc9d9-ddb5-4fa4-a97d-d965ccfc6d4b" outcome="Passed" testListId="8c84fa94-04c1-424b-9868-57a2d4851a1d" relativeResultsDirectory="c785d69f-aeb3-4bd6-bf31-588bd0e347c0" />
|
||||
<UnitTestResult executionId="5f1168de-b7d8-4e8b-be1f-03dfe64f6085" testId="e559103d-3dbf-ce6f-6174-0323c94be871" testName="JobTrackerApi.Tests.AuthSessionRevocationTests.Session_validator_requires_sid_and_user_to_match_the_same_row" computerName="CESNIMDA" duration="00:00:02.5636693" startTime="2026-11-03T19:36:53.5963423+01:00" endTime="2026-11-03T19:36:53.5963427+01:00" testType="13cdc9d9-ddb5-4fa4-a97d-d965ccfc6d4b" outcome="Passed" testListId="8c84fa94-04c1-424b-9868-57a2d4851a1d" relativeResultsDirectory="5f1168de-b7d8-4e8b-be1f-03dfe64f6085" />
|
||||
<UnitTestResult executionId="a62b5fd1-aa95-429a-8fee-84081339fb1b" testId="f94b62f1-217b-7b58-433f-78fa92c3b291" testName="JobTrackerApi.Tests.AdminProcessingControllerTests.Invalid_diagnostic_filters_fail_closed(query: "createdFrom=2026-11-01T00:00:00Z&createdBefore=202"···)" computerName="CESNIMDA" duration="00:00:00.3078795" startTime="2026-11-03T19:37:01.8758221+01:00" endTime="2026-11-03T19:37:01.8758226+01:00" testType="13cdc9d9-ddb5-4fa4-a97d-d965ccfc6d4b" outcome="Passed" testListId="8c84fa94-04c1-424b-9868-57a2d4851a1d" relativeResultsDirectory="a62b5fd1-aa95-429a-8fee-84081339fb1b" />
|
||||
<UnitTestResult executionId="af93fd66-4880-4840-b7d2-371f6e3d6797" testId="6e346171-7903-22b0-1ca1-205bad580edd" testName="JobTrackerApi.Tests.AdminProcessingControllerTests.Invalid_diagnostic_filters_fail_closed(query: "failureCode=SECRET")" computerName="CESNIMDA" duration="00:00:00.2430848" startTime="2026-11-03T19:37:02.1193357+01:00" endTime="2026-11-03T19:37:02.1193364+01:00" testType="13cdc9d9-ddb5-4fa4-a97d-d965ccfc6d4b" outcome="Passed" testListId="8c84fa94-04c1-424b-9868-57a2d4851a1d" relativeResultsDirectory="af93fd66-4880-4840-b7d2-371f6e3d6797" />
|
||||
<UnitTestResult executionId="c17a1d3a-1698-4320-95b3-38b12c1b2d14" testId="3703cdc9-1200-4a8e-e91b-e5b255b6349a" testName="JobTrackerApi.Tests.AdminProcessingControllerTests.Diagnostic_filters_preserve_actual_owner_relationships(query: "failureCode=processing_failed", expected: 1)" computerName="CESNIMDA" duration="00:00:00.2667201" startTime="2026-11-03T19:36:58.8019569+01:00" endTime="2026-11-03T19:36:58.8019572+01:00" testType="13cdc9d9-ddb5-4fa4-a97d-d965ccfc6d4b" outcome="Passed" testListId="8c84fa94-04c1-424b-9868-57a2d4851a1d" relativeResultsDirectory="c17a1d3a-1698-4320-95b3-38b12c1b2d14" />
|
||||
<UnitTestResult executionId="7863527a-1b7f-44eb-8b60-ce4c12257b34" testId="1d05c8f0-b4f5-5979-c2ee-b89fb865b0c0" testName="JobTrackerApi.Tests.UsersControllerTests.Delete_rejects_deleting_the_final_administrator" computerName="CESNIMDA" duration="00:00:00.0061113" startTime="2026-11-03T19:36:54.5595671+01:00" endTime="2026-11-03T19:36:54.5595676+01:00" testType="13cdc9d9-ddb5-4fa4-a97d-d965ccfc6d4b" outcome="Passed" testListId="8c84fa94-04c1-424b-9868-57a2d4851a1d" relativeResultsDirectory="7863527a-1b7f-44eb-8b60-ce4c12257b34" />
|
||||
<UnitTestResult executionId="f07d0729-575c-4bb1-a069-3918e64ff780" testId="5e6c8ff2-b0d7-8172-d7f7-7a4377ce492f" testName="JobTrackerApi.Tests.AdminProcessingControllerTests.Processing_routes_require_the_server_administrator_role(identity: "admin", expected: OK)" computerName="CESNIMDA" duration="00:00:00.3603257" startTime="2026-11-03T19:37:03.2897863+01:00" endTime="2026-11-03T19:37:03.2897866+01:00" testType="13cdc9d9-ddb5-4fa4-a97d-d965ccfc6d4b" outcome="Passed" testListId="8c84fa94-04c1-424b-9868-57a2d4851a1d" relativeResultsDirectory="f07d0729-575c-4bb1-a069-3918e64ff780" />
|
||||
<UnitTestResult executionId="9e82d083-3bf5-4773-8e1f-e595d4efbe92" testId="d484bbaa-c1ab-50e5-2d49-c179ebefddee" testName="JobTrackerApi.Tests.TwoFactorControllerTests.Challenge_with_valid_totp_code_completes_sign_in" computerName="CESNIMDA" duration="00:00:00.0102180" startTime="2026-11-03T19:36:53.8536816+01:00" endTime="2026-11-03T19:36:53.8536824+01:00" testType="13cdc9d9-ddb5-4fa4-a97d-d965ccfc6d4b" outcome="Passed" testListId="8c84fa94-04c1-424b-9868-57a2d4851a1d" relativeResultsDirectory="9e82d083-3bf5-4773-8e1f-e595d4efbe92" />
|
||||
<UnitTestResult executionId="3dff5ee7-9faa-4b5a-acf7-4777bc001f1a" testId="32aacf15-e389-7087-866a-a63f62c5ad1b" testName="JobTrackerApi.Tests.AuthSessionRevocationTests.Logout_best_effort_revokes_an_expired_cookie_without_an_authenticated_principal" computerName="CESNIMDA" duration="00:00:00.0870171" startTime="2026-11-03T19:36:53.9339579+01:00" endTime="2026-11-03T19:36:53.9339584+01:00" testType="13cdc9d9-ddb5-4fa4-a97d-d965ccfc6d4b" outcome="Passed" testListId="8c84fa94-04c1-424b-9868-57a2d4851a1d" relativeResultsDirectory="3dff5ee7-9faa-4b5a-acf7-4777bc001f1a" />
|
||||
<UnitTestResult executionId="c6f012e2-8568-450c-b644-5efb722ed7b5" testId="dea07b3b-d253-0f24-49a5-19cddbb41e3d" testName="JobTrackerApi.Tests.AdminProcessingControllerTests.Invalid_diagnostic_filters_fail_closed(query: "jobId=-1")" computerName="CESNIMDA" duration="00:00:00.2417380" startTime="2026-11-03T19:37:02.3614912+01:00" endTime="2026-11-03T19:37:02.3614914+01:00" testType="13cdc9d9-ddb5-4fa4-a97d-d965ccfc6d4b" outcome="Passed" testListId="8c84fa94-04c1-424b-9868-57a2d4851a1d" relativeResultsDirectory="c6f012e2-8568-450c-b644-5efb722ed7b5" />
|
||||
<UnitTestResult executionId="d5557621-d57e-4b3e-a628-b4afcfac8399" testId="779e2ed4-8fe8-b1c3-9d65-a1c3f97de65f" testName="JobTrackerApi.Tests.AccountDataExportTests.Readable_zip_is_complete_checksummed_owner_isolated_and_redacted" computerName="CESNIMDA" duration="00:00:00.8616868" startTime="2026-11-03T19:36:55.8777801+01:00" endTime="2026-11-03T19:36:55.8777805+01:00" testType="13cdc9d9-ddb5-4fa4-a97d-d965ccfc6d4b" outcome="Passed" testListId="8c84fa94-04c1-424b-9868-57a2d4851a1d" relativeResultsDirectory="d5557621-d57e-4b3e-a628-b4afcfac8399" />
|
||||
<UnitTestResult executionId="2fb373cf-32dc-490e-975b-c723417802a2" testId="e371116d-e426-f109-65b7-9aacdf55f26c" testName="JobTrackerApi.Tests.AdminProcessingControllerTests.Diagnostic_filters_are_applied_before_pagination(query: "q=SECRET_CV_CONTENT")" computerName="CESNIMDA" duration="00:00:00.5468021" startTime="2026-11-03T19:36:56.4944496+01:00" endTime="2026-11-03T19:36:56.4944500+01:00" testType="13cdc9d9-ddb5-4fa4-a97d-d965ccfc6d4b" outcome="Passed" testListId="8c84fa94-04c1-424b-9868-57a2d4851a1d" relativeResultsDirectory="2fb373cf-32dc-490e-975b-c723417802a2" />
|
||||
<UnitTestResult executionId="90c526e9-4ba8-4357-bc9e-92ac8a0cc141" testId="0a75f3cb-7d09-99b1-2e39-a35c68f98968" testName="JobTrackerApi.Tests.TwoFactorControllerTests.Setup_then_verify_with_correct_code_enables_2fa_and_returns_recovery_codes" computerName="CESNIMDA" duration="00:00:02.5867113" startTime="2026-11-03T19:36:53.6194452+01:00" endTime="2026-11-03T19:36:53.6194465+01:00" testType="13cdc9d9-ddb5-4fa4-a97d-d965ccfc6d4b" outcome="Passed" testListId="8c84fa94-04c1-424b-9868-57a2d4851a1d" relativeResultsDirectory="90c526e9-4ba8-4357-bc9e-92ac8a0cc141" />
|
||||
<UnitTestResult executionId="0673d87e-1df5-4b1d-9f14-5729b14a2a09" testId="e7dde882-9dbd-fe9b-1c50-f8b697c75f1a" testName="JobTrackerApi.Tests.ApiAuthorizationPostureTests.Every_action_on_the_mixed_auth_controllers_declares_its_own_intent" computerName="CESNIMDA" duration="00:00:00.0022356" startTime="2026-11-03T19:36:51.9461032+01:00" endTime="2026-11-03T19:36:51.9461036+01:00" testType="13cdc9d9-ddb5-4fa4-a97d-d965ccfc6d4b" outcome="Passed" testListId="8c84fa94-04c1-424b-9868-57a2d4851a1d" relativeResultsDirectory="0673d87e-1df5-4b1d-9f14-5729b14a2a09" />
|
||||
<UnitTestResult executionId="2442a86c-a74b-492a-b2dc-8295ca20006c" testId="a6518151-ac5c-524e-92da-8332dad6bdbb" testName="JobTrackerApi.Tests.AccountDataExportTests.Account_export_is_rate_limited" computerName="CESNIMDA" duration="00:00:00.0005130" startTime="2026-11-03T19:36:55.0154403+01:00" endTime="2026-11-03T19:36:55.0154406+01:00" testType="13cdc9d9-ddb5-4fa4-a97d-d965ccfc6d4b" outcome="Passed" testListId="8c84fa94-04c1-424b-9868-57a2d4851a1d" relativeResultsDirectory="2442a86c-a74b-492a-b2dc-8295ca20006c" />
|
||||
<UnitTestResult executionId="4971ef52-54d5-47e1-be81-16c72743faad" testId="b8f46cd4-f2a5-f097-e27f-3affe2027882" testName="JobTrackerApi.Tests.SessionsControllerTests.LocalSessionValidator_rejects_a_token_with_no_sid_claim" computerName="CESNIMDA" duration="00:00:00.0006778" startTime="2026-11-03T19:36:53.8388652+01:00" endTime="2026-11-03T19:36:53.8388663+01:00" testType="13cdc9d9-ddb5-4fa4-a97d-d965ccfc6d4b" outcome="Passed" testListId="8c84fa94-04c1-424b-9868-57a2d4851a1d" relativeResultsDirectory="4971ef52-54d5-47e1-be81-16c72743faad" />
|
||||
<UnitTestResult executionId="af7588be-4023-41ab-858a-18dfeee9430f" testId="c00a81b0-f7f1-eb06-24f9-4006c08ebd54" testName="JobTrackerApi.Tests.AuthSessionRevocationTests.Password_change_rotates_the_session_and_keeps_only_the_current_trusted_device" computerName="CESNIMDA" duration="00:00:00.0412435" startTime="2026-11-03T19:36:53.8467398+01:00" endTime="2026-11-03T19:36:53.8467401+01:00" testType="13cdc9d9-ddb5-4fa4-a97d-d965ccfc6d4b" outcome="Passed" testListId="8c84fa94-04c1-424b-9868-57a2d4851a1d" relativeResultsDirectory="af7588be-4023-41ab-858a-18dfeee9430f" />
|
||||
<UnitTestResult executionId="fa581f3b-7a8c-40bc-831e-d71d7340292b" testId="b069a367-2cbf-d37f-5287-950c362c5164" testName="JobTrackerApi.Tests.SessionsControllerTests.List_returns_only_the_callers_own_active_sessions" computerName="CESNIMDA" duration="00:00:00.0107177" startTime="2026-11-03T19:36:53.8380703+01:00" endTime="2026-11-03T19:36:53.8380709+01:00" testType="13cdc9d9-ddb5-4fa4-a97d-d965ccfc6d4b" outcome="Passed" testListId="8c84fa94-04c1-424b-9868-57a2d4851a1d" relativeResultsDirectory="fa581f3b-7a8c-40bc-831e-d71d7340292b" />
|
||||
<UnitTestResult executionId="675dc708-f92a-409c-a447-93b682f82f0d" testId="a567652f-e534-e420-c70b-91c31c5e4264" testName="JobTrackerApi.Tests.SessionsControllerTests.Revoke_enforces_ownership_and_blocks_a_subsequent_request_using_that_sessions_token" computerName="CESNIMDA" duration="00:00:00.0873934" startTime="2026-11-03T19:36:53.8040202+01:00" endTime="2026-11-03T19:36:53.8040205+01:00" testType="13cdc9d9-ddb5-4fa4-a97d-d965ccfc6d4b" outcome="Passed" testListId="8c84fa94-04c1-424b-9868-57a2d4851a1d" relativeResultsDirectory="675dc708-f92a-409c-a447-93b682f82f0d" />
|
||||
<UnitTestResult executionId="b9e60944-2f77-4022-858b-86de70f5f944" testId="70049eab-88eb-4514-024e-9b688c008eef" testName="JobTrackerApi.Tests.AdminProcessingControllerTests.Failure_metadata_uses_the_recorded_failure_instead_of_later_success(status: "succeeded")" computerName="CESNIMDA" duration="00:00:03.9670839" startTime="2026-11-03T19:36:55.0038816+01:00" endTime="2026-11-03T19:36:55.0038827+01:00" testType="13cdc9d9-ddb5-4fa4-a97d-d965ccfc6d4b" outcome="Passed" testListId="8c84fa94-04c1-424b-9868-57a2d4851a1d" relativeResultsDirectory="b9e60944-2f77-4022-858b-86de70f5f944" />
|
||||
<UnitTestResult executionId="49f5051e-4c27-4e71-9f78-a5eeba8ff22a" testId="816e3003-dfa8-7268-d543-c991372b114d" testName="JobTrackerApi.Tests.TwoFactorControllerTests.Challenge_with_unknown_pending_token_is_rejected" computerName="CESNIMDA" duration="00:00:00.0023758" startTime="2026-11-03T19:36:53.6220052+01:00" endTime="2026-11-03T19:36:53.6220058+01:00" testType="13cdc9d9-ddb5-4fa4-a97d-d965ccfc6d4b" outcome="Passed" testListId="8c84fa94-04c1-424b-9868-57a2d4851a1d" relativeResultsDirectory="49f5051e-4c27-4e71-9f78-a5eeba8ff22a" />
|
||||
<UnitTestResult executionId="8f2ff498-3935-4b9d-b20f-2ae8e2eed509" testId="49384e74-fc74-cc87-a819-9b1ba4a72e05" testName="JobTrackerApi.Tests.UsersControllerTests.SetRoles_allows_a_confirmed_self_demotion_when_another_admin_exists" computerName="CESNIMDA" duration="00:00:00.0136384" startTime="2026-11-03T19:36:52.0084065+01:00" endTime="2026-11-03T19:36:52.0084070+01:00" testType="13cdc9d9-ddb5-4fa4-a97d-d965ccfc6d4b" outcome="Passed" testListId="8c84fa94-04c1-424b-9868-57a2d4851a1d" relativeResultsDirectory="8f2ff498-3935-4b9d-b20f-2ae8e2eed509" />
|
||||
<UnitTestResult executionId="26714290-6b58-47ca-a025-8bd570c0cadf" testId="1942bf4b-fda0-7b4a-34e9-25989c8770bd" testName="JobTrackerApi.Tests.AdminProcessingControllerTests.Diagnostic_filters_preserve_actual_owner_relationships(query: "q=Owned%20job%20title", expected: 1)" computerName="CESNIMDA" duration="00:00:00.3297992" startTime="2026-11-03T19:36:59.1322854+01:00" endTime="2026-11-03T19:36:59.1322857+01:00" testType="13cdc9d9-ddb5-4fa4-a97d-d965ccfc6d4b" outcome="Passed" testListId="8c84fa94-04c1-424b-9868-57a2d4851a1d" relativeResultsDirectory="26714290-6b58-47ca-a025-8bd570c0cadf" />
|
||||
<UnitTestResult executionId="52d2407e-7d30-470b-b900-f29493b00887" testId="369cf2cd-6a6b-3b6b-6836-0b22e26fda39" testName="JobTrackerApi.Tests.AdminProcessingControllerTests.Admin_projection_filters_owners_and_never_returns_raw_processing_contents_or_lease_data" computerName="CESNIMDA" duration="00:00:00.5524532" startTime="2026-11-03T19:37:04.6735728+01:00" endTime="2026-11-03T19:37:04.6735735+01:00" testType="13cdc9d9-ddb5-4fa4-a97d-d965ccfc6d4b" outcome="Passed" testListId="8c84fa94-04c1-424b-9868-57a2d4851a1d" relativeResultsDirectory="52d2407e-7d30-470b-b900-f29493b00887" />
|
||||
<UnitTestResult executionId="d94dbadb-25a0-48cd-893c-9d84e01bb11b" testId="5c11c8bf-6b3e-8d84-fbeb-c90b49b4f37a" testName="JobTrackerApi.Tests.SessionsControllerTests.LocalSessionValidator_rejects_an_expired_session" computerName="CESNIMDA" duration="00:00:00.0013845" startTime="2026-11-03T19:36:53.8061644+01:00" endTime="2026-11-03T19:36:53.8061647+01:00" testType="13cdc9d9-ddb5-4fa4-a97d-d965ccfc6d4b" outcome="Passed" testListId="8c84fa94-04c1-424b-9868-57a2d4851a1d" relativeResultsDirectory="d94dbadb-25a0-48cd-893c-9d84e01bb11b" />
|
||||
<UnitTestResult executionId="0a874f65-6ae7-4ee7-8a4f-223e0d0599dc" testId="fd2553a8-50d5-ecf3-5513-f884a32acc75" testName="JobTrackerApi.Tests.ApiAuthorizationPostureTests.Every_controller_either_requires_authorization_or_is_listed_as_public" computerName="CESNIMDA" duration="00:00:00.0041425" startTime="2026-11-03T19:36:51.9401736+01:00" endTime="2026-11-03T19:36:51.9401741+01:00" testType="13cdc9d9-ddb5-4fa4-a97d-d965ccfc6d4b" outcome="Passed" testListId="8c84fa94-04c1-424b-9868-57a2d4851a1d" relativeResultsDirectory="0a874f65-6ae7-4ee7-8a4f-223e0d0599dc" />
|
||||
<UnitTestResult executionId="2f6a5c02-cb8e-4edb-8900-92090daf4485" testId="9e050f47-50a9-9f5b-1d85-26726f8b830d" testName="JobTrackerApi.Tests.SessionsControllerTests.Register_creates_a_user_session_row_when_it_completes_sign_in" computerName="CESNIMDA" duration="00:00:00.0424825" startTime="2026-11-03T19:36:53.7165126+01:00" endTime="2026-11-03T19:36:53.7165129+01:00" testType="13cdc9d9-ddb5-4fa4-a97d-d965ccfc6d4b" outcome="Passed" testListId="8c84fa94-04c1-424b-9868-57a2d4851a1d" relativeResultsDirectory="2f6a5c02-cb8e-4edb-8900-92090daf4485" />
|
||||
<UnitTestResult executionId="c6f5fa23-4595-4491-bcac-eb5cdd06af2c" testId="a7460ecd-2dcf-3c01-9f4f-b564984877a7" testName="JobTrackerApi.Tests.AdminProcessingControllerTests.User_authored_identity_labels_are_bounded_before_admin_projection" computerName="CESNIMDA" duration="00:00:00.3190019" startTime="2026-11-03T19:37:04.1205079+01:00" endTime="2026-11-03T19:37:04.1205095+01:00" testType="13cdc9d9-ddb5-4fa4-a97d-d965ccfc6d4b" outcome="Passed" testListId="8c84fa94-04c1-424b-9868-57a2d4851a1d" relativeResultsDirectory="c6f5fa23-4595-4491-bcac-eb5cdd06af2c" />
|
||||
<UnitTestResult executionId="c0a452ce-bc45-4e8f-ac09-573a694a8c3a" testId="39824df1-8c70-de08-b4d5-78902eb85b38" testName="JobTrackerApi.Tests.ApiAuthorizationPostureTests.The_user_owned_controllers_that_used_to_rely_on_the_fallback_policy_are_now_explicit" computerName="CESNIMDA" duration="00:00:00.0073201" startTime="2026-11-03T19:36:51.9356966+01:00" endTime="2026-11-03T19:36:51.9356976+01:00" testType="13cdc9d9-ddb5-4fa4-a97d-d965ccfc6d4b" outcome="Passed" testListId="8c84fa94-04c1-424b-9868-57a2d4851a1d" relativeResultsDirectory="c0a452ce-bc45-4e8f-ac09-573a694a8c3a" />
|
||||
<UnitTestResult executionId="660321ca-aa50-4ea3-b4e1-1f48f2a71452" testId="e8ec61a8-3045-28f2-d1c2-1d24f4b43888" testName="JobTrackerApi.Tests.AdminProcessingControllerTests.Diagnostic_filters_preserve_actual_owner_relationships(query: "q=owner%40example.test", expected: 2)" computerName="CESNIMDA" duration="00:00:00.3559378" startTime="2026-11-03T19:36:58.2462469+01:00" endTime="2026-11-03T19:36:58.2462471+01:00" testType="13cdc9d9-ddb5-4fa4-a97d-d965ccfc6d4b" outcome="Passed" testListId="8c84fa94-04c1-424b-9868-57a2d4851a1d" relativeResultsDirectory="660321ca-aa50-4ea3-b4e1-1f48f2a71452" />
|
||||
<UnitTestResult executionId="5e3c533a-44fc-4b3b-a915-c3499fdfdfb0" testId="c651e3b0-51fd-2e41-a5cf-eaf4190ef276" testName="JobTrackerApi.Tests.AuthSessionRevocationTests.Password_reset_revokes_all_target_sessions_and_trusted_devices_but_preserves_two_factor" computerName="CESNIMDA" duration="00:00:00.0236876" startTime="2026-11-03T19:36:53.9897337+01:00" endTime="2026-11-03T19:36:53.9897341+01:00" testType="13cdc9d9-ddb5-4fa4-a97d-d965ccfc6d4b" outcome="Passed" testListId="8c84fa94-04c1-424b-9868-57a2d4851a1d" relativeResultsDirectory="5e3c533a-44fc-4b3b-a915-c3499fdfdfb0" />
|
||||
<UnitTestResult executionId="edcb9161-3f94-4512-8921-643943599277" testId="84f7e997-d635-149a-68bc-b02e9fcddd2d" testName="JobTrackerApi.Tests.AdminProcessingControllerTests.Diagnostic_filters_preserve_actual_owner_relationships(query: "jobId=2", expected: 1)" computerName="CESNIMDA" duration="00:00:00.3001105" startTime="2026-11-03T19:37:00.3139965+01:00" endTime="2026-11-03T19:37:00.3139971+01:00" testType="13cdc9d9-ddb5-4fa4-a97d-d965ccfc6d4b" outcome="Passed" testListId="8c84fa94-04c1-424b-9868-57a2d4851a1d" relativeResultsDirectory="edcb9161-3f94-4512-8921-643943599277" />
|
||||
<UnitTestResult executionId="005e59c9-cf56-40a7-9ca0-f5fb1b26a734" testId="812d5d43-7e52-ce08-7556-5a43f9ffdac0" testName="JobTrackerApi.Tests.AdminProcessingControllerTests.Diagnostic_filters_are_applied_before_pagination(query: "createdFrom=2099-01-01T00:00:00Z")" computerName="CESNIMDA" duration="00:00:00.3643454" startTime="2026-11-03T19:36:57.8897677+01:00" endTime="2026-11-03T19:36:57.8897680+01:00" testType="13cdc9d9-ddb5-4fa4-a97d-d965ccfc6d4b" outcome="Passed" testListId="8c84fa94-04c1-424b-9868-57a2d4851a1d" relativeResultsDirectory="005e59c9-cf56-40a7-9ca0-f5fb1b26a734" />
|
||||
<UnitTestResult executionId="50997746-1047-4f14-aa42-76d569e13dec" testId="47c8243a-256a-9cd2-b778-0c1e655f34b2" testName="JobTrackerApi.Tests.AdminProcessingControllerTests.Diagnostic_filters_are_applied_before_pagination(query: "createdBefore=2000-01-01T00:00:00Z")" computerName="CESNIMDA" duration="00:00:00.3805701" startTime="2026-11-03T19:36:57.1976646+01:00" endTime="2026-11-03T19:36:57.1976650+01:00" testType="13cdc9d9-ddb5-4fa4-a97d-d965ccfc6d4b" outcome="Passed" testListId="8c84fa94-04c1-424b-9868-57a2d4851a1d" relativeResultsDirectory="50997746-1047-4f14-aa42-76d569e13dec" />
|
||||
<UnitTestResult executionId="770b0203-97ae-4f3f-b374-d925f77327c9" testId="c306a523-edb1-3483-b9d9-2894e7823843" testName="JobTrackerApi.Tests.UsersControllerTests.Delete_never_falls_back_to_identity_only_removal" computerName="CESNIMDA" duration="00:00:00.0153031" startTime="2026-11-03T19:36:51.9945786+01:00" endTime="2026-11-03T19:36:51.9945792+01:00" testType="13cdc9d9-ddb5-4fa4-a97d-d965ccfc6d4b" outcome="Passed" testListId="8c84fa94-04c1-424b-9868-57a2d4851a1d" relativeResultsDirectory="770b0203-97ae-4f3f-b374-d925f77327c9" />
|
||||
<UnitTestResult executionId="91b06ee6-1e58-406f-891b-6a22026754b1" testId="a3b89ebc-353f-38b3-04d4-bd41ea0c21b8" testName="JobTrackerApi.Tests.AdminProcessingControllerTests.Processing_routes_require_the_server_administrator_role(identity: "ordinary", expected: Forbidden)" computerName="CESNIMDA" duration="00:00:00.2847856" startTime="2026-11-03T19:37:02.9289500+01:00" endTime="2026-11-03T19:37:02.9289504+01:00" testType="13cdc9d9-ddb5-4fa4-a97d-d965ccfc6d4b" outcome="Passed" testListId="8c84fa94-04c1-424b-9868-57a2d4851a1d" relativeResultsDirectory="91b06ee6-1e58-406f-891b-6a22026754b1" />
|
||||
<UnitTestResult executionId="8439b121-1461-45e7-83e6-7e8530b23782" testId="d1bcf14d-0120-eaa5-c023-78fbafc535af" testName="JobTrackerApi.Tests.TwoFactorControllerTests.Disable_with_wrong_password_is_rejected" computerName="CESNIMDA" duration="00:00:00.0059859" startTime="2026-11-03T19:36:53.6283455+01:00" endTime="2026-11-03T19:36:53.6283458+01:00" testType="13cdc9d9-ddb5-4fa4-a97d-d965ccfc6d4b" outcome="Passed" testListId="8c84fa94-04c1-424b-9868-57a2d4851a1d" relativeResultsDirectory="8439b121-1461-45e7-83e6-7e8530b23782" />
|
||||
<UnitTestResult executionId="fd40bd80-90d1-42c5-b709-9c28cfba5ac9" testId="7735a82a-1299-2185-0d4a-22577eac5bda" testName="JobTrackerApi.Tests.ApiAuthorizationPostureTests.The_public_cv_controller_stays_anonymous" computerName="CESNIMDA" duration="00:00:00.8924357" startTime="2026-11-03T19:36:51.9284137+01:00" endTime="2026-11-03T19:36:51.9284367+01:00" testType="13cdc9d9-ddb5-4fa4-a97d-d965ccfc6d4b" outcome="Passed" testListId="8c84fa94-04c1-424b-9868-57a2d4851a1d" relativeResultsDirectory="fd40bd80-90d1-42c5-b709-9c28cfba5ac9" />
|
||||
<UnitTestResult executionId="8e767f6f-8088-4520-a2ed-1a8e829d6e3e" testId="97ec8920-5827-6f9c-2b63-37a4e888d28f" testName="JobTrackerApi.Tests.SessionsControllerTests.Login_creates_a_user_session_row_and_threads_its_id_into_the_token" computerName="CESNIMDA" duration="00:00:00.0097767" startTime="2026-11-03T19:36:53.8153515+01:00" endTime="2026-11-03T19:36:53.8153518+01:00" testType="13cdc9d9-ddb5-4fa4-a97d-d965ccfc6d4b" outcome="Passed" testListId="8c84fa94-04c1-424b-9868-57a2d4851a1d" relativeResultsDirectory="8e767f6f-8088-4520-a2ed-1a8e829d6e3e" />
|
||||
<UnitTestResult executionId="00293cd3-de4b-4cb0-9464-5a1b978346ef" testId="76cd4cee-0aef-5769-359a-4daef2151107" testName="JobTrackerApi.Tests.TwoFactorControllerTests.Challenge_with_recovery_code_consumes_it_and_rejects_reuse" computerName="CESNIMDA" duration="00:00:00.0350139" startTime="2026-11-03T19:36:53.7323012+01:00" endTime="2026-11-03T19:36:53.7323022+01:00" testType="13cdc9d9-ddb5-4fa4-a97d-d965ccfc6d4b" outcome="Passed" testListId="8c84fa94-04c1-424b-9868-57a2d4851a1d" relativeResultsDirectory="00293cd3-de4b-4cb0-9464-5a1b978346ef" />
|
||||
<UnitTestResult executionId="77606ebf-a9bd-405a-9c0a-c1835c77d191" testId="a88e9f0f-4d46-d781-b335-cf25a24afff7" testName="JobTrackerApi.Tests.TwoFactorControllerTests.Challenge_without_trust_device_does_not_create_trusted_device" computerName="CESNIMDA" duration="00:00:00.0550789" startTime="2026-11-03T19:36:53.6837105+01:00" endTime="2026-11-03T19:36:53.6837119+01:00" testType="13cdc9d9-ddb5-4fa4-a97d-d965ccfc6d4b" outcome="Passed" testListId="8c84fa94-04c1-424b-9868-57a2d4851a1d" relativeResultsDirectory="77606ebf-a9bd-405a-9c0a-c1835c77d191" />
|
||||
<UnitTestResult executionId="4f885c24-4b73-440d-b174-dceba01dab21" testId="aa87bb5b-2b89-868b-47a2-39dc87ec48cf" testName="JobTrackerApi.Tests.UsersControllerTests.SetRoles_rejects_removing_the_final_administrator" computerName="CESNIMDA" duration="00:00:00.0047884" startTime="2026-11-03T19:36:54.2643375+01:00" endTime="2026-11-03T19:36:54.2643381+01:00" testType="13cdc9d9-ddb5-4fa4-a97d-d965ccfc6d4b" outcome="Passed" testListId="8c84fa94-04c1-424b-9868-57a2d4851a1d" relativeResultsDirectory="4f885c24-4b73-440d-b174-dceba01dab21" />
|
||||
<UnitTestResult executionId="912d9a9c-160c-44e6-b591-b013030527f2" testId="ba5e704b-ca66-a258-1f80-cf0cc45d1215" testName="JobTrackerApi.Tests.AdminProcessingControllerTests.Event_cursor_is_exact_ordered_bounded_retained_and_redacted" computerName="CESNIMDA" duration="00:00:00.3774026" startTime="2026-11-03T19:37:01.0629170+01:00" endTime="2026-11-03T19:37:01.0629176+01:00" testType="13cdc9d9-ddb5-4fa4-a97d-d965ccfc6d4b" outcome="Passed" testListId="8c84fa94-04c1-424b-9868-57a2d4851a1d" relativeResultsDirectory="912d9a9c-160c-44e6-b591-b013030527f2" />
|
||||
<UnitTestResult executionId="e45bff14-e2a8-408d-8e5d-58e709a9d7b3" testId="822738c0-7263-105c-c7a3-7287bfc84f37" testName="JobTrackerApi.Tests.AuthSessionRevocationTests.Session_validator_rejects_an_account_pending_deletion" computerName="CESNIMDA" duration="00:00:00.0021896" startTime="2026-11-03T19:36:53.8034299+01:00" endTime="2026-11-03T19:36:53.8034301+01:00" testType="13cdc9d9-ddb5-4fa4-a97d-d965ccfc6d4b" outcome="Passed" testListId="8c84fa94-04c1-424b-9868-57a2d4851a1d" relativeResultsDirectory="e45bff14-e2a8-408d-8e5d-58e709a9d7b3" />
|
||||
<UnitTestResult executionId="92cae6af-55b9-4ea2-8c73-8d65338be663" testId="07351a69-1a47-c2e2-c18a-4769689406b0" testName="JobTrackerApi.Tests.AdminProcessingControllerTests.Missing_failure_history_does_not_turn_success_time_into_failure_evidence" computerName="CESNIMDA" duration="00:00:00.4274655" startTime="2026-11-03T19:36:55.9464906+01:00" endTime="2026-11-03T19:36:55.9464918+01:00" testType="13cdc9d9-ddb5-4fa4-a97d-d965ccfc6d4b" outcome="Passed" testListId="8c84fa94-04c1-424b-9868-57a2d4851a1d" relativeResultsDirectory="92cae6af-55b9-4ea2-8c73-8d65338be663" />
|
||||
<UnitTestResult executionId="a151b574-aacc-4c04-bd08-86c6a416f46e" testId="eff0c740-5766-74d7-2b54-9a9d370feaf4" testName="JobTrackerApi.Tests.AdminProcessingControllerTests.Diagnostic_filters_preserve_actual_owner_relationships(query: "createdBefore=2026-10-16T00:00:00Z", expected: 1)" computerName="CESNIMDA" duration="00:00:00.2944771" startTime="2026-11-03T19:36:59.4272807+01:00" endTime="2026-11-03T19:36:59.4272820+01:00" testType="13cdc9d9-ddb5-4fa4-a97d-d965ccfc6d4b" outcome="Passed" testListId="8c84fa94-04c1-424b-9868-57a2d4851a1d" relativeResultsDirectory="a151b574-aacc-4c04-bd08-86c6a416f46e" />
|
||||
<UnitTestResult executionId="7ff0a76c-0bb2-4546-b4b3-4d298ed7425c" testId="ac07d402-750e-5b2a-1f18-bdbcfd79741f" testName="JobTrackerApi.Tests.AuthSessionRevocationTests.Logout_revokes_the_exact_session_and_a_copied_principal_stops_working" computerName="CESNIMDA" duration="00:00:00.0317210" startTime="2026-11-03T19:36:53.9660509+01:00" endTime="2026-11-03T19:36:53.9660514+01:00" testType="13cdc9d9-ddb5-4fa4-a97d-d965ccfc6d4b" outcome="Passed" testListId="8c84fa94-04c1-424b-9868-57a2d4851a1d" relativeResultsDirectory="7ff0a76c-0bb2-4546-b4b3-4d298ed7425c" />
|
||||
<UnitTestResult executionId="f5a5166e-365c-4c45-8a7a-748a3791d713" testId="74c020c1-6f43-8b47-6887-592371457b96" testName="JobTrackerApi.Tests.AdminProcessingControllerTests.Detail_exposes_import_identity_and_links_only_the_administrators_own_application" computerName="CESNIMDA" duration="00:00:00.5098463" startTime="2026-11-03T19:37:03.8004166+01:00" endTime="2026-11-03T19:37:03.8004169+01:00" testType="13cdc9d9-ddb5-4fa4-a97d-d965ccfc6d4b" outcome="Passed" testListId="8c84fa94-04c1-424b-9868-57a2d4851a1d" relativeResultsDirectory="f5a5166e-365c-4c45-8a7a-748a3791d713" />
|
||||
<UnitTestResult executionId="65fcac94-f2bd-4020-a9ff-2ff065aea5a5" testId="96738a1a-a206-81ed-d93b-a35bcdcf8da7" testName="JobTrackerApi.Tests.TwoFactorControllerTests.Trusted_devices_can_be_listed_revoked_and_revoked_in_bulk_scoped_to_owner" computerName="CESNIMDA" duration="00:00:00.0793119" startTime="2026-11-03T19:36:53.8432936+01:00" endTime="2026-11-03T19:36:53.8432939+01:00" testType="13cdc9d9-ddb5-4fa4-a97d-d965ccfc6d4b" outcome="Passed" testListId="8c84fa94-04c1-424b-9868-57a2d4851a1d" relativeResultsDirectory="65fcac94-f2bd-4020-a9ff-2ff065aea5a5" />
|
||||
<UnitTestResult executionId="74c74439-6f49-4b64-b8f0-e249bd9b2fc4" testId="d077a711-68af-18dd-b1f4-2f8b79f50253" testName="JobTrackerApi.Tests.AuthSessionRevocationTests.Password_security_stamp_change_invalidates_a_pending_two_factor_challenge" computerName="CESNIMDA" duration="00:00:00.0018044" startTime="2026-11-03T19:36:53.8053580+01:00" endTime="2026-11-03T19:36:53.8053582+01:00" testType="13cdc9d9-ddb5-4fa4-a97d-d965ccfc6d4b" outcome="Passed" testListId="8c84fa94-04c1-424b-9868-57a2d4851a1d" relativeResultsDirectory="74c74439-6f49-4b64-b8f0-e249bd9b2fc4" />
|
||||
<UnitTestResult executionId="49d35fbe-08e4-4047-b6eb-9ebd7c31f52f" testId="ba0da408-71da-37ae-bf26-9a719966e64f" testName="JobTrackerApi.Tests.TwoFactorControllerTests.Challenge_with_trust_device_true_creates_trusted_device_and_sets_cookie" computerName="CESNIMDA" duration="00:00:00.0314020" startTime="2026-11-03T19:36:53.7638403+01:00" endTime="2026-11-03T19:36:53.7638407+01:00" testType="13cdc9d9-ddb5-4fa4-a97d-d965ccfc6d4b" outcome="Passed" testListId="8c84fa94-04c1-424b-9868-57a2d4851a1d" relativeResultsDirectory="49d35fbe-08e4-4047-b6eb-9ebd7c31f52f" />
|
||||
<UnitTestResult executionId="5947b5fd-69e6-4f36-b18f-0c27c24335e5" testId="51ac4bbe-d7e5-71bc-246b-d1e99716f584" testName="JobTrackerApi.Tests.AdminProcessingControllerTests.Invalid_diagnostic_filters_fail_closed(query: "createdFrom=0001-01-01T00:00:00Z")" computerName="CESNIMDA" duration="00:00:00.2541271" startTime="2026-11-03T19:37:01.5674724+01:00" endTime="2026-11-03T19:37:01.5674727+01:00" testType="13cdc9d9-ddb5-4fa4-a97d-d965ccfc6d4b" outcome="Passed" testListId="8c84fa94-04c1-424b-9868-57a2d4851a1d" relativeResultsDirectory="5947b5fd-69e6-4f36-b18f-0c27c24335e5" />
|
||||
<UnitTestResult executionId="4e5bb025-60d0-45e7-b270-13e020c05d42" testId="3a3b5a1e-a289-cbf2-1ddf-19df428ac764" testName="JobTrackerApi.Tests.AuthSessionRevocationTests.Session_validator_rejects_an_unconfirmed_account_when_verification_is_required" computerName="CESNIMDA" duration="00:00:00.2045213" startTime="2026-11-03T19:36:53.8010665+01:00" endTime="2026-11-03T19:36:53.8010668+01:00" testType="13cdc9d9-ddb5-4fa4-a97d-d965ccfc6d4b" outcome="Passed" testListId="8c84fa94-04c1-424b-9868-57a2d4851a1d" relativeResultsDirectory="4e5bb025-60d0-45e7-b270-13e020c05d42" />
|
||||
<UnitTestResult executionId="b6c462dd-03c6-4941-9830-3156c8f64ba4" testId="c6411e65-2573-9b0a-b091-546a25c749e9" testName="JobTrackerApi.Tests.AdminProcessingControllerTests.Processing_routes_require_the_server_administrator_role(identity: null, expected: Unauthorized)" computerName="CESNIMDA" duration="00:00:00.2814385" startTime="2026-11-03T19:37:02.6436791+01:00" endTime="2026-11-03T19:37:02.6436795+01:00" testType="13cdc9d9-ddb5-4fa4-a97d-d965ccfc6d4b" outcome="Passed" testListId="8c84fa94-04c1-424b-9868-57a2d4851a1d" relativeResultsDirectory="b6c462dd-03c6-4941-9830-3156c8f64ba4" />
|
||||
<UnitTestResult executionId="ff3f55bf-7aa0-496d-b9c4-77f8a3f474f6" testId="32c56667-1720-3596-61ec-a84c2c1a0741" testName="JobTrackerApi.Tests.TwoFactorControllerTests.Verify_setup_with_wrong_code_is_rejected_and_does_not_enable_2fa" computerName="CESNIMDA" duration="00:00:00.0132296" startTime="2026-11-03T19:36:53.6971428+01:00" endTime="2026-11-03T19:36:53.6971431+01:00" testType="13cdc9d9-ddb5-4fa4-a97d-d965ccfc6d4b" outcome="Passed" testListId="8c84fa94-04c1-424b-9868-57a2d4851a1d" relativeResultsDirectory="ff3f55bf-7aa0-496d-b9c4-77f8a3f474f6" />
|
||||
<UnitTestResult executionId="6209858e-1d10-4312-a891-f3f728670cdd" testId="cc37b055-0622-5c79-604c-d07a5ef838f8" testName="JobTrackerApi.Tests.AdminProcessingControllerTests.Diagnostic_filters_preserve_actual_owner_relationships(query: "failureCode=timeout", expected: 1)" computerName="CESNIMDA" duration="00:00:00.2881429" startTime="2026-11-03T19:36:58.5348132+01:00" endTime="2026-11-03T19:36:58.5348135+01:00" testType="13cdc9d9-ddb5-4fa4-a97d-d965ccfc6d4b" outcome="Passed" testListId="8c84fa94-04c1-424b-9868-57a2d4851a1d" relativeResultsDirectory="6209858e-1d10-4312-a891-f3f728670cdd" />
|
||||
<UnitTestResult executionId="53ae69df-7e0d-40c0-8b71-95be1571fe53" testId="c290d6c2-2e12-8508-613f-1faef3e1e045" testName="JobTrackerApi.Tests.UsersControllerTests.List_uses_a_fixed_number_of_role_queries_for_many_users" computerName="CESNIMDA" duration="00:00:02.2505677" startTime="2026-11-03T19:36:54.2592133+01:00" endTime="2026-11-03T19:36:54.2592153+01:00" testType="13cdc9d9-ddb5-4fa4-a97d-d965ccfc6d4b" outcome="Passed" testListId="8c84fa94-04c1-424b-9868-57a2d4851a1d" relativeResultsDirectory="53ae69df-7e0d-40c0-8b71-95be1571fe53" />
|
||||
<UnitTestResult executionId="dbed89d9-76a4-4b5f-889c-275839b4db9c" testId="925a248b-9a4e-193d-bb27-e3e23b1e39da" testName="JobTrackerApi.Tests.AdminProcessingControllerTests.Diagnostic_filters_preserve_actual_owner_relationships(query: "worker=document", expected: 1)" computerName="CESNIMDA" duration="00:00:00.2849883" startTime="2026-11-03T19:36:59.7127430+01:00" endTime="2026-11-03T19:36:59.7127434+01:00" testType="13cdc9d9-ddb5-4fa4-a97d-d965ccfc6d4b" outcome="Passed" testListId="8c84fa94-04c1-424b-9868-57a2d4851a1d" relativeResultsDirectory="dbed89d9-76a4-4b5f-889c-275839b4db9c" />
|
||||
<UnitTestResult executionId="b31e76b4-ffa4-4858-8526-4de5c576ff22" testId="44ff09f3-f13f-afad-c8bf-307264ed7dc8" testName="JobTrackerApi.Tests.AdminProcessingControllerTests.Diagnostic_filters_preserve_actual_owner_relationships(query: "worker=ai", expected: 2)" computerName="CESNIMDA" duration="00:00:00.2995010" startTime="2026-11-03T19:37:00.0130282+01:00" endTime="2026-11-03T19:37:00.0130287+01:00" testType="13cdc9d9-ddb5-4fa4-a97d-d965ccfc6d4b" outcome="Passed" testListId="8c84fa94-04c1-424b-9868-57a2d4851a1d" relativeResultsDirectory="b31e76b4-ffa4-4858-8526-4de5c576ff22" />
|
||||
<UnitTestResult executionId="6a4b82a9-4269-4ff6-b618-2a55c9ee6453" testId="ee5f8413-131e-d373-5831-cf9def629bf1" testName="JobTrackerApi.Tests.AdminProcessingControllerTests.Invalid_diagnostic_filters_fail_closed(query: "worker=SECRET")" computerName="CESNIMDA" duration="00:00:00.2492636" startTime="2026-11-03T19:37:01.3128713+01:00" endTime="2026-11-03T19:37:01.3128717+01:00" testType="13cdc9d9-ddb5-4fa4-a97d-d965ccfc6d4b" outcome="Passed" testListId="8c84fa94-04c1-424b-9868-57a2d4851a1d" relativeResultsDirectory="6a4b82a9-4269-4ff6-b618-2a55c9ee6453" />
|
||||
</Results>
|
||||
<TestDefinitions>
|
||||
<UnitTest name="JobTrackerApi.Tests.AdminProcessingControllerTests.Diagnostic_filters_preserve_actual_owner_relationships(query: "jobId=2", expected: 1)" storage="c:\users\connor\.codex\worktrees\direct-roadmap-integration\job tracker\jobtrackerapi.tests\bin\debug\net9.0\jobtrackerapi.tests.dll" id="84f7e997-d635-149a-68bc-b02e9fcddd2d">
|
||||
<Execution id="edcb9161-3f94-4512-8921-643943599277" />
|
||||
<TestMethod codeBase="C:\Users\Connor\.codex\worktrees\direct-roadmap-integration\Job tracker\JobTrackerApi.Tests\bin\Debug\net9.0\JobTrackerApi.Tests.dll" adapterTypeName="executor://xunit/VsTestRunner2/netcoreapp" className="JobTrackerApi.Tests.AdminProcessingControllerTests" name="Diagnostic_filters_preserve_actual_owner_relationships" />
|
||||
</UnitTest>
|
||||
<UnitTest name="JobTrackerApi.Tests.SessionsControllerTests.Login_creates_a_user_session_row_and_threads_its_id_into_the_token" storage="c:\users\connor\.codex\worktrees\direct-roadmap-integration\job tracker\jobtrackerapi.tests\bin\debug\net9.0\jobtrackerapi.tests.dll" id="97ec8920-5827-6f9c-2b63-37a4e888d28f">
|
||||
<Execution id="8e767f6f-8088-4520-a2ed-1a8e829d6e3e" />
|
||||
<TestMethod codeBase="C:\Users\Connor\.codex\worktrees\direct-roadmap-integration\Job tracker\JobTrackerApi.Tests\bin\Debug\net9.0\JobTrackerApi.Tests.dll" adapterTypeName="executor://xunit/VsTestRunner2/netcoreapp" className="JobTrackerApi.Tests.SessionsControllerTests" name="Login_creates_a_user_session_row_and_threads_its_id_into_the_token" />
|
||||
</UnitTest>
|
||||
<UnitTest name="JobTrackerApi.Tests.AccountDataExportTests.Account_export_requires_a_session_created_within_fifteen_minutes" storage="c:\users\connor\.codex\worktrees\direct-roadmap-integration\job tracker\jobtrackerapi.tests\bin\debug\net9.0\jobtrackerapi.tests.dll" id="d044b79a-5986-914c-d41a-518baadb7963">
|
||||
<Execution id="8057b950-194c-4cb1-b1d6-fa7fb2837f9c" />
|
||||
<TestMethod codeBase="C:\Users\Connor\.codex\worktrees\direct-roadmap-integration\Job tracker\JobTrackerApi.Tests\bin\Debug\net9.0\JobTrackerApi.Tests.dll" adapterTypeName="executor://xunit/VsTestRunner2/netcoreapp" className="JobTrackerApi.Tests.AccountDataExportTests" name="Account_export_requires_a_session_created_within_fifteen_minutes" />
|
||||
</UnitTest>
|
||||
<UnitTest name="JobTrackerApi.Tests.AdminProcessingControllerTests.Processing_routes_require_the_server_administrator_role(identity: "admin", expected: OK)" storage="c:\users\connor\.codex\worktrees\direct-roadmap-integration\job tracker\jobtrackerapi.tests\bin\debug\net9.0\jobtrackerapi.tests.dll" id="5e6c8ff2-b0d7-8172-d7f7-7a4377ce492f">
|
||||
<Execution id="f07d0729-575c-4bb1-a069-3918e64ff780" />
|
||||
<TestMethod codeBase="C:\Users\Connor\.codex\worktrees\direct-roadmap-integration\Job tracker\JobTrackerApi.Tests\bin\Debug\net9.0\JobTrackerApi.Tests.dll" adapterTypeName="executor://xunit/VsTestRunner2/netcoreapp" className="JobTrackerApi.Tests.AdminProcessingControllerTests" name="Processing_routes_require_the_server_administrator_role" />
|
||||
</UnitTest>
|
||||
<UnitTest name="JobTrackerApi.Tests.TwoFactorControllerTests.Disable_with_wrong_password_is_rejected" storage="c:\users\connor\.codex\worktrees\direct-roadmap-integration\job tracker\jobtrackerapi.tests\bin\debug\net9.0\jobtrackerapi.tests.dll" id="d1bcf14d-0120-eaa5-c023-78fbafc535af">
|
||||
<Execution id="8439b121-1461-45e7-83e6-7e8530b23782" />
|
||||
<TestMethod codeBase="C:\Users\Connor\.codex\worktrees\direct-roadmap-integration\Job tracker\JobTrackerApi.Tests\bin\Debug\net9.0\JobTrackerApi.Tests.dll" adapterTypeName="executor://xunit/VsTestRunner2/netcoreapp" className="JobTrackerApi.Tests.TwoFactorControllerTests" name="Disable_with_wrong_password_is_rejected" />
|
||||
</UnitTest>
|
||||
<UnitTest name="JobTrackerApi.Tests.AdminProcessingControllerTests.Invalid_diagnostic_filters_fail_closed(query: "failureCode=SECRET")" storage="c:\users\connor\.codex\worktrees\direct-roadmap-integration\job tracker\jobtrackerapi.tests\bin\debug\net9.0\jobtrackerapi.tests.dll" id="6e346171-7903-22b0-1ca1-205bad580edd">
|
||||
<Execution id="af93fd66-4880-4840-b7d2-371f6e3d6797" />
|
||||
<TestMethod codeBase="C:\Users\Connor\.codex\worktrees\direct-roadmap-integration\Job tracker\JobTrackerApi.Tests\bin\Debug\net9.0\JobTrackerApi.Tests.dll" adapterTypeName="executor://xunit/VsTestRunner2/netcoreapp" className="JobTrackerApi.Tests.AdminProcessingControllerTests" name="Invalid_diagnostic_filters_fail_closed" />
|
||||
</UnitTest>
|
||||
<UnitTest name="JobTrackerApi.Tests.AdminProcessingControllerTests.Diagnostic_filters_are_applied_before_pagination(query: "createdBefore=2000-01-01T00:00:00Z")" storage="c:\users\connor\.codex\worktrees\direct-roadmap-integration\job tracker\jobtrackerapi.tests\bin\debug\net9.0\jobtrackerapi.tests.dll" id="47c8243a-256a-9cd2-b778-0c1e655f34b2">
|
||||
<Execution id="50997746-1047-4f14-aa42-76d569e13dec" />
|
||||
<TestMethod codeBase="C:\Users\Connor\.codex\worktrees\direct-roadmap-integration\Job tracker\JobTrackerApi.Tests\bin\Debug\net9.0\JobTrackerApi.Tests.dll" adapterTypeName="executor://xunit/VsTestRunner2/netcoreapp" className="JobTrackerApi.Tests.AdminProcessingControllerTests" name="Diagnostic_filters_are_applied_before_pagination" />
|
||||
</UnitTest>
|
||||
<UnitTest name="JobTrackerApi.Tests.TwoFactorControllerTests.Challenge_with_trust_device_true_creates_trusted_device_and_sets_cookie" storage="c:\users\connor\.codex\worktrees\direct-roadmap-integration\job tracker\jobtrackerapi.tests\bin\debug\net9.0\jobtrackerapi.tests.dll" id="ba0da408-71da-37ae-bf26-9a719966e64f">
|
||||
<Execution id="49d35fbe-08e4-4047-b6eb-9ebd7c31f52f" />
|
||||
<TestMethod codeBase="C:\Users\Connor\.codex\worktrees\direct-roadmap-integration\Job tracker\JobTrackerApi.Tests\bin\Debug\net9.0\JobTrackerApi.Tests.dll" adapterTypeName="executor://xunit/VsTestRunner2/netcoreapp" className="JobTrackerApi.Tests.TwoFactorControllerTests" name="Challenge_with_trust_device_true_creates_trusted_device_and_sets_cookie" />
|
||||
</UnitTest>
|
||||
<UnitTest name="JobTrackerApi.Tests.ApiAuthorizationPostureTests.The_public_cv_controller_stays_anonymous" storage="c:\users\connor\.codex\worktrees\direct-roadmap-integration\job tracker\jobtrackerapi.tests\bin\debug\net9.0\jobtrackerapi.tests.dll" id="7735a82a-1299-2185-0d4a-22577eac5bda">
|
||||
<Execution id="fd40bd80-90d1-42c5-b709-9c28cfba5ac9" />
|
||||
<TestMethod codeBase="C:\Users\Connor\.codex\worktrees\direct-roadmap-integration\Job tracker\JobTrackerApi.Tests\bin\Debug\net9.0\JobTrackerApi.Tests.dll" adapterTypeName="executor://xunit/VsTestRunner2/netcoreapp" className="JobTrackerApi.Tests.ApiAuthorizationPostureTests" name="The_public_cv_controller_stays_anonymous" />
|
||||
</UnitTest>
|
||||
<UnitTest name="JobTrackerApi.Tests.AdminProcessingControllerTests.Detail_exposes_import_identity_and_links_only_the_administrators_own_application" storage="c:\users\connor\.codex\worktrees\direct-roadmap-integration\job tracker\jobtrackerapi.tests\bin\debug\net9.0\jobtrackerapi.tests.dll" id="74c020c1-6f43-8b47-6887-592371457b96">
|
||||
<Execution id="f5a5166e-365c-4c45-8a7a-748a3791d713" />
|
||||
<TestMethod codeBase="C:\Users\Connor\.codex\worktrees\direct-roadmap-integration\Job tracker\JobTrackerApi.Tests\bin\Debug\net9.0\JobTrackerApi.Tests.dll" adapterTypeName="executor://xunit/VsTestRunner2/netcoreapp" className="JobTrackerApi.Tests.AdminProcessingControllerTests" name="Detail_exposes_import_identity_and_links_only_the_administrators_own_application" />
|
||||
</UnitTest>
|
||||
<UnitTest name="JobTrackerApi.Tests.AdminProcessingControllerTests.Diagnostic_filters_preserve_actual_owner_relationships(query: "failureCode=timeout", expected: 1)" storage="c:\users\connor\.codex\worktrees\direct-roadmap-integration\job tracker\jobtrackerapi.tests\bin\debug\net9.0\jobtrackerapi.tests.dll" id="cc37b055-0622-5c79-604c-d07a5ef838f8">
|
||||
<Execution id="6209858e-1d10-4312-a891-f3f728670cdd" />
|
||||
<TestMethod codeBase="C:\Users\Connor\.codex\worktrees\direct-roadmap-integration\Job tracker\JobTrackerApi.Tests\bin\Debug\net9.0\JobTrackerApi.Tests.dll" adapterTypeName="executor://xunit/VsTestRunner2/netcoreapp" className="JobTrackerApi.Tests.AdminProcessingControllerTests" name="Diagnostic_filters_preserve_actual_owner_relationships" />
|
||||
</UnitTest>
|
||||
<UnitTest name="JobTrackerApi.Tests.AdminProcessingControllerTests.Event_cursor_is_exact_ordered_bounded_retained_and_redacted" storage="c:\users\connor\.codex\worktrees\direct-roadmap-integration\job tracker\jobtrackerapi.tests\bin\debug\net9.0\jobtrackerapi.tests.dll" id="ba5e704b-ca66-a258-1f80-cf0cc45d1215">
|
||||
<Execution id="912d9a9c-160c-44e6-b591-b013030527f2" />
|
||||
<TestMethod codeBase="C:\Users\Connor\.codex\worktrees\direct-roadmap-integration\Job tracker\JobTrackerApi.Tests\bin\Debug\net9.0\JobTrackerApi.Tests.dll" adapterTypeName="executor://xunit/VsTestRunner2/netcoreapp" className="JobTrackerApi.Tests.AdminProcessingControllerTests" name="Event_cursor_is_exact_ordered_bounded_retained_and_redacted" />
|
||||
</UnitTest>
|
||||
<UnitTest name="JobTrackerApi.Tests.AdminProcessingControllerTests.Invalid_diagnostic_filters_fail_closed(query: "worker=SECRET")" storage="c:\users\connor\.codex\worktrees\direct-roadmap-integration\job tracker\jobtrackerapi.tests\bin\debug\net9.0\jobtrackerapi.tests.dll" id="ee5f8413-131e-d373-5831-cf9def629bf1">
|
||||
<Execution id="6a4b82a9-4269-4ff6-b618-2a55c9ee6453" />
|
||||
<TestMethod codeBase="C:\Users\Connor\.codex\worktrees\direct-roadmap-integration\Job tracker\JobTrackerApi.Tests\bin\Debug\net9.0\JobTrackerApi.Tests.dll" adapterTypeName="executor://xunit/VsTestRunner2/netcoreapp" className="JobTrackerApi.Tests.AdminProcessingControllerTests" name="Invalid_diagnostic_filters_fail_closed" />
|
||||
</UnitTest>
|
||||
<UnitTest name="JobTrackerApi.Tests.AdminProcessingControllerTests.Invalid_diagnostic_filters_fail_closed(query: "createdFrom=2026-11-01T00:00:00Z&createdBefore=202"···)" storage="c:\users\connor\.codex\worktrees\direct-roadmap-integration\job tracker\jobtrackerapi.tests\bin\debug\net9.0\jobtrackerapi.tests.dll" id="f94b62f1-217b-7b58-433f-78fa92c3b291">
|
||||
<Execution id="a62b5fd1-aa95-429a-8fee-84081339fb1b" />
|
||||
<TestMethod codeBase="C:\Users\Connor\.codex\worktrees\direct-roadmap-integration\Job tracker\JobTrackerApi.Tests\bin\Debug\net9.0\JobTrackerApi.Tests.dll" adapterTypeName="executor://xunit/VsTestRunner2/netcoreapp" className="JobTrackerApi.Tests.AdminProcessingControllerTests" name="Invalid_diagnostic_filters_fail_closed" />
|
||||
</UnitTest>
|
||||
<UnitTest name="JobTrackerApi.Tests.UsersControllerTests.Delete_never_falls_back_to_identity_only_removal" storage="c:\users\connor\.codex\worktrees\direct-roadmap-integration\job tracker\jobtrackerapi.tests\bin\debug\net9.0\jobtrackerapi.tests.dll" id="c306a523-edb1-3483-b9d9-2894e7823843">
|
||||
<Execution id="770b0203-97ae-4f3f-b374-d925f77327c9" />
|
||||
<TestMethod codeBase="C:\Users\Connor\.codex\worktrees\direct-roadmap-integration\Job tracker\JobTrackerApi.Tests\bin\Debug\net9.0\JobTrackerApi.Tests.dll" adapterTypeName="executor://xunit/VsTestRunner2/netcoreapp" className="JobTrackerApi.Tests.UsersControllerTests" name="Delete_never_falls_back_to_identity_only_removal" />
|
||||
</UnitTest>
|
||||
<UnitTest name="JobTrackerApi.Tests.AuthSessionRevocationTests.Password_security_stamp_change_invalidates_a_pending_two_factor_challenge" storage="c:\users\connor\.codex\worktrees\direct-roadmap-integration\job tracker\jobtrackerapi.tests\bin\debug\net9.0\jobtrackerapi.tests.dll" id="d077a711-68af-18dd-b1f4-2f8b79f50253">
|
||||
<Execution id="74c74439-6f49-4b64-b8f0-e249bd9b2fc4" />
|
||||
<TestMethod codeBase="C:\Users\Connor\.codex\worktrees\direct-roadmap-integration\Job tracker\JobTrackerApi.Tests\bin\Debug\net9.0\JobTrackerApi.Tests.dll" adapterTypeName="executor://xunit/VsTestRunner2/netcoreapp" className="JobTrackerApi.Tests.AuthSessionRevocationTests" name="Password_security_stamp_change_invalidates_a_pending_two_factor_challenge" />
|
||||
</UnitTest>
|
||||
<UnitTest name="JobTrackerApi.Tests.AuthSessionRevocationTests.Logout_best_effort_revokes_an_expired_cookie_without_an_authenticated_principal" storage="c:\users\connor\.codex\worktrees\direct-roadmap-integration\job tracker\jobtrackerapi.tests\bin\debug\net9.0\jobtrackerapi.tests.dll" id="32aacf15-e389-7087-866a-a63f62c5ad1b">
|
||||
<Execution id="3dff5ee7-9faa-4b5a-acf7-4777bc001f1a" />
|
||||
<TestMethod codeBase="C:\Users\Connor\.codex\worktrees\direct-roadmap-integration\Job tracker\JobTrackerApi.Tests\bin\Debug\net9.0\JobTrackerApi.Tests.dll" adapterTypeName="executor://xunit/VsTestRunner2/netcoreapp" className="JobTrackerApi.Tests.AuthSessionRevocationTests" name="Logout_best_effort_revokes_an_expired_cookie_without_an_authenticated_principal" />
|
||||
</UnitTest>
|
||||
<UnitTest name="JobTrackerApi.Tests.AdminProcessingControllerTests.User_authored_identity_labels_are_bounded_before_admin_projection" storage="c:\users\connor\.codex\worktrees\direct-roadmap-integration\job tracker\jobtrackerapi.tests\bin\debug\net9.0\jobtrackerapi.tests.dll" id="a7460ecd-2dcf-3c01-9f4f-b564984877a7">
|
||||
<Execution id="c6f5fa23-4595-4491-bcac-eb5cdd06af2c" />
|
||||
<TestMethod codeBase="C:\Users\Connor\.codex\worktrees\direct-roadmap-integration\Job tracker\JobTrackerApi.Tests\bin\Debug\net9.0\JobTrackerApi.Tests.dll" adapterTypeName="executor://xunit/VsTestRunner2/netcoreapp" className="JobTrackerApi.Tests.AdminProcessingControllerTests" name="User_authored_identity_labels_are_bounded_before_admin_projection" />
|
||||
</UnitTest>
|
||||
<UnitTest name="JobTrackerApi.Tests.UsersControllerTests.SetRoles_allows_a_confirmed_self_demotion_when_another_admin_exists" storage="c:\users\connor\.codex\worktrees\direct-roadmap-integration\job tracker\jobtrackerapi.tests\bin\debug\net9.0\jobtrackerapi.tests.dll" id="49384e74-fc74-cc87-a819-9b1ba4a72e05">
|
||||
<Execution id="8f2ff498-3935-4b9d-b20f-2ae8e2eed509" />
|
||||
<TestMethod codeBase="C:\Users\Connor\.codex\worktrees\direct-roadmap-integration\Job tracker\JobTrackerApi.Tests\bin\Debug\net9.0\JobTrackerApi.Tests.dll" adapterTypeName="executor://xunit/VsTestRunner2/netcoreapp" className="JobTrackerApi.Tests.UsersControllerTests" name="SetRoles_allows_a_confirmed_self_demotion_when_another_admin_exists" />
|
||||
</UnitTest>
|
||||
<UnitTest name="JobTrackerApi.Tests.AuthSessionRevocationTests.Password_change_rotates_the_session_and_keeps_only_the_current_trusted_device" storage="c:\users\connor\.codex\worktrees\direct-roadmap-integration\job tracker\jobtrackerapi.tests\bin\debug\net9.0\jobtrackerapi.tests.dll" id="c00a81b0-f7f1-eb06-24f9-4006c08ebd54">
|
||||
<Execution id="af7588be-4023-41ab-858a-18dfeee9430f" />
|
||||
<TestMethod codeBase="C:\Users\Connor\.codex\worktrees\direct-roadmap-integration\Job tracker\JobTrackerApi.Tests\bin\Debug\net9.0\JobTrackerApi.Tests.dll" adapterTypeName="executor://xunit/VsTestRunner2/netcoreapp" className="JobTrackerApi.Tests.AuthSessionRevocationTests" name="Password_change_rotates_the_session_and_keeps_only_the_current_trusted_device" />
|
||||
</UnitTest>
|
||||
<UnitTest name="JobTrackerApi.Tests.AdminProcessingControllerTests.Diagnostic_filters_preserve_actual_owner_relationships(query: "createdBefore=2026-10-16T00:00:00Z", expected: 1)" storage="c:\users\connor\.codex\worktrees\direct-roadmap-integration\job tracker\jobtrackerapi.tests\bin\debug\net9.0\jobtrackerapi.tests.dll" id="eff0c740-5766-74d7-2b54-9a9d370feaf4">
|
||||
<Execution id="a151b574-aacc-4c04-bd08-86c6a416f46e" />
|
||||
<TestMethod codeBase="C:\Users\Connor\.codex\worktrees\direct-roadmap-integration\Job tracker\JobTrackerApi.Tests\bin\Debug\net9.0\JobTrackerApi.Tests.dll" adapterTypeName="executor://xunit/VsTestRunner2/netcoreapp" className="JobTrackerApi.Tests.AdminProcessingControllerTests" name="Diagnostic_filters_preserve_actual_owner_relationships" />
|
||||
</UnitTest>
|
||||
<UnitTest name="JobTrackerApi.Tests.SessionsControllerTests.List_returns_only_the_callers_own_active_sessions" storage="c:\users\connor\.codex\worktrees\direct-roadmap-integration\job tracker\jobtrackerapi.tests\bin\debug\net9.0\jobtrackerapi.tests.dll" id="b069a367-2cbf-d37f-5287-950c362c5164">
|
||||
<Execution id="fa581f3b-7a8c-40bc-831e-d71d7340292b" />
|
||||
<TestMethod codeBase="C:\Users\Connor\.codex\worktrees\direct-roadmap-integration\Job tracker\JobTrackerApi.Tests\bin\Debug\net9.0\JobTrackerApi.Tests.dll" adapterTypeName="executor://xunit/VsTestRunner2/netcoreapp" className="JobTrackerApi.Tests.SessionsControllerTests" name="List_returns_only_the_callers_own_active_sessions" />
|
||||
</UnitTest>
|
||||
<UnitTest name="JobTrackerApi.Tests.AdminProcessingControllerTests.Failure_metadata_uses_the_recorded_failure_instead_of_later_success(status: "waiting_for_retry")" storage="c:\users\connor\.codex\worktrees\direct-roadmap-integration\job tracker\jobtrackerapi.tests\bin\debug\net9.0\jobtrackerapi.tests.dll" id="1cb270c5-b90d-5d22-75bd-18446f0697ab">
|
||||
<Execution id="c785d69f-aeb3-4bd6-bf31-588bd0e347c0" />
|
||||
<TestMethod codeBase="C:\Users\Connor\.codex\worktrees\direct-roadmap-integration\Job tracker\JobTrackerApi.Tests\bin\Debug\net9.0\JobTrackerApi.Tests.dll" adapterTypeName="executor://xunit/VsTestRunner2/netcoreapp" className="JobTrackerApi.Tests.AdminProcessingControllerTests" name="Failure_metadata_uses_the_recorded_failure_instead_of_later_success" />
|
||||
</UnitTest>
|
||||
<UnitTest name="JobTrackerApi.Tests.UsersControllerTests.Delete_rejects_deleting_the_final_administrator" storage="c:\users\connor\.codex\worktrees\direct-roadmap-integration\job tracker\jobtrackerapi.tests\bin\debug\net9.0\jobtrackerapi.tests.dll" id="1d05c8f0-b4f5-5979-c2ee-b89fb865b0c0">
|
||||
<Execution id="7863527a-1b7f-44eb-8b60-ce4c12257b34" />
|
||||
<TestMethod codeBase="C:\Users\Connor\.codex\worktrees\direct-roadmap-integration\Job tracker\JobTrackerApi.Tests\bin\Debug\net9.0\JobTrackerApi.Tests.dll" adapterTypeName="executor://xunit/VsTestRunner2/netcoreapp" className="JobTrackerApi.Tests.UsersControllerTests" name="Delete_rejects_deleting_the_final_administrator" />
|
||||
</UnitTest>
|
||||
<UnitTest name="JobTrackerApi.Tests.UsersControllerTests.List_marks_the_current_user_and_last_admin_safety_state" storage="c:\users\connor\.codex\worktrees\direct-roadmap-integration\job tracker\jobtrackerapi.tests\bin\debug\net9.0\jobtrackerapi.tests.dll" id="60b6bfd7-91ef-c23f-ffe4-217e3ea1388b">
|
||||
<Execution id="09151881-21d2-4326-a43c-38d379aa90e7" />
|
||||
<TestMethod codeBase="C:\Users\Connor\.codex\worktrees\direct-roadmap-integration\Job tracker\JobTrackerApi.Tests\bin\Debug\net9.0\JobTrackerApi.Tests.dll" adapterTypeName="executor://xunit/VsTestRunner2/netcoreapp" className="JobTrackerApi.Tests.UsersControllerTests" name="List_marks_the_current_user_and_last_admin_safety_state" />
|
||||
</UnitTest>
|
||||
<UnitTest name="JobTrackerApi.Tests.UsersControllerTests.List_uses_a_fixed_number_of_role_queries_for_many_users" storage="c:\users\connor\.codex\worktrees\direct-roadmap-integration\job tracker\jobtrackerapi.tests\bin\debug\net9.0\jobtrackerapi.tests.dll" id="c290d6c2-2e12-8508-613f-1faef3e1e045">
|
||||
<Execution id="53ae69df-7e0d-40c0-8b71-95be1571fe53" />
|
||||
<TestMethod codeBase="C:\Users\Connor\.codex\worktrees\direct-roadmap-integration\Job tracker\JobTrackerApi.Tests\bin\Debug\net9.0\JobTrackerApi.Tests.dll" adapterTypeName="executor://xunit/VsTestRunner2/netcoreapp" className="JobTrackerApi.Tests.UsersControllerTests" name="List_uses_a_fixed_number_of_role_queries_for_many_users" />
|
||||
</UnitTest>
|
||||
<UnitTest name="JobTrackerApi.Tests.AuthSessionRevocationTests.Password_reset_revokes_all_target_sessions_and_trusted_devices_but_preserves_two_factor" storage="c:\users\connor\.codex\worktrees\direct-roadmap-integration\job tracker\jobtrackerapi.tests\bin\debug\net9.0\jobtrackerapi.tests.dll" id="c651e3b0-51fd-2e41-a5cf-eaf4190ef276">
|
||||
<Execution id="5e3c533a-44fc-4b3b-a915-c3499fdfdfb0" />
|
||||
<TestMethod codeBase="C:\Users\Connor\.codex\worktrees\direct-roadmap-integration\Job tracker\JobTrackerApi.Tests\bin\Debug\net9.0\JobTrackerApi.Tests.dll" adapterTypeName="executor://xunit/VsTestRunner2/netcoreapp" className="JobTrackerApi.Tests.AuthSessionRevocationTests" name="Password_reset_revokes_all_target_sessions_and_trusted_devices_but_preserves_two_factor" />
|
||||
</UnitTest>
|
||||
<UnitTest name="JobTrackerApi.Tests.TwoFactorControllerTests.Challenge_with_recovery_code_consumes_it_and_rejects_reuse" storage="c:\users\connor\.codex\worktrees\direct-roadmap-integration\job tracker\jobtrackerapi.tests\bin\debug\net9.0\jobtrackerapi.tests.dll" id="76cd4cee-0aef-5769-359a-4daef2151107">
|
||||
<Execution id="00293cd3-de4b-4cb0-9464-5a1b978346ef" />
|
||||
<TestMethod codeBase="C:\Users\Connor\.codex\worktrees\direct-roadmap-integration\Job tracker\JobTrackerApi.Tests\bin\Debug\net9.0\JobTrackerApi.Tests.dll" adapterTypeName="executor://xunit/VsTestRunner2/netcoreapp" className="JobTrackerApi.Tests.TwoFactorControllerTests" name="Challenge_with_recovery_code_consumes_it_and_rejects_reuse" />
|
||||
</UnitTest>
|
||||
<UnitTest name="JobTrackerApi.Tests.ApiAuthorizationPostureTests.Every_action_on_the_mixed_auth_controllers_declares_its_own_intent" storage="c:\users\connor\.codex\worktrees\direct-roadmap-integration\job tracker\jobtrackerapi.tests\bin\debug\net9.0\jobtrackerapi.tests.dll" id="e7dde882-9dbd-fe9b-1c50-f8b697c75f1a">
|
||||
<Execution id="0673d87e-1df5-4b1d-9f14-5729b14a2a09" />
|
||||
<TestMethod codeBase="C:\Users\Connor\.codex\worktrees\direct-roadmap-integration\Job tracker\JobTrackerApi.Tests\bin\Debug\net9.0\JobTrackerApi.Tests.dll" adapterTypeName="executor://xunit/VsTestRunner2/netcoreapp" className="JobTrackerApi.Tests.ApiAuthorizationPostureTests" name="Every_action_on_the_mixed_auth_controllers_declares_its_own_intent" />
|
||||
</UnitTest>
|
||||
<UnitTest name="JobTrackerApi.Tests.SessionsControllerTests.LocalSessionValidator_rejects_an_expired_session" storage="c:\users\connor\.codex\worktrees\direct-roadmap-integration\job tracker\jobtrackerapi.tests\bin\debug\net9.0\jobtrackerapi.tests.dll" id="5c11c8bf-6b3e-8d84-fbeb-c90b49b4f37a">
|
||||
<Execution id="d94dbadb-25a0-48cd-893c-9d84e01bb11b" />
|
||||
<TestMethod codeBase="C:\Users\Connor\.codex\worktrees\direct-roadmap-integration\Job tracker\JobTrackerApi.Tests\bin\Debug\net9.0\JobTrackerApi.Tests.dll" adapterTypeName="executor://xunit/VsTestRunner2/netcoreapp" className="JobTrackerApi.Tests.SessionsControllerTests" name="LocalSessionValidator_rejects_an_expired_session" />
|
||||
</UnitTest>
|
||||
<UnitTest name="JobTrackerApi.Tests.AuthSessionRevocationTests.Session_validator_rejects_an_unconfirmed_account_when_verification_is_required" storage="c:\users\connor\.codex\worktrees\direct-roadmap-integration\job tracker\jobtrackerapi.tests\bin\debug\net9.0\jobtrackerapi.tests.dll" id="3a3b5a1e-a289-cbf2-1ddf-19df428ac764">
|
||||
<Execution id="4e5bb025-60d0-45e7-b270-13e020c05d42" />
|
||||
<TestMethod codeBase="C:\Users\Connor\.codex\worktrees\direct-roadmap-integration\Job tracker\JobTrackerApi.Tests\bin\Debug\net9.0\JobTrackerApi.Tests.dll" adapterTypeName="executor://xunit/VsTestRunner2/netcoreapp" className="JobTrackerApi.Tests.AuthSessionRevocationTests" name="Session_validator_rejects_an_unconfirmed_account_when_verification_is_required" />
|
||||
</UnitTest>
|
||||
<UnitTest name="JobTrackerApi.Tests.AdminProcessingControllerTests.Failure_metadata_uses_the_recorded_failure_instead_of_later_success(status: "succeeded")" storage="c:\users\connor\.codex\worktrees\direct-roadmap-integration\job tracker\jobtrackerapi.tests\bin\debug\net9.0\jobtrackerapi.tests.dll" id="70049eab-88eb-4514-024e-9b688c008eef">
|
||||
<Execution id="b9e60944-2f77-4022-858b-86de70f5f944" />
|
||||
<TestMethod codeBase="C:\Users\Connor\.codex\worktrees\direct-roadmap-integration\Job tracker\JobTrackerApi.Tests\bin\Debug\net9.0\JobTrackerApi.Tests.dll" adapterTypeName="executor://xunit/VsTestRunner2/netcoreapp" className="JobTrackerApi.Tests.AdminProcessingControllerTests" name="Failure_metadata_uses_the_recorded_failure_instead_of_later_success" />
|
||||
</UnitTest>
|
||||
<UnitTest name="JobTrackerApi.Tests.SessionsControllerTests.LocalSessionValidator_rejects_a_token_with_no_sid_claim" storage="c:\users\connor\.codex\worktrees\direct-roadmap-integration\job tracker\jobtrackerapi.tests\bin\debug\net9.0\jobtrackerapi.tests.dll" id="b8f46cd4-f2a5-f097-e27f-3affe2027882">
|
||||
<Execution id="4971ef52-54d5-47e1-be81-16c72743faad" />
|
||||
<TestMethod codeBase="C:\Users\Connor\.codex\worktrees\direct-roadmap-integration\Job tracker\JobTrackerApi.Tests\bin\Debug\net9.0\JobTrackerApi.Tests.dll" adapterTypeName="executor://xunit/VsTestRunner2/netcoreapp" className="JobTrackerApi.Tests.SessionsControllerTests" name="LocalSessionValidator_rejects_a_token_with_no_sid_claim" />
|
||||
</UnitTest>
|
||||
<UnitTest name="JobTrackerApi.Tests.AdminProcessingControllerTests.Admin_projection_filters_owners_and_never_returns_raw_processing_contents_or_lease_data" storage="c:\users\connor\.codex\worktrees\direct-roadmap-integration\job tracker\jobtrackerapi.tests\bin\debug\net9.0\jobtrackerapi.tests.dll" id="369cf2cd-6a6b-3b6b-6836-0b22e26fda39">
|
||||
<Execution id="52d2407e-7d30-470b-b900-f29493b00887" />
|
||||
<TestMethod codeBase="C:\Users\Connor\.codex\worktrees\direct-roadmap-integration\Job tracker\JobTrackerApi.Tests\bin\Debug\net9.0\JobTrackerApi.Tests.dll" adapterTypeName="executor://xunit/VsTestRunner2/netcoreapp" className="JobTrackerApi.Tests.AdminProcessingControllerTests" name="Admin_projection_filters_owners_and_never_returns_raw_processing_contents_or_lease_data" />
|
||||
</UnitTest>
|
||||
<UnitTest name="JobTrackerApi.Tests.TwoFactorControllerTests.Trusted_devices_can_be_listed_revoked_and_revoked_in_bulk_scoped_to_owner" storage="c:\users\connor\.codex\worktrees\direct-roadmap-integration\job tracker\jobtrackerapi.tests\bin\debug\net9.0\jobtrackerapi.tests.dll" id="96738a1a-a206-81ed-d93b-a35bcdcf8da7">
|
||||
<Execution id="65fcac94-f2bd-4020-a9ff-2ff065aea5a5" />
|
||||
<TestMethod codeBase="C:\Users\Connor\.codex\worktrees\direct-roadmap-integration\Job tracker\JobTrackerApi.Tests\bin\Debug\net9.0\JobTrackerApi.Tests.dll" adapterTypeName="executor://xunit/VsTestRunner2/netcoreapp" className="JobTrackerApi.Tests.TwoFactorControllerTests" name="Trusted_devices_can_be_listed_revoked_and_revoked_in_bulk_scoped_to_owner" />
|
||||
</UnitTest>
|
||||
<UnitTest name="JobTrackerApi.Tests.AdminProcessingControllerTests.Diagnostic_filters_preserve_actual_owner_relationships(query: "q=owner%40example.test", expected: 2)" storage="c:\users\connor\.codex\worktrees\direct-roadmap-integration\job tracker\jobtrackerapi.tests\bin\debug\net9.0\jobtrackerapi.tests.dll" id="e8ec61a8-3045-28f2-d1c2-1d24f4b43888">
|
||||
<Execution id="660321ca-aa50-4ea3-b4e1-1f48f2a71452" />
|
||||
<TestMethod codeBase="C:\Users\Connor\.codex\worktrees\direct-roadmap-integration\Job tracker\JobTrackerApi.Tests\bin\Debug\net9.0\JobTrackerApi.Tests.dll" adapterTypeName="executor://xunit/VsTestRunner2/netcoreapp" className="JobTrackerApi.Tests.AdminProcessingControllerTests" name="Diagnostic_filters_preserve_actual_owner_relationships" />
|
||||
</UnitTest>
|
||||
<UnitTest name="JobTrackerApi.Tests.AdminProcessingControllerTests.Processing_routes_require_the_server_administrator_role(identity: null, expected: Unauthorized)" storage="c:\users\connor\.codex\worktrees\direct-roadmap-integration\job tracker\jobtrackerapi.tests\bin\debug\net9.0\jobtrackerapi.tests.dll" id="c6411e65-2573-9b0a-b091-546a25c749e9">
|
||||
<Execution id="b6c462dd-03c6-4941-9830-3156c8f64ba4" />
|
||||
<TestMethod codeBase="C:\Users\Connor\.codex\worktrees\direct-roadmap-integration\Job tracker\JobTrackerApi.Tests\bin\Debug\net9.0\JobTrackerApi.Tests.dll" adapterTypeName="executor://xunit/VsTestRunner2/netcoreapp" className="JobTrackerApi.Tests.AdminProcessingControllerTests" name="Processing_routes_require_the_server_administrator_role" />
|
||||
</UnitTest>
|
||||
<UnitTest name="JobTrackerApi.Tests.AccountDataExportTests.Account_export_is_rate_limited" storage="c:\users\connor\.codex\worktrees\direct-roadmap-integration\job tracker\jobtrackerapi.tests\bin\debug\net9.0\jobtrackerapi.tests.dll" id="a6518151-ac5c-524e-92da-8332dad6bdbb">
|
||||
<Execution id="2442a86c-a74b-492a-b2dc-8295ca20006c" />
|
||||
<TestMethod codeBase="C:\Users\Connor\.codex\worktrees\direct-roadmap-integration\Job tracker\JobTrackerApi.Tests\bin\Debug\net9.0\JobTrackerApi.Tests.dll" adapterTypeName="executor://xunit/VsTestRunner2/netcoreapp" className="JobTrackerApi.Tests.AccountDataExportTests" name="Account_export_is_rate_limited" />
|
||||
</UnitTest>
|
||||
<UnitTest name="JobTrackerApi.Tests.AccountDataExportTests.Readable_zip_is_complete_checksummed_owner_isolated_and_redacted" storage="c:\users\connor\.codex\worktrees\direct-roadmap-integration\job tracker\jobtrackerapi.tests\bin\debug\net9.0\jobtrackerapi.tests.dll" id="779e2ed4-8fe8-b1c3-9d65-a1c3f97de65f">
|
||||
<Execution id="d5557621-d57e-4b3e-a628-b4afcfac8399" />
|
||||
<TestMethod codeBase="C:\Users\Connor\.codex\worktrees\direct-roadmap-integration\Job tracker\JobTrackerApi.Tests\bin\Debug\net9.0\JobTrackerApi.Tests.dll" adapterTypeName="executor://xunit/VsTestRunner2/netcoreapp" className="JobTrackerApi.Tests.AccountDataExportTests" name="Readable_zip_is_complete_checksummed_owner_isolated_and_redacted" />
|
||||
</UnitTest>
|
||||
<UnitTest name="JobTrackerApi.Tests.TwoFactorControllerTests.Setup_then_verify_with_correct_code_enables_2fa_and_returns_recovery_codes" storage="c:\users\connor\.codex\worktrees\direct-roadmap-integration\job tracker\jobtrackerapi.tests\bin\debug\net9.0\jobtrackerapi.tests.dll" id="0a75f3cb-7d09-99b1-2e39-a35c68f98968">
|
||||
<Execution id="90c526e9-4ba8-4357-bc9e-92ac8a0cc141" />
|
||||
<TestMethod codeBase="C:\Users\Connor\.codex\worktrees\direct-roadmap-integration\Job tracker\JobTrackerApi.Tests\bin\Debug\net9.0\JobTrackerApi.Tests.dll" adapterTypeName="executor://xunit/VsTestRunner2/netcoreapp" className="JobTrackerApi.Tests.TwoFactorControllerTests" name="Setup_then_verify_with_correct_code_enables_2fa_and_returns_recovery_codes" />
|
||||
</UnitTest>
|
||||
<UnitTest name="JobTrackerApi.Tests.ApiAuthorizationPostureTests.Every_controller_either_requires_authorization_or_is_listed_as_public" storage="c:\users\connor\.codex\worktrees\direct-roadmap-integration\job tracker\jobtrackerapi.tests\bin\debug\net9.0\jobtrackerapi.tests.dll" id="fd2553a8-50d5-ecf3-5513-f884a32acc75">
|
||||
<Execution id="0a874f65-6ae7-4ee7-8a4f-223e0d0599dc" />
|
||||
<TestMethod codeBase="C:\Users\Connor\.codex\worktrees\direct-roadmap-integration\Job tracker\JobTrackerApi.Tests\bin\Debug\net9.0\JobTrackerApi.Tests.dll" adapterTypeName="executor://xunit/VsTestRunner2/netcoreapp" className="JobTrackerApi.Tests.ApiAuthorizationPostureTests" name="Every_controller_either_requires_authorization_or_is_listed_as_public" />
|
||||
</UnitTest>
|
||||
<UnitTest name="JobTrackerApi.Tests.ApiAuthorizationPostureTests.Admin_controllers_require_the_admin_role_not_merely_a_signed_in_user" storage="c:\users\connor\.codex\worktrees\direct-roadmap-integration\job tracker\jobtrackerapi.tests\bin\debug\net9.0\jobtrackerapi.tests.dll" id="f4f25456-ee0d-29ca-3483-47a23d62bba6">
|
||||
<Execution id="3d166b11-e5e4-48d8-aff2-05762ae9560d" />
|
||||
<TestMethod codeBase="C:\Users\Connor\.codex\worktrees\direct-roadmap-integration\Job tracker\JobTrackerApi.Tests\bin\Debug\net9.0\JobTrackerApi.Tests.dll" adapterTypeName="executor://xunit/VsTestRunner2/netcoreapp" className="JobTrackerApi.Tests.ApiAuthorizationPostureTests" name="Admin_controllers_require_the_admin_role_not_merely_a_signed_in_user" />
|
||||
</UnitTest>
|
||||
<UnitTest name="JobTrackerApi.Tests.AdminProcessingControllerTests.Diagnostic_filters_are_applied_before_pagination(query: "worker=untracked")" storage="c:\users\connor\.codex\worktrees\direct-roadmap-integration\job tracker\jobtrackerapi.tests\bin\debug\net9.0\jobtrackerapi.tests.dll" id="4d32ba02-105a-512c-8d73-cbe2ab1e1f04">
|
||||
<Execution id="53b236b9-1f0c-4bda-97ce-560f2dbfc641" />
|
||||
<TestMethod codeBase="C:\Users\Connor\.codex\worktrees\direct-roadmap-integration\Job tracker\JobTrackerApi.Tests\bin\Debug\net9.0\JobTrackerApi.Tests.dll" adapterTypeName="executor://xunit/VsTestRunner2/netcoreapp" className="JobTrackerApi.Tests.AdminProcessingControllerTests" name="Diagnostic_filters_are_applied_before_pagination" />
|
||||
</UnitTest>
|
||||
<UnitTest name="JobTrackerApi.Tests.AdminProcessingControllerTests.Diagnostic_filters_preserve_actual_owner_relationships(query: "worker=document", expected: 1)" storage="c:\users\connor\.codex\worktrees\direct-roadmap-integration\job tracker\jobtrackerapi.tests\bin\debug\net9.0\jobtrackerapi.tests.dll" id="925a248b-9a4e-193d-bb27-e3e23b1e39da">
|
||||
<Execution id="dbed89d9-76a4-4b5f-889c-275839b4db9c" />
|
||||
<TestMethod codeBase="C:\Users\Connor\.codex\worktrees\direct-roadmap-integration\Job tracker\JobTrackerApi.Tests\bin\Debug\net9.0\JobTrackerApi.Tests.dll" adapterTypeName="executor://xunit/VsTestRunner2/netcoreapp" className="JobTrackerApi.Tests.AdminProcessingControllerTests" name="Diagnostic_filters_preserve_actual_owner_relationships" />
|
||||
</UnitTest>
|
||||
<UnitTest name="JobTrackerApi.Tests.AdminProcessingControllerTests.Diagnostic_filters_are_applied_before_pagination(query: "createdFrom=2099-01-01T00:00:00Z")" storage="c:\users\connor\.codex\worktrees\direct-roadmap-integration\job tracker\jobtrackerapi.tests\bin\debug\net9.0\jobtrackerapi.tests.dll" id="812d5d43-7e52-ce08-7556-5a43f9ffdac0">
|
||||
<Execution id="005e59c9-cf56-40a7-9ca0-f5fb1b26a734" />
|
||||
<TestMethod codeBase="C:\Users\Connor\.codex\worktrees\direct-roadmap-integration\Job tracker\JobTrackerApi.Tests\bin\Debug\net9.0\JobTrackerApi.Tests.dll" adapterTypeName="executor://xunit/VsTestRunner2/netcoreapp" className="JobTrackerApi.Tests.AdminProcessingControllerTests" name="Diagnostic_filters_are_applied_before_pagination" />
|
||||
</UnitTest>
|
||||
<UnitTest name="JobTrackerApi.Tests.AdminProcessingControllerTests.Invalid_diagnostic_filters_fail_closed(query: "jobId=-1")" storage="c:\users\connor\.codex\worktrees\direct-roadmap-integration\job tracker\jobtrackerapi.tests\bin\debug\net9.0\jobtrackerapi.tests.dll" id="dea07b3b-d253-0f24-49a5-19cddbb41e3d">
|
||||
<Execution id="c6f012e2-8568-450c-b644-5efb722ed7b5" />
|
||||
<TestMethod codeBase="C:\Users\Connor\.codex\worktrees\direct-roadmap-integration\Job tracker\JobTrackerApi.Tests\bin\Debug\net9.0\JobTrackerApi.Tests.dll" adapterTypeName="executor://xunit/VsTestRunner2/netcoreapp" className="JobTrackerApi.Tests.AdminProcessingControllerTests" name="Invalid_diagnostic_filters_fail_closed" />
|
||||
</UnitTest>
|
||||
<UnitTest name="JobTrackerApi.Tests.AdminProcessingControllerTests.Diagnostic_filters_preserve_actual_owner_relationships(query: "q=Owned%20job%20title", expected: 1)" storage="c:\users\connor\.codex\worktrees\direct-roadmap-integration\job tracker\jobtrackerapi.tests\bin\debug\net9.0\jobtrackerapi.tests.dll" id="1942bf4b-fda0-7b4a-34e9-25989c8770bd">
|
||||
<Execution id="26714290-6b58-47ca-a025-8bd570c0cadf" />
|
||||
<TestMethod codeBase="C:\Users\Connor\.codex\worktrees\direct-roadmap-integration\Job tracker\JobTrackerApi.Tests\bin\Debug\net9.0\JobTrackerApi.Tests.dll" adapterTypeName="executor://xunit/VsTestRunner2/netcoreapp" className="JobTrackerApi.Tests.AdminProcessingControllerTests" name="Diagnostic_filters_preserve_actual_owner_relationships" />
|
||||
</UnitTest>
|
||||
<UnitTest name="JobTrackerApi.Tests.AdminProcessingControllerTests.Diagnostic_filters_preserve_actual_owner_relationships(query: "worker=ai", expected: 2)" storage="c:\users\connor\.codex\worktrees\direct-roadmap-integration\job tracker\jobtrackerapi.tests\bin\debug\net9.0\jobtrackerapi.tests.dll" id="44ff09f3-f13f-afad-c8bf-307264ed7dc8">
|
||||
<Execution id="b31e76b4-ffa4-4858-8526-4de5c576ff22" />
|
||||
<TestMethod codeBase="C:\Users\Connor\.codex\worktrees\direct-roadmap-integration\Job tracker\JobTrackerApi.Tests\bin\Debug\net9.0\JobTrackerApi.Tests.dll" adapterTypeName="executor://xunit/VsTestRunner2/netcoreapp" className="JobTrackerApi.Tests.AdminProcessingControllerTests" name="Diagnostic_filters_preserve_actual_owner_relationships" />
|
||||
</UnitTest>
|
||||
<UnitTest name="JobTrackerApi.Tests.SessionsControllerTests.Register_creates_a_user_session_row_when_it_completes_sign_in" storage="c:\users\connor\.codex\worktrees\direct-roadmap-integration\job tracker\jobtrackerapi.tests\bin\debug\net9.0\jobtrackerapi.tests.dll" id="9e050f47-50a9-9f5b-1d85-26726f8b830d">
|
||||
<Execution id="2f6a5c02-cb8e-4edb-8900-92090daf4485" />
|
||||
<TestMethod codeBase="C:\Users\Connor\.codex\worktrees\direct-roadmap-integration\Job tracker\JobTrackerApi.Tests\bin\Debug\net9.0\JobTrackerApi.Tests.dll" adapterTypeName="executor://xunit/VsTestRunner2/netcoreapp" className="JobTrackerApi.Tests.SessionsControllerTests" name="Register_creates_a_user_session_row_when_it_completes_sign_in" />
|
||||
</UnitTest>
|
||||
<UnitTest name="JobTrackerApi.Tests.TwoFactorControllerTests.Challenge_without_trust_device_does_not_create_trusted_device" storage="c:\users\connor\.codex\worktrees\direct-roadmap-integration\job tracker\jobtrackerapi.tests\bin\debug\net9.0\jobtrackerapi.tests.dll" id="a88e9f0f-4d46-d781-b335-cf25a24afff7">
|
||||
<Execution id="77606ebf-a9bd-405a-9c0a-c1835c77d191" />
|
||||
<TestMethod codeBase="C:\Users\Connor\.codex\worktrees\direct-roadmap-integration\Job tracker\JobTrackerApi.Tests\bin\Debug\net9.0\JobTrackerApi.Tests.dll" adapterTypeName="executor://xunit/VsTestRunner2/netcoreapp" className="JobTrackerApi.Tests.TwoFactorControllerTests" name="Challenge_without_trust_device_does_not_create_trusted_device" />
|
||||
</UnitTest>
|
||||
<UnitTest name="JobTrackerApi.Tests.AdminProcessingControllerTests.Missing_failure_history_does_not_turn_success_time_into_failure_evidence" storage="c:\users\connor\.codex\worktrees\direct-roadmap-integration\job tracker\jobtrackerapi.tests\bin\debug\net9.0\jobtrackerapi.tests.dll" id="07351a69-1a47-c2e2-c18a-4769689406b0">
|
||||
<Execution id="92cae6af-55b9-4ea2-8c73-8d65338be663" />
|
||||
<TestMethod codeBase="C:\Users\Connor\.codex\worktrees\direct-roadmap-integration\Job tracker\JobTrackerApi.Tests\bin\Debug\net9.0\JobTrackerApi.Tests.dll" adapterTypeName="executor://xunit/VsTestRunner2/netcoreapp" className="JobTrackerApi.Tests.AdminProcessingControllerTests" name="Missing_failure_history_does_not_turn_success_time_into_failure_evidence" />
|
||||
</UnitTest>
|
||||
<UnitTest name="JobTrackerApi.Tests.UsersControllerTests.SetRoles_revokes_existing_sessions_and_trusted_devices_when_roles_change" storage="c:\users\connor\.codex\worktrees\direct-roadmap-integration\job tracker\jobtrackerapi.tests\bin\debug\net9.0\jobtrackerapi.tests.dll" id="a55b51f5-22e2-c043-4279-8e10e60d7349">
|
||||
<Execution id="e41b3484-9519-4aae-8afd-ba9e539f9b27" />
|
||||
<TestMethod codeBase="C:\Users\Connor\.codex\worktrees\direct-roadmap-integration\Job tracker\JobTrackerApi.Tests\bin\Debug\net9.0\JobTrackerApi.Tests.dll" adapterTypeName="executor://xunit/VsTestRunner2/netcoreapp" className="JobTrackerApi.Tests.UsersControllerTests" name="SetRoles_revokes_existing_sessions_and_trusted_devices_when_roles_change" />
|
||||
</UnitTest>
|
||||
<UnitTest name="JobTrackerApi.Tests.AdminProcessingControllerTests.Diagnostic_filters_are_applied_before_pagination(query: "jobId=9999")" storage="c:\users\connor\.codex\worktrees\direct-roadmap-integration\job tracker\jobtrackerapi.tests\bin\debug\net9.0\jobtrackerapi.tests.dll" id="4bd6fee0-c227-757a-f276-68c01ee512d8">
|
||||
<Execution id="8b6dc4f2-d2f0-4c59-8f6c-fbf894a521fa" />
|
||||
<TestMethod codeBase="C:\Users\Connor\.codex\worktrees\direct-roadmap-integration\Job tracker\JobTrackerApi.Tests\bin\Debug\net9.0\JobTrackerApi.Tests.dll" adapterTypeName="executor://xunit/VsTestRunner2/netcoreapp" className="JobTrackerApi.Tests.AdminProcessingControllerTests" name="Diagnostic_filters_are_applied_before_pagination" />
|
||||
</UnitTest>
|
||||
<UnitTest name="JobTrackerApi.Tests.SessionsControllerTests.TwoFactor_challenge_creates_a_user_session_row_on_completion" storage="c:\users\connor\.codex\worktrees\direct-roadmap-integration\job tracker\jobtrackerapi.tests\bin\debug\net9.0\jobtrackerapi.tests.dll" id="2e1eabfd-4621-c98f-059d-33f191976c67">
|
||||
<Execution id="44b56b4e-2968-4e4f-8771-6fecc4a150c2" />
|
||||
<TestMethod codeBase="C:\Users\Connor\.codex\worktrees\direct-roadmap-integration\Job tracker\JobTrackerApi.Tests\bin\Debug\net9.0\JobTrackerApi.Tests.dll" adapterTypeName="executor://xunit/VsTestRunner2/netcoreapp" className="JobTrackerApi.Tests.SessionsControllerTests" name="TwoFactor_challenge_creates_a_user_session_row_on_completion" />
|
||||
</UnitTest>
|
||||
<UnitTest name="JobTrackerApi.Tests.AuthSessionRevocationTests.Session_validator_rejects_an_account_pending_deletion" storage="c:\users\connor\.codex\worktrees\direct-roadmap-integration\job tracker\jobtrackerapi.tests\bin\debug\net9.0\jobtrackerapi.tests.dll" id="822738c0-7263-105c-c7a3-7287bfc84f37">
|
||||
<Execution id="e45bff14-e2a8-408d-8e5d-58e709a9d7b3" />
|
||||
<TestMethod codeBase="C:\Users\Connor\.codex\worktrees\direct-roadmap-integration\Job tracker\JobTrackerApi.Tests\bin\Debug\net9.0\JobTrackerApi.Tests.dll" adapterTypeName="executor://xunit/VsTestRunner2/netcoreapp" className="JobTrackerApi.Tests.AuthSessionRevocationTests" name="Session_validator_rejects_an_account_pending_deletion" />
|
||||
</UnitTest>
|
||||
<UnitTest name="JobTrackerApi.Tests.AdminProcessingControllerTests.Diagnostic_filters_are_applied_before_pagination(query: "q=SECRET_CV_CONTENT")" storage="c:\users\connor\.codex\worktrees\direct-roadmap-integration\job tracker\jobtrackerapi.tests\bin\debug\net9.0\jobtrackerapi.tests.dll" id="e371116d-e426-f109-65b7-9aacdf55f26c">
|
||||
<Execution id="2fb373cf-32dc-490e-975b-c723417802a2" />
|
||||
<TestMethod codeBase="C:\Users\Connor\.codex\worktrees\direct-roadmap-integration\Job tracker\JobTrackerApi.Tests\bin\Debug\net9.0\JobTrackerApi.Tests.dll" adapterTypeName="executor://xunit/VsTestRunner2/netcoreapp" className="JobTrackerApi.Tests.AdminProcessingControllerTests" name="Diagnostic_filters_are_applied_before_pagination" />
|
||||
</UnitTest>
|
||||
<UnitTest name="JobTrackerApi.Tests.TwoFactorControllerTests.Challenge_with_unknown_pending_token_is_rejected" storage="c:\users\connor\.codex\worktrees\direct-roadmap-integration\job tracker\jobtrackerapi.tests\bin\debug\net9.0\jobtrackerapi.tests.dll" id="816e3003-dfa8-7268-d543-c991372b114d">
|
||||
<Execution id="49f5051e-4c27-4e71-9f78-a5eeba8ff22a" />
|
||||
<TestMethod codeBase="C:\Users\Connor\.codex\worktrees\direct-roadmap-integration\Job tracker\JobTrackerApi.Tests\bin\Debug\net9.0\JobTrackerApi.Tests.dll" adapterTypeName="executor://xunit/VsTestRunner2/netcoreapp" className="JobTrackerApi.Tests.TwoFactorControllerTests" name="Challenge_with_unknown_pending_token_is_rejected" />
|
||||
</UnitTest>
|
||||
<UnitTest name="JobTrackerApi.Tests.AdminProcessingControllerTests.Invalid_diagnostic_filters_fail_closed(query: "createdFrom=0001-01-01T00:00:00Z")" storage="c:\users\connor\.codex\worktrees\direct-roadmap-integration\job tracker\jobtrackerapi.tests\bin\debug\net9.0\jobtrackerapi.tests.dll" id="51ac4bbe-d7e5-71bc-246b-d1e99716f584">
|
||||
<Execution id="5947b5fd-69e6-4f36-b18f-0c27c24335e5" />
|
||||
<TestMethod codeBase="C:\Users\Connor\.codex\worktrees\direct-roadmap-integration\Job tracker\JobTrackerApi.Tests\bin\Debug\net9.0\JobTrackerApi.Tests.dll" adapterTypeName="executor://xunit/VsTestRunner2/netcoreapp" className="JobTrackerApi.Tests.AdminProcessingControllerTests" name="Invalid_diagnostic_filters_fail_closed" />
|
||||
</UnitTest>
|
||||
<UnitTest name="JobTrackerApi.Tests.AuthSessionRevocationTests.Logout_revokes_the_exact_session_and_a_copied_principal_stops_working" storage="c:\users\connor\.codex\worktrees\direct-roadmap-integration\job tracker\jobtrackerapi.tests\bin\debug\net9.0\jobtrackerapi.tests.dll" id="ac07d402-750e-5b2a-1f18-bdbcfd79741f">
|
||||
<Execution id="7ff0a76c-0bb2-4546-b4b3-4d298ed7425c" />
|
||||
<TestMethod codeBase="C:\Users\Connor\.codex\worktrees\direct-roadmap-integration\Job tracker\JobTrackerApi.Tests\bin\Debug\net9.0\JobTrackerApi.Tests.dll" adapterTypeName="executor://xunit/VsTestRunner2/netcoreapp" className="JobTrackerApi.Tests.AuthSessionRevocationTests" name="Logout_revokes_the_exact_session_and_a_copied_principal_stops_working" />
|
||||
</UnitTest>
|
||||
<UnitTest name="JobTrackerApi.Tests.TwoFactorControllerTests.Verify_setup_with_wrong_code_is_rejected_and_does_not_enable_2fa" storage="c:\users\connor\.codex\worktrees\direct-roadmap-integration\job tracker\jobtrackerapi.tests\bin\debug\net9.0\jobtrackerapi.tests.dll" id="32c56667-1720-3596-61ec-a84c2c1a0741">
|
||||
<Execution id="ff3f55bf-7aa0-496d-b9c4-77f8a3f474f6" />
|
||||
<TestMethod codeBase="C:\Users\Connor\.codex\worktrees\direct-roadmap-integration\Job tracker\JobTrackerApi.Tests\bin\Debug\net9.0\JobTrackerApi.Tests.dll" adapterTypeName="executor://xunit/VsTestRunner2/netcoreapp" className="JobTrackerApi.Tests.TwoFactorControllerTests" name="Verify_setup_with_wrong_code_is_rejected_and_does_not_enable_2fa" />
|
||||
</UnitTest>
|
||||
<UnitTest name="JobTrackerApi.Tests.ApiAuthorizationPostureTests.The_user_owned_controllers_that_used_to_rely_on_the_fallback_policy_are_now_explicit" storage="c:\users\connor\.codex\worktrees\direct-roadmap-integration\job tracker\jobtrackerapi.tests\bin\debug\net9.0\jobtrackerapi.tests.dll" id="39824df1-8c70-de08-b4d5-78902eb85b38">
|
||||
<Execution id="c0a452ce-bc45-4e8f-ac09-573a694a8c3a" />
|
||||
<TestMethod codeBase="C:\Users\Connor\.codex\worktrees\direct-roadmap-integration\Job tracker\JobTrackerApi.Tests\bin\Debug\net9.0\JobTrackerApi.Tests.dll" adapterTypeName="executor://xunit/VsTestRunner2/netcoreapp" className="JobTrackerApi.Tests.ApiAuthorizationPostureTests" name="The_user_owned_controllers_that_used_to_rely_on_the_fallback_policy_are_now_explicit" />
|
||||
</UnitTest>
|
||||
<UnitTest name="JobTrackerApi.Tests.AdminProcessingControllerTests.Diagnostic_filters_preserve_actual_owner_relationships(query: "failureCode=processing_failed", expected: 1)" storage="c:\users\connor\.codex\worktrees\direct-roadmap-integration\job tracker\jobtrackerapi.tests\bin\debug\net9.0\jobtrackerapi.tests.dll" id="3703cdc9-1200-4a8e-e91b-e5b255b6349a">
|
||||
<Execution id="c17a1d3a-1698-4320-95b3-38b12c1b2d14" />
|
||||
<TestMethod codeBase="C:\Users\Connor\.codex\worktrees\direct-roadmap-integration\Job tracker\JobTrackerApi.Tests\bin\Debug\net9.0\JobTrackerApi.Tests.dll" adapterTypeName="executor://xunit/VsTestRunner2/netcoreapp" className="JobTrackerApi.Tests.AdminProcessingControllerTests" name="Diagnostic_filters_preserve_actual_owner_relationships" />
|
||||
</UnitTest>
|
||||
<UnitTest name="JobTrackerApi.Tests.SessionsControllerTests.Revoke_enforces_ownership_and_blocks_a_subsequent_request_using_that_sessions_token" storage="c:\users\connor\.codex\worktrees\direct-roadmap-integration\job tracker\jobtrackerapi.tests\bin\debug\net9.0\jobtrackerapi.tests.dll" id="a567652f-e534-e420-c70b-91c31c5e4264">
|
||||
<Execution id="675dc708-f92a-409c-a447-93b682f82f0d" />
|
||||
<TestMethod codeBase="C:\Users\Connor\.codex\worktrees\direct-roadmap-integration\Job tracker\JobTrackerApi.Tests\bin\Debug\net9.0\JobTrackerApi.Tests.dll" adapterTypeName="executor://xunit/VsTestRunner2/netcoreapp" className="JobTrackerApi.Tests.SessionsControllerTests" name="Revoke_enforces_ownership_and_blocks_a_subsequent_request_using_that_sessions_token" />
|
||||
</UnitTest>
|
||||
<UnitTest name="JobTrackerApi.Tests.SessionsControllerTests.RevokeOthers_revokes_every_other_session_but_leaves_the_current_one_usable" storage="c:\users\connor\.codex\worktrees\direct-roadmap-integration\job tracker\jobtrackerapi.tests\bin\debug\net9.0\jobtrackerapi.tests.dll" id="811715cd-47a0-c1dd-1dc7-cfb874cd9cb3">
|
||||
<Execution id="8c5b5e3e-6b88-4129-a8c5-25ca8afabb98" />
|
||||
<TestMethod codeBase="C:\Users\Connor\.codex\worktrees\direct-roadmap-integration\Job tracker\JobTrackerApi.Tests\bin\Debug\net9.0\JobTrackerApi.Tests.dll" adapterTypeName="executor://xunit/VsTestRunner2/netcoreapp" className="JobTrackerApi.Tests.SessionsControllerTests" name="RevokeOthers_revokes_every_other_session_but_leaves_the_current_one_usable" />
|
||||
</UnitTest>
|
||||
<UnitTest name="JobTrackerApi.Tests.UsersControllerTests.SetRoles_rejects_removing_the_final_administrator" storage="c:\users\connor\.codex\worktrees\direct-roadmap-integration\job tracker\jobtrackerapi.tests\bin\debug\net9.0\jobtrackerapi.tests.dll" id="aa87bb5b-2b89-868b-47a2-39dc87ec48cf">
|
||||
<Execution id="4f885c24-4b73-440d-b174-dceba01dab21" />
|
||||
<TestMethod codeBase="C:\Users\Connor\.codex\worktrees\direct-roadmap-integration\Job tracker\JobTrackerApi.Tests\bin\Debug\net9.0\JobTrackerApi.Tests.dll" adapterTypeName="executor://xunit/VsTestRunner2/netcoreapp" className="JobTrackerApi.Tests.UsersControllerTests" name="SetRoles_rejects_removing_the_final_administrator" />
|
||||
</UnitTest>
|
||||
<UnitTest name="JobTrackerApi.Tests.AdminProcessingControllerTests.Processing_reads_share_a_bounded_account_rate_limit" storage="c:\users\connor\.codex\worktrees\direct-roadmap-integration\job tracker\jobtrackerapi.tests\bin\debug\net9.0\jobtrackerapi.tests.dll" id="b9e6b511-16dc-188e-b0b4-b3c6d1ea5901">
|
||||
<Execution id="c1890c2a-1eed-4be5-89d8-7f0c88327365" />
|
||||
<TestMethod codeBase="C:\Users\Connor\.codex\worktrees\direct-roadmap-integration\Job tracker\JobTrackerApi.Tests\bin\Debug\net9.0\JobTrackerApi.Tests.dll" adapterTypeName="executor://xunit/VsTestRunner2/netcoreapp" className="JobTrackerApi.Tests.AdminProcessingControllerTests" name="Processing_reads_share_a_bounded_account_rate_limit" />
|
||||
</UnitTest>
|
||||
<UnitTest name="JobTrackerApi.Tests.TwoFactorControllerTests.Challenge_with_valid_totp_code_completes_sign_in" storage="c:\users\connor\.codex\worktrees\direct-roadmap-integration\job tracker\jobtrackerapi.tests\bin\debug\net9.0\jobtrackerapi.tests.dll" id="d484bbaa-c1ab-50e5-2d49-c179ebefddee">
|
||||
<Execution id="9e82d083-3bf5-4773-8e1f-e595d4efbe92" />
|
||||
<TestMethod codeBase="C:\Users\Connor\.codex\worktrees\direct-roadmap-integration\Job tracker\JobTrackerApi.Tests\bin\Debug\net9.0\JobTrackerApi.Tests.dll" adapterTypeName="executor://xunit/VsTestRunner2/netcoreapp" className="JobTrackerApi.Tests.TwoFactorControllerTests" name="Challenge_with_valid_totp_code_completes_sign_in" />
|
||||
</UnitTest>
|
||||
<UnitTest name="JobTrackerApi.Tests.AuthSessionRevocationTests.Session_validator_requires_sid_and_user_to_match_the_same_row" storage="c:\users\connor\.codex\worktrees\direct-roadmap-integration\job tracker\jobtrackerapi.tests\bin\debug\net9.0\jobtrackerapi.tests.dll" id="e559103d-3dbf-ce6f-6174-0323c94be871">
|
||||
<Execution id="5f1168de-b7d8-4e8b-be1f-03dfe64f6085" />
|
||||
<TestMethod codeBase="C:\Users\Connor\.codex\worktrees\direct-roadmap-integration\Job tracker\JobTrackerApi.Tests\bin\Debug\net9.0\JobTrackerApi.Tests.dll" adapterTypeName="executor://xunit/VsTestRunner2/netcoreapp" className="JobTrackerApi.Tests.AuthSessionRevocationTests" name="Session_validator_requires_sid_and_user_to_match_the_same_row" />
|
||||
</UnitTest>
|
||||
<UnitTest name="JobTrackerApi.Tests.AdminProcessingControllerTests.Processing_routes_require_the_server_administrator_role(identity: "ordinary", expected: Forbidden)" storage="c:\users\connor\.codex\worktrees\direct-roadmap-integration\job tracker\jobtrackerapi.tests\bin\debug\net9.0\jobtrackerapi.tests.dll" id="a3b89ebc-353f-38b3-04d4-bd41ea0c21b8">
|
||||
<Execution id="91b06ee6-1e58-406f-891b-6a22026754b1" />
|
||||
<TestMethod codeBase="C:\Users\Connor\.codex\worktrees\direct-roadmap-integration\Job tracker\JobTrackerApi.Tests\bin\Debug\net9.0\JobTrackerApi.Tests.dll" adapterTypeName="executor://xunit/VsTestRunner2/netcoreapp" className="JobTrackerApi.Tests.AdminProcessingControllerTests" name="Processing_routes_require_the_server_administrator_role" />
|
||||
</UnitTest>
|
||||
</TestDefinitions>
|
||||
<TestEntries>
|
||||
<TestEntry testId="811715cd-47a0-c1dd-1dc7-cfb874cd9cb3" executionId="8c5b5e3e-6b88-4129-a8c5-25ca8afabb98" testListId="8c84fa94-04c1-424b-9868-57a2d4851a1d" />
|
||||
<TestEntry testId="b9e6b511-16dc-188e-b0b4-b3c6d1ea5901" executionId="c1890c2a-1eed-4be5-89d8-7f0c88327365" testListId="8c84fa94-04c1-424b-9868-57a2d4851a1d" />
|
||||
<TestEntry testId="4bd6fee0-c227-757a-f276-68c01ee512d8" executionId="8b6dc4f2-d2f0-4c59-8f6c-fbf894a521fa" testListId="8c84fa94-04c1-424b-9868-57a2d4851a1d" />
|
||||
<TestEntry testId="4d32ba02-105a-512c-8d73-cbe2ab1e1f04" executionId="53b236b9-1f0c-4bda-97ce-560f2dbfc641" testListId="8c84fa94-04c1-424b-9868-57a2d4851a1d" />
|
||||
<TestEntry testId="60b6bfd7-91ef-c23f-ffe4-217e3ea1388b" executionId="09151881-21d2-4326-a43c-38d379aa90e7" testListId="8c84fa94-04c1-424b-9868-57a2d4851a1d" />
|
||||
<TestEntry testId="f4f25456-ee0d-29ca-3483-47a23d62bba6" executionId="3d166b11-e5e4-48d8-aff2-05762ae9560d" testListId="8c84fa94-04c1-424b-9868-57a2d4851a1d" />
|
||||
<TestEntry testId="a55b51f5-22e2-c043-4279-8e10e60d7349" executionId="e41b3484-9519-4aae-8afd-ba9e539f9b27" testListId="8c84fa94-04c1-424b-9868-57a2d4851a1d" />
|
||||
<TestEntry testId="d044b79a-5986-914c-d41a-518baadb7963" executionId="8057b950-194c-4cb1-b1d6-fa7fb2837f9c" testListId="8c84fa94-04c1-424b-9868-57a2d4851a1d" />
|
||||
<TestEntry testId="2e1eabfd-4621-c98f-059d-33f191976c67" executionId="44b56b4e-2968-4e4f-8771-6fecc4a150c2" testListId="8c84fa94-04c1-424b-9868-57a2d4851a1d" />
|
||||
<TestEntry testId="1cb270c5-b90d-5d22-75bd-18446f0697ab" executionId="c785d69f-aeb3-4bd6-bf31-588bd0e347c0" testListId="8c84fa94-04c1-424b-9868-57a2d4851a1d" />
|
||||
<TestEntry testId="e559103d-3dbf-ce6f-6174-0323c94be871" executionId="5f1168de-b7d8-4e8b-be1f-03dfe64f6085" testListId="8c84fa94-04c1-424b-9868-57a2d4851a1d" />
|
||||
<TestEntry testId="f94b62f1-217b-7b58-433f-78fa92c3b291" executionId="a62b5fd1-aa95-429a-8fee-84081339fb1b" testListId="8c84fa94-04c1-424b-9868-57a2d4851a1d" />
|
||||
<TestEntry testId="6e346171-7903-22b0-1ca1-205bad580edd" executionId="af93fd66-4880-4840-b7d2-371f6e3d6797" testListId="8c84fa94-04c1-424b-9868-57a2d4851a1d" />
|
||||
<TestEntry testId="3703cdc9-1200-4a8e-e91b-e5b255b6349a" executionId="c17a1d3a-1698-4320-95b3-38b12c1b2d14" testListId="8c84fa94-04c1-424b-9868-57a2d4851a1d" />
|
||||
<TestEntry testId="1d05c8f0-b4f5-5979-c2ee-b89fb865b0c0" executionId="7863527a-1b7f-44eb-8b60-ce4c12257b34" testListId="8c84fa94-04c1-424b-9868-57a2d4851a1d" />
|
||||
<TestEntry testId="5e6c8ff2-b0d7-8172-d7f7-7a4377ce492f" executionId="f07d0729-575c-4bb1-a069-3918e64ff780" testListId="8c84fa94-04c1-424b-9868-57a2d4851a1d" />
|
||||
<TestEntry testId="d484bbaa-c1ab-50e5-2d49-c179ebefddee" executionId="9e82d083-3bf5-4773-8e1f-e595d4efbe92" testListId="8c84fa94-04c1-424b-9868-57a2d4851a1d" />
|
||||
<TestEntry testId="32aacf15-e389-7087-866a-a63f62c5ad1b" executionId="3dff5ee7-9faa-4b5a-acf7-4777bc001f1a" testListId="8c84fa94-04c1-424b-9868-57a2d4851a1d" />
|
||||
<TestEntry testId="dea07b3b-d253-0f24-49a5-19cddbb41e3d" executionId="c6f012e2-8568-450c-b644-5efb722ed7b5" testListId="8c84fa94-04c1-424b-9868-57a2d4851a1d" />
|
||||
<TestEntry testId="779e2ed4-8fe8-b1c3-9d65-a1c3f97de65f" executionId="d5557621-d57e-4b3e-a628-b4afcfac8399" testListId="8c84fa94-04c1-424b-9868-57a2d4851a1d" />
|
||||
<TestEntry testId="e371116d-e426-f109-65b7-9aacdf55f26c" executionId="2fb373cf-32dc-490e-975b-c723417802a2" testListId="8c84fa94-04c1-424b-9868-57a2d4851a1d" />
|
||||
<TestEntry testId="0a75f3cb-7d09-99b1-2e39-a35c68f98968" executionId="90c526e9-4ba8-4357-bc9e-92ac8a0cc141" testListId="8c84fa94-04c1-424b-9868-57a2d4851a1d" />
|
||||
<TestEntry testId="e7dde882-9dbd-fe9b-1c50-f8b697c75f1a" executionId="0673d87e-1df5-4b1d-9f14-5729b14a2a09" testListId="8c84fa94-04c1-424b-9868-57a2d4851a1d" />
|
||||
<TestEntry testId="a6518151-ac5c-524e-92da-8332dad6bdbb" executionId="2442a86c-a74b-492a-b2dc-8295ca20006c" testListId="8c84fa94-04c1-424b-9868-57a2d4851a1d" />
|
||||
<TestEntry testId="b8f46cd4-f2a5-f097-e27f-3affe2027882" executionId="4971ef52-54d5-47e1-be81-16c72743faad" testListId="8c84fa94-04c1-424b-9868-57a2d4851a1d" />
|
||||
<TestEntry testId="c00a81b0-f7f1-eb06-24f9-4006c08ebd54" executionId="af7588be-4023-41ab-858a-18dfeee9430f" testListId="8c84fa94-04c1-424b-9868-57a2d4851a1d" />
|
||||
<TestEntry testId="b069a367-2cbf-d37f-5287-950c362c5164" executionId="fa581f3b-7a8c-40bc-831e-d71d7340292b" testListId="8c84fa94-04c1-424b-9868-57a2d4851a1d" />
|
||||
<TestEntry testId="a567652f-e534-e420-c70b-91c31c5e4264" executionId="675dc708-f92a-409c-a447-93b682f82f0d" testListId="8c84fa94-04c1-424b-9868-57a2d4851a1d" />
|
||||
<TestEntry testId="70049eab-88eb-4514-024e-9b688c008eef" executionId="b9e60944-2f77-4022-858b-86de70f5f944" testListId="8c84fa94-04c1-424b-9868-57a2d4851a1d" />
|
||||
<TestEntry testId="816e3003-dfa8-7268-d543-c991372b114d" executionId="49f5051e-4c27-4e71-9f78-a5eeba8ff22a" testListId="8c84fa94-04c1-424b-9868-57a2d4851a1d" />
|
||||
<TestEntry testId="49384e74-fc74-cc87-a819-9b1ba4a72e05" executionId="8f2ff498-3935-4b9d-b20f-2ae8e2eed509" testListId="8c84fa94-04c1-424b-9868-57a2d4851a1d" />
|
||||
<TestEntry testId="1942bf4b-fda0-7b4a-34e9-25989c8770bd" executionId="26714290-6b58-47ca-a025-8bd570c0cadf" testListId="8c84fa94-04c1-424b-9868-57a2d4851a1d" />
|
||||
<TestEntry testId="369cf2cd-6a6b-3b6b-6836-0b22e26fda39" executionId="52d2407e-7d30-470b-b900-f29493b00887" testListId="8c84fa94-04c1-424b-9868-57a2d4851a1d" />
|
||||
<TestEntry testId="5c11c8bf-6b3e-8d84-fbeb-c90b49b4f37a" executionId="d94dbadb-25a0-48cd-893c-9d84e01bb11b" testListId="8c84fa94-04c1-424b-9868-57a2d4851a1d" />
|
||||
<TestEntry testId="fd2553a8-50d5-ecf3-5513-f884a32acc75" executionId="0a874f65-6ae7-4ee7-8a4f-223e0d0599dc" testListId="8c84fa94-04c1-424b-9868-57a2d4851a1d" />
|
||||
<TestEntry testId="9e050f47-50a9-9f5b-1d85-26726f8b830d" executionId="2f6a5c02-cb8e-4edb-8900-92090daf4485" testListId="8c84fa94-04c1-424b-9868-57a2d4851a1d" />
|
||||
<TestEntry testId="a7460ecd-2dcf-3c01-9f4f-b564984877a7" executionId="c6f5fa23-4595-4491-bcac-eb5cdd06af2c" testListId="8c84fa94-04c1-424b-9868-57a2d4851a1d" />
|
||||
<TestEntry testId="39824df1-8c70-de08-b4d5-78902eb85b38" executionId="c0a452ce-bc45-4e8f-ac09-573a694a8c3a" testListId="8c84fa94-04c1-424b-9868-57a2d4851a1d" />
|
||||
<TestEntry testId="e8ec61a8-3045-28f2-d1c2-1d24f4b43888" executionId="660321ca-aa50-4ea3-b4e1-1f48f2a71452" testListId="8c84fa94-04c1-424b-9868-57a2d4851a1d" />
|
||||
<TestEntry testId="c651e3b0-51fd-2e41-a5cf-eaf4190ef276" executionId="5e3c533a-44fc-4b3b-a915-c3499fdfdfb0" testListId="8c84fa94-04c1-424b-9868-57a2d4851a1d" />
|
||||
<TestEntry testId="84f7e997-d635-149a-68bc-b02e9fcddd2d" executionId="edcb9161-3f94-4512-8921-643943599277" testListId="8c84fa94-04c1-424b-9868-57a2d4851a1d" />
|
||||
<TestEntry testId="812d5d43-7e52-ce08-7556-5a43f9ffdac0" executionId="005e59c9-cf56-40a7-9ca0-f5fb1b26a734" testListId="8c84fa94-04c1-424b-9868-57a2d4851a1d" />
|
||||
<TestEntry testId="47c8243a-256a-9cd2-b778-0c1e655f34b2" executionId="50997746-1047-4f14-aa42-76d569e13dec" testListId="8c84fa94-04c1-424b-9868-57a2d4851a1d" />
|
||||
<TestEntry testId="c306a523-edb1-3483-b9d9-2894e7823843" executionId="770b0203-97ae-4f3f-b374-d925f77327c9" testListId="8c84fa94-04c1-424b-9868-57a2d4851a1d" />
|
||||
<TestEntry testId="a3b89ebc-353f-38b3-04d4-bd41ea0c21b8" executionId="91b06ee6-1e58-406f-891b-6a22026754b1" testListId="8c84fa94-04c1-424b-9868-57a2d4851a1d" />
|
||||
<TestEntry testId="d1bcf14d-0120-eaa5-c023-78fbafc535af" executionId="8439b121-1461-45e7-83e6-7e8530b23782" testListId="8c84fa94-04c1-424b-9868-57a2d4851a1d" />
|
||||
<TestEntry testId="7735a82a-1299-2185-0d4a-22577eac5bda" executionId="fd40bd80-90d1-42c5-b709-9c28cfba5ac9" testListId="8c84fa94-04c1-424b-9868-57a2d4851a1d" />
|
||||
<TestEntry testId="97ec8920-5827-6f9c-2b63-37a4e888d28f" executionId="8e767f6f-8088-4520-a2ed-1a8e829d6e3e" testListId="8c84fa94-04c1-424b-9868-57a2d4851a1d" />
|
||||
<TestEntry testId="76cd4cee-0aef-5769-359a-4daef2151107" executionId="00293cd3-de4b-4cb0-9464-5a1b978346ef" testListId="8c84fa94-04c1-424b-9868-57a2d4851a1d" />
|
||||
<TestEntry testId="a88e9f0f-4d46-d781-b335-cf25a24afff7" executionId="77606ebf-a9bd-405a-9c0a-c1835c77d191" testListId="8c84fa94-04c1-424b-9868-57a2d4851a1d" />
|
||||
<TestEntry testId="aa87bb5b-2b89-868b-47a2-39dc87ec48cf" executionId="4f885c24-4b73-440d-b174-dceba01dab21" testListId="8c84fa94-04c1-424b-9868-57a2d4851a1d" />
|
||||
<TestEntry testId="ba5e704b-ca66-a258-1f80-cf0cc45d1215" executionId="912d9a9c-160c-44e6-b591-b013030527f2" testListId="8c84fa94-04c1-424b-9868-57a2d4851a1d" />
|
||||
<TestEntry testId="822738c0-7263-105c-c7a3-7287bfc84f37" executionId="e45bff14-e2a8-408d-8e5d-58e709a9d7b3" testListId="8c84fa94-04c1-424b-9868-57a2d4851a1d" />
|
||||
<TestEntry testId="07351a69-1a47-c2e2-c18a-4769689406b0" executionId="92cae6af-55b9-4ea2-8c73-8d65338be663" testListId="8c84fa94-04c1-424b-9868-57a2d4851a1d" />
|
||||
<TestEntry testId="eff0c740-5766-74d7-2b54-9a9d370feaf4" executionId="a151b574-aacc-4c04-bd08-86c6a416f46e" testListId="8c84fa94-04c1-424b-9868-57a2d4851a1d" />
|
||||
<TestEntry testId="ac07d402-750e-5b2a-1f18-bdbcfd79741f" executionId="7ff0a76c-0bb2-4546-b4b3-4d298ed7425c" testListId="8c84fa94-04c1-424b-9868-57a2d4851a1d" />
|
||||
<TestEntry testId="74c020c1-6f43-8b47-6887-592371457b96" executionId="f5a5166e-365c-4c45-8a7a-748a3791d713" testListId="8c84fa94-04c1-424b-9868-57a2d4851a1d" />
|
||||
<TestEntry testId="96738a1a-a206-81ed-d93b-a35bcdcf8da7" executionId="65fcac94-f2bd-4020-a9ff-2ff065aea5a5" testListId="8c84fa94-04c1-424b-9868-57a2d4851a1d" />
|
||||
<TestEntry testId="d077a711-68af-18dd-b1f4-2f8b79f50253" executionId="74c74439-6f49-4b64-b8f0-e249bd9b2fc4" testListId="8c84fa94-04c1-424b-9868-57a2d4851a1d" />
|
||||
<TestEntry testId="ba0da408-71da-37ae-bf26-9a719966e64f" executionId="49d35fbe-08e4-4047-b6eb-9ebd7c31f52f" testListId="8c84fa94-04c1-424b-9868-57a2d4851a1d" />
|
||||
<TestEntry testId="51ac4bbe-d7e5-71bc-246b-d1e99716f584" executionId="5947b5fd-69e6-4f36-b18f-0c27c24335e5" testListId="8c84fa94-04c1-424b-9868-57a2d4851a1d" />
|
||||
<TestEntry testId="3a3b5a1e-a289-cbf2-1ddf-19df428ac764" executionId="4e5bb025-60d0-45e7-b270-13e020c05d42" testListId="8c84fa94-04c1-424b-9868-57a2d4851a1d" />
|
||||
<TestEntry testId="c6411e65-2573-9b0a-b091-546a25c749e9" executionId="b6c462dd-03c6-4941-9830-3156c8f64ba4" testListId="8c84fa94-04c1-424b-9868-57a2d4851a1d" />
|
||||
<TestEntry testId="32c56667-1720-3596-61ec-a84c2c1a0741" executionId="ff3f55bf-7aa0-496d-b9c4-77f8a3f474f6" testListId="8c84fa94-04c1-424b-9868-57a2d4851a1d" />
|
||||
<TestEntry testId="cc37b055-0622-5c79-604c-d07a5ef838f8" executionId="6209858e-1d10-4312-a891-f3f728670cdd" testListId="8c84fa94-04c1-424b-9868-57a2d4851a1d" />
|
||||
<TestEntry testId="c290d6c2-2e12-8508-613f-1faef3e1e045" executionId="53ae69df-7e0d-40c0-8b71-95be1571fe53" testListId="8c84fa94-04c1-424b-9868-57a2d4851a1d" />
|
||||
<TestEntry testId="925a248b-9a4e-193d-bb27-e3e23b1e39da" executionId="dbed89d9-76a4-4b5f-889c-275839b4db9c" testListId="8c84fa94-04c1-424b-9868-57a2d4851a1d" />
|
||||
<TestEntry testId="44ff09f3-f13f-afad-c8bf-307264ed7dc8" executionId="b31e76b4-ffa4-4858-8526-4de5c576ff22" testListId="8c84fa94-04c1-424b-9868-57a2d4851a1d" />
|
||||
<TestEntry testId="ee5f8413-131e-d373-5831-cf9def629bf1" executionId="6a4b82a9-4269-4ff6-b618-2a55c9ee6453" testListId="8c84fa94-04c1-424b-9868-57a2d4851a1d" />
|
||||
</TestEntries>
|
||||
<TestLists>
|
||||
<TestList name="Results Not in a List" id="8c84fa94-04c1-424b-9868-57a2d4851a1d" />
|
||||
<TestList name="All Loaded Results" id="19431567-8539-422a-85d7-44ee4e166bda" />
|
||||
</TestLists>
|
||||
<ResultSummary outcome="Completed">
|
||||
<Counters total="69" executed="69" passed="69" failed="0" error="0" timeout="0" aborted="0" inconclusive="0" passedButRunAborted="0" notRunnable="0" notExecuted="0" disconnected="0" warning="0" completed="0" inProgress="0" pending="0" />
|
||||
<Output>
|
||||
<StdOut>[xUnit.net 00:00:00.00] xUnit.net VSTest Adapter v2.8.2+699d445a1a (64-bit .NET 9.0.19)
|
||||
[xUnit.net 00:00:00.98] Discovering: JobTrackerApi.Tests
|
||||
[xUnit.net 00:00:01.29] Discovered: JobTrackerApi.Tests
|
||||
[xUnit.net 00:00:01.30] Starting: JobTrackerApi.Tests
|
||||
[xUnit.net 00:00:15.00] Finished: JobTrackerApi.Tests
|
||||
</StdOut>
|
||||
</Output>
|
||||
</ResultSummary>
|
||||
</TestRun>
|
||||
File diff suppressed because it is too large
Load Diff
BIN
Binary file not shown.
|
After Width: | Height: | Size: 160 KiB |
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user