Purview Data Discovery Methods Lab Navigator — MarcusJ Lab

Purview Data Discovery Methods Lab
Microsoft Purview Information Protection — Automated Simulation Environment
🎯 What is this lab? An end-to-end, browser-auth, configuration-driven simulation environment spanning 8 progressive labs. Generate thousands of realistic HR/PII documents, provision SharePoint sites, validate built-in SIT detection, and compare 9 distinct discovery methods — no custom SITs or stored secrets required.
🧪
8 Core Labs
Lab 00 → 07

Progressive hands-on labs covering setup, data generation, upload, classification, 9 discovery tracks, reporting, and cleanup.

🔍
9 Discovery Tracks
Lab 05a–05i

PnP regex, eDiscovery manual & API, Activity Explorer, Auto-Apply, Oversharing, Custom SIT, On-Prem Scanner, Defender for Cloud Apps.

📜
55 Scripts
PowerShell automation

Fully automated PowerShell scripts for site provisioning, document generation, upload, discovery, reporting, and cleanup.

Lab Progression Flow
LAB 00
Prerequisites
10–15 min
LAB 01
Site Creation
10–45 min
LAB 02
Data Generation
5 min–2 hr
LAB 03
Upload
20 min–5 hr
LAB 04
Classification
Up to 7 days
LAB 05
Discovery
5 min–14 days
LAB 06
Reporting
1–2 hr
LAB 07
Cleanup
15–30 min
Key Design Principles
⚙️
Configuration-Driven

Single global-config.json controls all environment values. No hardcoded tenants, URLs, or email addresses anywhere in code.

🔐
Browser-Based Auth Only

Zero stored secrets. All authentication via interactive browser OAuth 2.0 flow. No app registrations, certificates, or PATs in code.

📊
Three Scale Levels

Small: ~1,000 docs (demos) · Medium: ~5,000 docs (testing) · Large: ~20,000 docs (enterprise POCs)

🔄
Repeatable Simulation

Lab 07 fully resets sites, documents, logs, and config back to pristine state. Complete environment ready for next demo iteration.

Recommended Timeline
Day 1 — Foundation (2–4 hours hands-on)
Labs 00–03: Prerequisites → Site Creation → Data Generation → Upload
Day 1+ — Immediate Discovery (parallel)
Lab 05a: PnP regex discovery (88–95% accuracy, no wait)
Day 2–3 — After 24-hour SharePoint Search indexing
Labs 05b/05c: eDiscovery and Graph API (100% Purview SIT accuracy)
Day 2–7 — Ongoing monitoring
Lab 05d: Activity Explorer (24–48h); Lab 05e: Auto-Apply (1–7 days); Labs 05f/g/h/i: Portal-based or advanced
Days 7–14 — Classification baseline
Lab 04: Content Explorer validation (after 7-day classification)
After Discovery — Reporting & Cleanup
Lab 06: Consolidated remediation report (1–2 hr) → Lab 07: Cleanup (15–30 min)
Lab Progression
Eight progressive labs from environment setup to cleanup
🔧
📁 00-Prerequisites-Setup/ · ⏱️ 10–15 min
FIRST RUN

Validate M365 E5 licensing, PowerShell module versions, and service connectivity. Initialize directory structure and logging infrastructure. Update global-config.json before any other lab.

Scripts
  • 📜
    Test-Prerequisites.ps1
    Validates M365 licensing, module versions, and service connectivity
    00-Prerequisites-Setup/scripts/Test-Prerequisites.ps1
  • 📜
    Initialize-SimulationEnvironment.ps1
    Creates directory structure (logs, output, generated-documents, reports, temp) and initializes logging
    00-Prerequisites-Setup/scripts/Initialize-SimulationEnvironment.ps1
PnP.PowerShell v2.3+ ExchangeOnlineManagement v3.4+ M365 E5 License SharePoint Admin role Compliance Admin role
🏗️
📁 01-SharePoint-Site-Creation/ · ⏱️ 10–45 min

Provision SharePoint department sites (HR, Finance, Legal, Marketing, IT). Configure site templates (Communication vs Team), set permissions and ownership. Supports -SkipExisting for idempotent re-runs.

Scripts
  • 📜
    New-SimulatedSharePointSites.ps1
    Creates SharePoint sites from global-config.json specifications
    01-SharePoint-Site-Creation/scripts/New-SimulatedSharePointSites.ps1
  • 📜
    Set-SitePermissions.ps1
    Configures site permissions and ownership
    01-SharePoint-Site-Creation/scripts/Set-SitePermissions.ps1
  • 📜
    Verify-SiteCreation.ps1
    Validates that all sites were created successfully
    01-SharePoint-Site-Creation/scripts/Verify-SiteCreation.ps1
  • 📜
    Show-SiteCreationReport.ps1
    Generates a report of created sites and their status
    01-SharePoint-Site-Creation/scripts/Show-SiteCreationReport.ps1
  • 📜
    Show-ValidationReport.ps1
    Displays site validation results
    01-SharePoint-Site-Creation/scripts/Show-ValidationReport.ps1
📄
📁 02-Test-Data-Generation/ · ⏱️ 5 min (Small) → 2 hr (Large)

Generate realistic documents with built-in Sensitive Information Types (SSN, Credit Cards, Passports, Driver's Licenses, ITIN, Bank Accounts). Mixed formats: 45% docx · 30% xlsx · 15% pdf · 10% txt. Scale: 500–1,000 (Small) · 5,000 (Medium) · 20,000 (Large).

Scripts
  • 📜
    Invoke-BulkDocumentGeneration.ps1
    Orchestrates bulk document generation at configured scale level
    02-Test-Data-Generation/scripts/Invoke-BulkDocumentGeneration.ps1
  • 📜
    New-SimulatedHRDocuments.ps1
    Generates HR documents containing SSNs and employee PII
    02-Test-Data-Generation/scripts/New-SimulatedHRDocuments.ps1
  • 📜
    New-SimulatedFinancialRecords.ps1
    Creates financial records with credit card, bank account, and ABA routing numbers
    02-Test-Data-Generation/scripts/New-SimulatedFinancialRecords.ps1
  • 📜
    New-SimulatedPIIContent.ps1
    Generates identity documents (passports, driver's licenses, ITIN)
    02-Test-Data-Generation/scripts/New-SimulatedPIIContent.ps1
  • 📜
    New-MixedContentDocuments.ps1
    Creates documents with multiple PII types across formats
    02-Test-Data-Generation/scripts/New-MixedContentDocuments.ps1
  • 📜
    Remove-GeneratedDocuments.ps1
    Removes locally generated documents for cleanup
    02-Test-Data-Generation/scripts/Remove-GeneratedDocuments.ps1
💡 Tip: Start with Small scale for initial testing. Local disk output only — upload happens in Lab 03.
📤
📁 03-Document-Upload-Distribution/ · ⏱️ 20 min (Small) → 5 hr (Large)

Bulk upload documents to SharePoint with intelligent distribution (HR docs → HR site, Finance → Finance site). Applies SharePoint metadata: Department, ContentType, PIIDensity, GeneratedDate. Throttling-aware with automatic retry logic (600 req/min, 2,500 req/hr).

Scripts
  • 📜
    Upload-AllDocuments.ps1
    Main entry point — orchestrates bulk upload across all sites
    03-Document-Upload-Distribution/scripts/Upload-AllDocuments.ps1
  • 📜
    Upload-ToSingleSite.ps1
    Uploads documents to a specific SharePoint site
    03-Document-Upload-Distribution/scripts/Upload-ToSingleSite.ps1
  • 📜
    Test-UploadValidation.ps1
    Validates upload completion and document count accuracy
    03-Document-Upload-Distribution/scripts/Test-UploadValidation.ps1
  • 📜
    Grant-AppSitePermissions.ps1
    Grants required permissions for upload operations
    03-Document-Upload-Distribution/scripts/Grant-AppSitePermissions.ps1
🔬
📁 04-Classification-Baseline/ · ⏱️ 30–60 min hands-on · ⏰ Up to 7 days async
PORTAL-BASED

Execute On-Demand Classification via purview.microsoft.com. Review estimation (300–500 items) and cost ($5–$15 typical). Classification runs asynchronously for up to 7 days. Validates 100% Purview SIT detection accuracy in Content Explorer.

🚀 Fire and Forget: Start Lab 04 immediately after Lab 03, then proceed to Lab 05a for instant regex-based discovery while classification runs in the background.
Portal Steps (no scripts)
  1. Navigate to purview.microsoft.com → Information Protection → Classification
  2. Create On-Demand Classification scan for simulation sites
  3. Review estimation results and cost analysis
  4. Start classification → monitor via portal status
  5. After 7 days: validate results in Content Explorer
🔍
📁 05-Discovery-Methods/ · ⏱️ 5 min → 14 days (by method)
9 TRACKS

Nine distinct discovery methods with different timelines, accuracy, and use cases. Choose based on your timing requirements. See the Discovery Methods page for the full comparison matrix and decision guide.

📊
📁 06-Reporting-and-Remediation/ · ⏱️ 1–2 hr

Consolidate discovery results from Labs 05a/05b/05c. Classify files into High/Medium/Low severity tiers. Preview deletions with dry-run (-WhatIf), then apply with explicit -Apply gate. SharePoint Recycle Bin used for reversible cleanup.

Scripts
  • 📜
    Aggregate-RemediationReport.ps1
    Consolidates CSV outputs from multiple discovery methods into unified remediation plan
    06-Reporting-and-Remediation/scripts/Aggregate-RemediationReport.ps1
  • 📜
    Analyze-SeverityBasedRemediation.ps1
    Classifies detected files into High/Medium/Low severity tiers
    06-Reporting-and-Remediation/scripts/Analyze-SeverityBasedRemediation.ps1
  • 📜
    Remove-SharePointDuplicates.ps1
    Safely removes low-risk duplicate files via SharePoint Recycle Bin
    06-Reporting-and-Remediation/scripts/Remove-SharePointDuplicates.ps1
🧹
📁 07-Cleanup-Reset/ · ⏱️ 15–30 min

Full environment reset: removes simulation sites, deletes local generated documents, restores global-config.json to template defaults, and exports cleanup documentation. Supports -WhatIf preview mode and confirmation prompts for safety.

Scripts
  • 📜
    Remove-SimulationResources.ps1
    Removes SharePoint sites and all uploaded simulation content
    07-Cleanup-Reset/scripts/Remove-SimulationResources.ps1
  • 📜
    Reset-Environment.ps1
    Full environment reset including local files and config restoration
    07-Cleanup-Reset/scripts/Reset-Environment.ps1
  • 📜
    Test-CleanupCompletion.ps1
    Validates that all simulation resources have been removed
    07-Cleanup-Reset/scripts/Test-CleanupCompletion.ps1
  • 📜
    Export-FinalDocumentation.ps1
    Exports cleanup documentation and audit trail
    07-Cleanup-Reset/scripts/Export-FinalDocumentation.ps1
⚠️ Safety: Always run -WhatIf first to preview what will be deleted. Cleanup can be run at any stage.
Discovery Methods — Lab 05
Nine tracks with different timing, accuracy, and automation characteristics
How to choose: Pick based on your timing requirements (immediate vs. 24 hr vs. 7 days), accuracy needs (regex estimate vs. 100% Purview SIT), and technical comfort (portal UI vs. PowerShell vs. Graph API).
Method Comparison Matrix
Track Method Timeline SIT Accuracy Automation Best For
05a PnP Direct File enumeration + regex Immediate 70–90% PowerShell Quick interim, learning
05b eDiscovery Manual Portal + Purview SITs 24 hours ~100% Portal UI One-time compliance
05c eDiscovery API Microsoft Graph API 24 hours ~100% Fully automated Recurring scans, SIEM
05d Activity Explorer Audit-trail events 24–48 hr n/a (events) Portal CSV export Monitoring movement
05e Auto-Apply Retention policy simulation 1–7 days ~100% Portal UI Ongoing enforcement
05f Oversharing DSPM, DAG, RCD review Portal review n/a (access) Portal UI Access risk posture
05g Custom Detection Custom SIT, EDM, OCR Portal setup ~100% Portal config Data built-ins miss
05h On-Prem Scanner IP Scanner host Scanner host ~100% Host cmdlets On-prem file shares
05i Defender CAS MDCA file policy Portal review ~100% Portal policy Third-party SaaS
05-Temp Temporal 4-interval longitudinal 2–3 weeks ~100% Periodic scans Classification drift research
Discovery Tracks — Click for Details
05a · PnP Direct

⚡ PnP Direct File Access

Immediate · 70–90% accuracy · PowerShell

Direct file enumeration with regex pattern matching. Fastest path — no indexing wait. Best for immediate results and learning the discovery workflow.

ImmediateRegex📄 README
05b · eDiscovery Manual

✅ eDiscovery Manual

24 hours · ~100% accuracy · Portal UI

Portal-based search using Purview's built-in SITs with Cases preview and Condition builder. Direct export in 5–10 minutes.

24 hr wait100% Purview SITs📄 README
05c · Graph API

🏆 eDiscovery Graph API

24 hours · ~100% accuracy · Fully automated

Microsoft Graph eDiscovery API for automated, recurring scans. SIEM integration ready. 100% Purview SIT accuracy with PowerShell automation.

24 hr waitAutomated📄 README
05d · Activity Explorer

📈 Activity Explorer Monitoring

24–48 hr population · Audit events · Portal CSV

Audit-trail view of what happens to sensitive data — classification changes, downloads, shares. Cross-workload monitoring across M365.

Audit trailCross-workload📄 README
05e · Auto-Apply

🎯 Auto-Apply Policies

1–7 days · ~100% accuracy · Portal UI

Official SIT detection via auto-apply retention policy simulation. Tracks label enforcement activity across the tenant over time.

1–7 daysLabel enforcement📄 README
05f · Oversharing

🔐 Access & Oversharing Posture

Portal review · Access risk · DSPM / DAG / RCD

Who can reach sensitive data? DSPM for data security posture, DSPM for AI, Data Access Governance, and Reports & Content Discovery.

PosturePortal-based📄 README
05g · Custom

🧪 Custom Detection

Portal setup · ~100% accuracy · Advanced

Custom SITs (regex), Exact Data Match (EDM), Trainable Classifiers, and OCR for document images. For data the built-ins miss.

EDMClassifiersOCR📄 README
05h · On-Prem

🏢 On-Premises Scanner

Scanner host · ~100% accuracy · Advanced / Optional

Extends discovery to on-premises Windows file shares via the Information Protection Scanner. Analyzes detailed scanner reports.

OptionalOn-prem📄 README
05i · Defender CAS

☁️ Defender for Cloud Apps

Portal policy · ~100% accuracy · Optional

MDCA file policy with content inspection for SITs across Box, Dropbox, Google Drive, and other third-party SaaS apps.

OptionalCross-cloud📄 README
🔬
Lab 05-Temporal — Longitudinal Classification Analysis (Optional)
📁 05-Discovery-Methods/05-Temporal-Classification-Analysis/ · ⏱️ 2–3 weeks
OPTIONAL

4-interval temporal tracking (24hr, 7d, 14d, 21d) to observe classification drift and evolution. Research-focused longitudinal study. Scripts: Invoke-TemporalScan.ps1, Compare-TemporalScans.ps1, Invoke-TemporalAnalysis.ps1

📈
Cross-Lab Analysis
📁 05-Discovery-Methods/scripts/

Compare results across all discovery methods with side-by-side accuracy, coverage, and confidence analysis.

  • 📜
    Invoke-CrossLabAnalysis.ps1
    Produces comparative report across all discovery method outputs
    05-Discovery-Methods/scripts/Invoke-CrossLabAnalysis.ps1
  • 📜
    Resolve-UnmappedSITGuids.ps1
    Maps unmapped SIT GUIDs to human-readable names in discovery reports
    05-Discovery-Methods/scripts/Resolve-UnmappedSITGuids.ps1
  • 📜
    Expand-eDiscoveryExportPackages.ps1
    Expands and processes eDiscovery export packages for analysis
    05-Discovery-Methods/scripts/Expand-eDiscoveryExportPackages.ps1
All Scripts
55 PowerShell scripts organized by lab and function
Convention: All scripts read configuration from global-config.json via Shared-Utilities/Import-GlobalConfig.ps1. Logging uses Write-SimulationLog.ps1. Auth is always interactive browser-based.
🔧 Shared Utilities
  • 🔑
    Connect-PurviewServices.ps1
    Browser-based interactive authentication to SharePoint, Exchange, and Graph
    Shared-Utilities/Connect-PurviewServices.ps1
  • ⚙️
    Import-GlobalConfig.ps1
    Reads and validates global-config.json — single source of truth for all env values
    Shared-Utilities/Import-GlobalConfig.ps1
  • 📦
    Import-PurviewModules.ps1
    Imports PnP.PowerShell, ExchangeOnlineManagement, Microsoft.Graph with minimum version checks
    Shared-Utilities/Import-PurviewModules.ps1
  • 📝
    Write-SimulationLog.ps1
    Canonical logger — DO NOT use bare Write-Host for state logging
    Shared-Utilities/Write-SimulationLog.ps1
  • 🩺
    Test-ServiceConnection.ps1
    Validates active connections to SharePoint, Exchange, and Graph services
    Shared-Utilities/Test-ServiceConnection.ps1
  • 📊
    Get-SimulationProgress.ps1
    Reports current simulation state and progress across all labs
    Shared-Utilities/Get-SimulationProgress.ps1
  • 🔗
    Merge-LabConfig.ps1
    Merges lab-specific config with global config for per-lab overrides
    Shared-Utilities/Merge-LabConfig.ps1
  • 🗺️
    Resolve-GlobalReference.ps1
    Resolves dynamic references within configuration values
    Shared-Utilities/Resolve-GlobalReference.ps1
  • 🔌
    Functions/Connection-Management.ps1
    Reusable connection management functions (retry, session validation, throttle handling)
    Shared-Utilities/Functions/Connection-Management.ps1
⚡ Lab 05a — PnP Direct File Access
  • 📜
    Invoke-PnPDirectFileDiscovery.ps1
    Main discovery script — PnP file enumeration + regex SIT matching across all sites
    05-Discovery-Methods/05a-PnP-Direct-File-Access/scripts/Invoke-PnPDirectFileDiscovery.ps1
  • 📜
    Open-LatestReport.ps1
    Opens the most recent discovery CSV report for review
    05-Discovery-Methods/05a-PnP-Direct-File-Access/scripts/Open-LatestReport.ps1
✅ Lab 05b — eDiscovery Compliance Search
  • 📜
    Test-ContentIndexingStatus.ps1
    Checks SharePoint Search indexing readiness before eDiscovery search
    05-Discovery-Methods/05b-eDiscovery-Compliance-Search/scripts/Test-ContentIndexingStatus.ps1
  • 📜
    Invoke-eDiscoveryResultsAnalysis.ps1
    Analyzes eDiscovery search results and generates summary report
    05-Discovery-Methods/05b-eDiscovery-Compliance-Search/scripts/Invoke-eDiscoveryResultsAnalysis.ps1
  • 📜
    Expand-eDiscoveryExportPackages.ps1
    Expands downloaded eDiscovery export packages for analysis
    05-Discovery-Methods/05b-eDiscovery-Compliance-Search/scripts/Expand-eDiscoveryExportPackages.ps1
🏆 Lab 05c — Graph API Discovery
  • 📜
    Invoke-GraphSitDiscovery.ps1
    Main Graph API discovery — automated eDiscovery via Microsoft Graph
    05-Discovery-Methods/05c-Graph-API-Discovery/scripts/Invoke-GraphSitDiscovery.ps1
  • 📜
    Test-GraphConnectivity.ps1
    Validates Graph API connection and required delegated permissions
    05-Discovery-Methods/05c-Graph-API-Discovery/scripts/Test-GraphConnectivity.ps1
  • 📜
    Grant-GraphPermissions.ps1
    Grants required delegated Graph API permissions for discovery
    05-Discovery-Methods/05c-Graph-API-Discovery/scripts/Grant-GraphPermissions.ps1
  • 📜
    Export-SearchResults.ps1
    Exports Graph eDiscovery search results to CSV
    05-Discovery-Methods/05c-Graph-API-Discovery/scripts/Export-SearchResults.ps1
  • 📜
    Get-ExistingCases.ps1
    Lists existing eDiscovery cases in the tenant
    05-Discovery-Methods/05c-Graph-API-Discovery/scripts/Get-ExistingCases.ps1
  • 📜
    Invoke-GraphDiscoveryAnalysis.ps1
    Analyzes Graph discovery results and generates comparison reports
    05-Discovery-Methods/05c-Graph-API-Discovery/scripts/Invoke-GraphDiscoveryAnalysis.ps1
  • 📜
    Compare-Discovery-Results.ps1
    Side-by-side comparison of 05a (regex) vs 05c (Graph API) results
    05-Discovery-Methods/05c-Graph-API-Discovery/scripts/Compare-Discovery-Results.ps1
  • 📜
    Test-SiteAvailability.ps1
    Verifies SharePoint sites are available and indexed for Graph search
    05-Discovery-Methods/05c-Graph-API-Discovery/scripts/Test-SiteAvailability.ps1
  • 📜
    Expand-eDiscoveryExportPackages.ps1
    Expands and processes eDiscovery export packages from Graph API
    05-Discovery-Methods/05c-Graph-API-Discovery/scripts/Expand-eDiscoveryExportPackages.ps1
📈 Lab 05d/05e/05h — Monitoring & Advanced
  • 📜
    Invoke-ActivityExplorerAnalysis.ps1
    Exports and analyzes Activity Explorer audit events for classified content
    05-Discovery-Methods/05d-Activity-Explorer-Monitoring/scripts/Invoke-ActivityExplorerAnalysis.ps1
  • 📜
    Invoke-PolicySimulationAnalysis.ps1
    Analyzes auto-apply policy simulation results and enforcement statistics
    05-Discovery-Methods/05e-Auto-Apply-Policies-Discovery/scripts/Invoke-PolicySimulationAnalysis.ps1
  • 📜
    Analyze-ScannerDetailedReport.ps1
    Processes and analyzes On-Premises Scanner detailed report output
    05-Discovery-Methods/05h-OnPrem-Scanner-Discovery/scripts/Analyze-ScannerDetailedReport.ps1
Configuration
global-config.json — single source of truth for all environment values
⚠️ Security: global-config.json is gitignored. Only commit global-config.json.template with placeholder values. Never put real tenant IDs, emails, or secrets in tracked files.
Placeholder Values (Required in All Code)
Config Key / ClassRequired PlaceholderExample
Tenant URLhttps://contoso.sharepoint.comReplace with your tenant in global-config.json only
Admin URLhttps://contoso-admin.sharepoint.com
Admin Emailadmin@example.com
User Emailuser@example.com
Tenant / Object / App ID00000000-0000-0000-0000-000000000000All GUIDs use zero placeholder
Org NamesContoso, Fabrikam
Domainsexample.com, contoso.com
Site Collectionshttps://contoso.sharepoint.com/sites/Example
Configuration Architecture
📄
global-config.json.template

Committed to git. Contains the shape of configuration with placeholder values. Used as the starting point for contributors. Never contains real values.

Committed ✓Placeholders only
🔒
global-config.json

Gitignored. Contains real tenant values filled in by the contributor. Read at runtime by all scripts via Import-GlobalConfig.ps1. Never committed.

Gitignored ✓Real values (local only)
Scale Levels
ScaleDocumentsGeneration TimeUpload TimeStorageBest For
Small~1,0005–10 min20–40 min~100 MBTesting, demos, learning
Medium~5,00030–60 min1–2 hr~500 MBDevelopment, validation
Large~20,0001–2 hr3–5 hr10–15 GBEnterprise POC, production demo
Throttling Limits

PnP PowerShell: 600 requests/min · 2,500 requests/hour
All upload and discovery scripts include automatic retry logic with exponential back-off.
Monitor throttling in script output — scripts will pause automatically when limits are hit.

Squad Agents
Two-tier agent model for AI-assisted development
Default flow: @idea-intake@artifact-resolver → persona work → @owner-approval → merge
Tier 1 — Orchestrator
🎯
@squad
📁 .github/agents/squad.agent.md

Tier-1 orchestrator that activates exactly one persona per request. Routes work to the appropriate Tier-2 agent based on the change type. All requests should start here.

Tier 2 — Specialized Agents
💡
@idea-intake
.github/agents/idea-intake.agent.md

Classifies requests, generates the plan (epic + gated child issues), drafts issues with acceptance criteria and squad:<persona> labels. No work starts without an @idea-intake issue.

🔧
@artifact-resolver
.github/agents/artifact-resolver.agent.md

Picks the persona, creates a feature branch off main, builds the artifact, opens the PR linked to the issue, and runs validation. All PRs are opened by @artifact-resolver only.

@owner-approval
.github/agents/owner-approval.agent.md

On marcusjacobson's go-ahead, applies the owner-approved label, squash-merges the PR, and deletes the branch. Merge gate — no merge without owner sign-off.

Persona Charters (.squad/charters/)
PersonaCharter FileResponsible For
@lab-architectlab-architect-charter.mdCross-lab structure, ADRs, sequencing
@powershell-automationpowershell-automation-charter.mdAll *.ps1 / *.psm1 / Shared-Utilities
@purview-specialistpurview-specialist-charter.mdSIT mapping, DLP, eDiscovery, classification logic
@security-stewardsecurity-steward-charter.mdAuth flows, secret hygiene, placeholder enforcement
@validation-leadvalidation-lead-charter.mdreports/, validation scripts, acceptance thresholds
@scribescribe-charter.mdREADME.md, guides, ADRs, squad memory updates
Hard Rules
  • No work without an issue from @idea-intake
  • No PR opened by any path other than @artifact-resolver
  • No direct push to main
  • No merge without the owner-approved label and marcusjacobson's go-ahead
  • No persona reviews its own PR
  • No writes to .squad/memory/** outside the Scribe handoff workflow (append-only)
  • All agent outputs are proposals until the owner approves
Change Routing
Change TypeRoute To
Cross-lab structure, ADR, sequencing@lab-architect
Any *.ps1 / *.psm1 / Shared-Utilities@powershell-automation
SIT mapping, DLP, eDiscovery, classification logic@purview-specialist
Auth flow, secret hygiene, placeholder enforcement@security-steward
reports/, validation scripts, acceptance thresholds@validation-lead
README.md, guides, ADRs, .squad/memory updates@scribe
New / unscoped request@idea-intake first
Open the PR for any of the above@artifact-resolver
Final merge gate@owner-approval