90 Commits

Author SHA1 Message Date
Nathan Castaldi
d9b8ca2c9d docs(ops): add session snapshot 2026-04-15 part 3
- Captures end-to-end reporting pipeline work: save_report tool,
  output-reports path codification, multi-format renderer (MD/HTML/PDF/DOCX)
- Documents known gaps: no tests, optional deps uninstalled, module-level import risk
- Next steps: install [report] extras, write test_report_templates.py,
  defer report_templates import, then merge feat-reporting-shard -> main
2026-04-15 18:39:26 -04:00
Nathan Castaldi
58566aba0b feat(reports): add multi-format rendering (html, pdf, docx)
- Add report_templates package (_renderer.py) with MD/HTML/PDF/DOCX
  support using lazy optional imports (markdown, weasyprint, python-docx)
- Apply Wheels brand colors (#003865/#0066cc) to HTML and DOCX output
- Extend save_report MCP tool with `format` param (default: "md");
  binary formats use write_bytes, text formats keep async writer
- Add [report] optional dep group to pyproject.toml for one-step install
- Fix ReportConfig.output_dir default: ./reports → ./output-reports
  to align config.py with the codified REPORT_OUTPUT_DIR env setting

Ref: session 2026-04-15 — exec-friendly report output track

BREAKING CHANGE: ReportConfig.output_dir default changed from
./reports to ./output-reports. Environments without REPORT_OUTPUT_DIR
set in .env will write to a different path after this change.
2026-04-15 18:33:54 -04:00
Nathan Castaldi
fa366e8b72 Add AD User Detail Reports for Nathan Castaldi and Randy Novak
- Created detailed reports for users Nathan Castaldi and Randy Novak.
- Reports include user summaries, directory object information, and raw normalized identity fields.
- Both reports generated from Active Directory on 2026-04-15.
2026-04-15 18:28:27 -04:00
Nathan Castaldi
f2557455b7 feat(reports): update output directory configuration and enhance path resolution logic 2026-04-15 18:28:08 -04:00
Nathan Castaldi
e262e7f42e feat(reports): add save_report tool shard
- nexus-mcp/src/shards/reports.py: new async MCP tool that writes
  markdown to documentation/output-reports/ with UTC-timestamped
  filenames and a path-traversal safety guard
- nexus-mcp/src/main.py: register reports shard gated by ENABLE_REPORTS,
  consistent with existing shard loader pattern
- Keeps chat context lightweight for large identity/audit payloads
  expected during post-consent validation (ref: SESSION_SNAPSHOT_2026-04-15_2)
2026-04-15 18:07:38 -04:00
Nathan Castaldi
e7d986a3c5 feat: add functionality to list disabled AD accounts and update related API 2026-04-15 17:52:37 -04:00
Nathan Castaldi
275d69cd31 refactor: generalize prompt builder for LLM optimization by replacing GPT-5 references with dynamic user input 2026-04-15 17:51:25 -04:00
Nathan Castaldi
4539653d79 feat: add AD user groups retrieval function to identity shard 2026-04-15 17:30:11 -04:00
Nathan Castaldi
a4c09bd43d docs(history): add session snapshot for 2026-04-15 part 2" -m "- finalize CanonicalUser contract enforcement (extra=forbid)
- document production-correct AD dual-account and privileged OU handling
- record policy-aware identity confidence implementation status
- capture explainability improvements in identity output semantics
- note Entra admin-consent as external blocker with clean handoff next steps
2026-04-15 15:26:18 -04:00
Nathan Castaldi
ca1256658f
feat: implement identity confidence evaluation and privileged account check (#5) 2026-04-15 15:05:26 -04:00
Nathan Castaldi
7e74d19ba7 fix: refine CanonicalUser model by removing unnecessary newline and simplifying source_system field definition 2026-04-15 14:41:15 -04:00
Nathan Castaldi
88089d712c fix: change username field in CanonicalUser to required for better data integrity 2026-04-15 14:37:19 -04:00
Nathan Castaldi
db3b49624c fix: update source_system fields to use Literal types for stricter validation 2026-04-15 14:36:17 -04:00
Nathan Castaldi
a5ad2bca11 feat: add plan for repository naming normalization and phased rename strategy 2026-04-15 14:11:46 -04:00
Nathan Castaldi
6bf5d8dd05
fix(ad): normalize ADUserAdapter to snake_case contract (#4)
- ad_adapter.py: emit snake_case keys from PS queries and surface
  email via the `mail` attribute in both get_user and search paths
- adapters.py: update ADUserAdapter.to_canonical to consume
  normalized keys (e.g. `username`, `last_logon_utc`, `ou`) instead
  of raw LDAP names (sAMAccountName, lastLogonTimestamp, dn)
- Resolves field-name alignment tech debt noted in SESSION_SNAPSHOT_2026-04-15
2026-04-15 13:29:04 -04:00
Nathan Castaldi
f6cfd17e30 docs(ops): add session snapshot for 2026-04-15
- Resolved 7 Pylance errors in identity shard (async/to_thread misuse, missing AD adapter methods)
- Remapped search_users, get_stale_accounts, get_disabled_accounts, get_user_by_email call sites
- Added structured logging to identity shard
- Verified 0 diagnostics and 19/19 unit tests passing
- Live mock validation: status reconciliation, disabled accounts, audit log queries
- Deferred: WIS-018 (get_groups backend method), field-name alignment audit
2026-04-15 10:57:08 -04:00
Nathan Castaldi
f4ec8b1d9a
feat: implement AD backend aliases and fix identity shard async calls (#3)
* docs: add comprehensive Nexus MCP test cases for identity shards

* fix: enhance Active Directory user retrieval methods and logging
2026-04-15 10:44:58 -04:00
Nathan Castaldi
0d5c921a94 fix: update Active Directory adapter to use ActiveDirectoryIdentityBackend 2026-04-15 09:11:58 -04:00
Nathan Castaldi
7fb1231f29 fix: correct agent designation in code review prompt 2026-04-15 08:36:04 -04:00
Nathan Castaldi
ce3fe0de6b docs: update title case in demo and setup guide 2026-04-15 08:25:32 -04:00
Nathan Castaldi
de3a780ecf docs: update README to remove outdated status page and improve clarity 2026-04-15 08:25:05 -04:00
Nathan Castaldi
c3754d9c8e docs: remove outdated tools reference section from README 2026-04-15 08:11:50 -04:00
Nathan Castaldi
d6e93c976a Merge branch 'main' of https://github.com/Castn1_Wheels/mcp_servers 2026-04-14 17:12:31 -04:00
Nathan Castaldi
86187a8acd docs(ops): add session snapshot for 2026-04-14
- Document full repo restructure: DEMO_GUIDE, TOOL_INVENTORY promoted to root
- Capture README overhaul, reports/ folder consolidation, and work item register creation
- Record prompt model alignment to claude-sonnet-4.6 and enterprise .gitignore hardening
- Note outstanding: git pull required for dependabot.yml, .venv bash activation failure, unmerged resilience branches
2026-04-14 17:12:27 -04:00
Nathan Castaldi
7d0c114c4d
Create dependabot.yml 2026-04-14 16:00:25 -04:00
bd25bf7dbb chore: apply enterprise gitignore and re-index project structure 2026-04-14 15:54:54 -04:00
f408203b44 docs: update README and DEMO_GUIDE links for improved navigation and clarity 2026-04-14 15:16:36 -04:00
dec6f4d2ff Refactor documentation: Remove outdated README and Tool Inventory, add comprehensive DEMO_GUIDE and new Tool Inventory file 2026-04-14 15:14:17 -04:00
f19fcc8f0b docs(docs): consolidate setup guide into DEMO_GUIDE
- Merge all content from Local-Setup.md into DEMO_GUIDE.md:
  installation, venv activation, .env config, feature flags,
  Claude Desktop integration, mock drift scenarios, SOC 2 audit
  logging, troubleshooting, and dev workflow
- Delete Local-Setup.md (now redundant)
- Correct stale tool count: 48 → 50 (verified from @mcp.tool() grep)
- Fix audit tool names: replaced removed audit_user_drift references
  with current scan_* tool names
- Add working-directory callout (scripts require nexus-mcp/ as cwd)

Continues doc reorganization from SESSION_SNAPSHOT_2026-04-13_2
2026-04-14 15:08:43 -04:00
f040ac2d07 feat(docs): add comprehensive documentation for Nexus work item register, read-only verification, resilience features, and test validation report
- Created `nexus-work-item-register.md` to establish a canonical registry for NEXUS-XXX work items, including shard assignments and a full work item backlog.
- Added `READ_ONLY_VERIFICATION.md` detailing the results of a security audit confirming zero write capabilities across integrated systems.
- Introduced `RESILIENCE.md` outlining the new enterprise system resilience feature, including automatic retry logic, circuit breaker pattern, and graceful degradation strategies.
- Developed `TEST_VALIDATION_REPORT.md` summarizing the successful rebuild of the Nexus MCP server with full audit shard functionality and comprehensive test results.
2026-04-14 15:00:15 -04:00
e6e4810e47 feat(docs): update tool inventory and add resilience documentation
- Updated Nexus MCP Tool Inventory with new NEXUS references and improved tool descriptions.
- Added comprehensive README.md for Nexus MCP, detailing architecture, folder structure, and tool references.
- Introduced RESILIENCE.md to document the new enterprise system resilience features, including automatic retry logic and circuit breaker patterns.
- Created TEST_VALIDATION_REPORT.md summarizing test results and server capabilities post-rebuild.
- Established a canonical work item register (nexus-work-item-register.md) to track NEXUS-XXX work items and their statuses.
- Updated scripts to reflect changes in work item references from WIS to NEXUS.
2026-04-14 14:53:02 -04:00
5c90bdbd04 chore(prompts): align model tags and add report plan
- Update prompt model frontmatter in code-review and feature-add prompts to Claude Sonnet 4.6 (copilot)
- Add a save_report implementation plan prompt to support next-session delivery and clearer handoff context
2026-04-14 14:33:20 -04:00
8727257605 chore(prompts): align model tags and add report plan
- Update prompt model frontmatter in code-review and feature-add prompts to Claude Sonnet 4.6 (copilot)
- Add a save_report implementation plan prompt to support next-session delivery and clearer handoff context
2026-04-14 12:06:56 -04:00
4f3be4cb4c feat: add code review prompt for MCP server analysis 2026-04-14 10:39:23 -04:00
2d61165f46 docs: add Read-Only Security Verification Report 2026-04-13 16:09:09 -04:00
aa0ada8366 finalized snapshot for the day 2026-04-13 15:08:02 -04:00
3e779a5273 docs(repo): reorganize setup docs and drop MCP probes
- Move setup docs into documentation/ and remove legacy MCP troubleshooting content and ad hoc probe files
- Support the session goal of a cleaner, gated workflow with clearer restart context and less maintenance noise
2026-04-13 14:49:23 -04:00
e7cc0385b7 chore(release): bump version to 0.1.3 2026-04-13 14:41:10 -04:00
7701fcd479 chore(ci): remove obsolete GitHub Actions workflows 2026-04-13 14:37:29 -04:00
27f6a543be version bump 2026-04-13 14:34:50 -04:00
fbb90e2500 feat(docs): automate managed README status page
- Add scripts/update_readme_status.py to generate a deterministic status block, enforce traffic-light shard tables, and validate/fix internal links
- Refactor nexus-mcp/README.md into a managed status layout with standardized WIS traceability and Discipline Drives Quality sections
- Aligns with session goals for operational readiness and disciplined documentation as Nexus-MCP scales

Ref: SESSION_SNAPSHOT_2026-04-13
2026-04-13 14:33:14 -04:00
eb209eedc4 chore(release): bump version to 0.1.1 2026-04-13 14:04:02 -04:00
f5a02ae790 chore(git): untrack python build artifacts
- Remove generated package outputs from nexus-mcp/dist/*.whl and *.tar.gz
- Remove generated metadata from nexus-mcp/src/nexus_mcp.egg-info/*
- Keep repository source-only and rely on local/CI builds for artifacts
2026-04-13 13:40:13 -04:00
dcd562c269 Added "Build artifacts" section 2026-04-13 13:38:25 -04:00
c2338ecbb9 build(nexus-mcp): refresh dist and test metadata
- Update nexus-mcp/pyproject.toml to register the integration pytest marker and keep test execution policy explicit
- Regenerate package metadata and distribution artifacts in nexus-mcp/src/nexus_mcp.egg-info/* and nexus-mcp/dist/*

Ref: Session Snapshot 2026-04-13 — close out pending pytest validation hygiene
2026-04-13 13:35:41 -04:00
cc00efc4c1 fix(ci): resolve test collection and async failures
- Add conftest.py to inject lib/ onto sys.path, fixing
  ModuleNotFoundError on identity test collection
- Add pytest-asyncio to CI install step and pyproject.toml
  test extras; set asyncio_mode=auto to resolve 31 async
  test failures flagged in session tech debt backlog
- All 35 tests now pass; 8 skipped (live API, expected)

Ref: Session Snapshot 2026-04-13 — "Pytest validation incomplete"
2026-04-13 13:22:00 -04:00
25d8af869f docs: Update README with enhanced shard status details and async execution improvements 2026-04-13 13:12:55 -04:00
203c0cb87e Merge rebuild-audit-tools: Complete audit shard with async drift detection tools 2026-04-13 13:08:41 -04:00
3114f86fe8 feat(audit): implement asynchronous execution for audit scans and add verification script for MCP protocol 2026-04-13 13:06:06 -04:00
a961e241cd feat(audit): complete drift detection shard implementation (Yellow → Green)
- Implement 4 production-ready audit scan tools in src/shards/audit.py
  - scan_status_reconciliation: detect terminated users still enabled in AD
  - scan_job_title_drift: detect title mismatches between Workday and AD
  - scan_department_mismatches: detect department/cost center drift
  - scan_name_variance_mismatches: detect display name inconsistencies
- Add comprehensive integration test suite (tests/integration_test_audit_shard.py)
- Create demo client (test_client.py) and MCP protocol simulator (test_mcp_protocol.py)
- Add tool catalog generator (list_tools.py) for visibility across all 33 registered tools
- Fix Windows console encoding in src/main.py to support emoji in shard status output
- Add version management utility (scripts/bump_version.py) for release automation
- Update workday test imports to use new drift_detection module path

Completes session goal of establishing SOC 2-compliant cross-system drift detection
per SESSION_SNAPSHOT_2026-04-13.md. All audit tools validated against mock data
with expected mismatch scenarios (Bob Martinez, Carol Chen, David Kim cases).

Refs: WIS-014, WIS-015, WIS-016, WIS-017, WIS-018
2026-04-13 13:02:03 -04:00