- Fixed resilient_http_call decorator to NOT retry on 4xx client errors (only 5xx)
- Changed retry condition from retry_if_exception_type to retry_if_exception with custom logic
- Updated datetime.utcnow() to datetime.now(UTC) to fix deprecation warnings
- Fixed test imports to add lib/ to sys.path
All 12 unit tests now pass with no warnings.
Addresses technical debt where data objects (User, Worker, Device) were using
fragile dict access patterns instead of validated pydantic models.
- Add nexus-mcp/lib/schemas.py: Canonical domain models (CanonicalUser, CanonicalDevice,
FieldDrift) with automatic field normalization and validation
- Add nexus-mcp/lib/adapters.py: System-specific adapters (ADUserAdapter, EntraUserAdapter,
WorkdayWorkerAdapter) to transform native API responses into canonical format
- Update identity.py: ad_get_user, ad_search_users, entra_list_users now return
normalized CanonicalUser objects with consistent field names
- Update workday.py: workday_list_workers, workday_get_worker return canonical format
for seamless cross-system comparison
- Update audit.py: Refactor audit_user_drift to use type-safe _compare_users() helper
with FieldDrift schema instead of manual dict comparisons
Benefits:
• Type safety: IDE autocomplete, runtime validation, eliminates fragile _pick() calls
• Consistent field names: user.job_title works across AD/Entra/Workday (was 3 different paths)
• Automatic validation: Email normalization, status enum enforcement
• Drift detection: Validated Bob Martinez title mismatch (AD "Sr. Software Engineer"
vs Workday "Software Engineer")
Ref: Session goal "implement atomic, piece-at-a-time shard deployment capability"
requiring robust data contracts between systems.
- Move Identity/, Workday/, Intune/ to archive/ (superseded by nexus-mcp shards)
- Move 'Local Setup.md' to archive/ (superseded by nexus-mcp/Local-Setup.md)
- Add archive/README.md explaining migration and preserved content
- Clean repository structure: only nexus-mcp, documentation, and .github remain active
All legacy functionality migrated to nexus-mcp sharded architecture.
Archived folders preserved for reference and historical context.
Refs: SESSION_SNAPSHOT_2026-04-13.md
- Add SESSION_SNAPSHOT_2026-04-03 with goals, accomplishments, and pending work
- Document next-session startup steps for Workday-to-AD sync delivery continuity
Expand README with repository intent, active Workday-to-AD sync workflow goals, and key document links.
Capture current session context as a dated progress snapshot (completed, in-progress, and next milestones); no SESSION_SNAPSHOT file was found in documentation/project-history.
- Add execution planning artifacts in workday-ad-identity-sync-next-steps.md and workday-ad-identity-sync-sprint-board.md.
- Capture the why from current staged context by turning identified Workday sync blockers and delivery sequencing into a prioritized backlog and sprint-ready board; no SESSION_SNAPSHOT file was found in documentation/project-history for additional session intent.
- Add [FrankGPT consolidated instructions](.github/agents/FrankGPT.consolidated-instructions.md) and supporting standards in [.github/instructions/core.instructions.md](.github/instructions/core.instructions.md) to define agent modes, commands, and workflows.
- Expand prompt and knowledge assets, including [.github/prompts/create-commit.msg.prompt.md](.github/prompts/create-commit.msg.prompt.md), to standardize ITIL-aligned reasoning and improve session-aware commit/message generation.