Skip to content

Add FERPA output discipline and automated name leak scanner #254

Description

@chaz-clark

Summary

Add output FERPA discipline (never display student names in conversation) and automated name leak scanner to prevent FERPA violations in AI agent conversations.

Background

Incident: 2026-07-28 FERPA violation in ds460-master grading conversation
RCA: ds460-master/grading/RCA_2026-07-28_FERPA_name_disclosure.md

Current FERPA discipline (canvas-toolbox/AGENTS.md) prevents reading .deid_master.csv for name lookup (input discipline), but doesn't prevent displaying names read from other files (output discipline).

Impact: Student names were displayed in conversation responses alongside grades, exposing FERPA Zone 2 data in LLM context and cloud conversation history.

Root Cause

Input/Output Asymmetry:

  • Input discipline: "Don't read .deid_master.csv to look up names"
  • Output discipline: MISSING — no rule preventing name display in conversation

AI agent read working grading files (_computed_grades.csv, _gradebook_canvas.csv) containing names, then included names in formatted responses without filtering.

Proposed Solutions

1. Output FERPA Principle (Documentation)

Add to canvas-toolbox AGENTS.md FERPA section:

Output discipline — NEVER display names in conversation:

Regardless of what files you read, NEVER include student names in conversational responses. Always use de-identified codes (user_id or deid_code) when referring to students.

Examples:

  • CORRECT: "User 806485 received an A (95) as a compassion adjustment"
  • CORRECT: "FR-B75C87 completed 2 KCs and 3 WCs, earning a B+ elevated to A"
  • VIOLATION: "Esther Scott (806485) received an A"
  • VIOLATION: "Student 806485 (Esther Scott, FR-B75C87) ..."

Why: Conversation logs are cloud surfaces. Names must never enter LLM context or conversation history.

2. Zone 2-Adjacent File Classification (Documentation)

Expand FERPA file list to clarify "never read" vs "read but don't display":

FERPA Zone 2 (NEVER READ):

  • grading/.deid_master.csv
  • grading/.known_names.txt
  • grading/*/.keymap.json
  • grading/**/.fetch_log.json
  • grading/*/.review.csv
  • grading/*/feedback/_grader*.csv
  • grading/**/submissions_raw/**

FERPA Zone 2-Adjacent (CAN READ, NEVER DISPLAY NAMES):

  • grading/*/_computed_grades.csv
  • grading/*/_gradebook_canvas.csv
  • grading/*/FINAL_REVIEW_COMMENTS_*.md
  • grading/*/_actual_grades.csv

3. Automated Name Leak Scanner (Code Enhancement)

Add pre-output scanner to catch name leaks before conversation display.

Integration options:

  • Claude Code pre-output hook (if supported)
  • Post-hoc conversation audit script
  • Pre-commit hook to scan agent session logs

4. FERPA-Clean Response Templates (Documentation)

Add templates for common grading queries to show proper FERPA-clean formatting.

Implementation Plan

Phase 1 (Immediate):

  • Add Solution 1 (Output FERPA Principle) to canvas-toolbox AGENTS.md
  • Add Solution 4 (response templates) to canvas-toolbox AGENTS.md
  • Update ds460-master AGENTS.md to inherit from canvas-toolbox

Phase 2 (This Week):

  • Add Solution 2 (Zone 2-Adjacent classification) to canvas-toolbox AGENTS.md
  • Design Solution 3 (automated scanner) architecture

Phase 3 (Medium-Term):

  • Implement Solution 3 (automated scanner)
  • Test on ds460-master with name leak scenarios
  • Deploy to all course repos using canvas-toolbox

Success Metrics

  • Zero name leaks in conversation after implementation
  • 100% FERPA-clean responses (user_id/deid_code only)
  • Automated scanner catches violations before display
  • Clear output discipline in documentation

Related

  • Previous FERPA incident: 2026-07-01 (read .deid_master during accommodation)
  • Previous FERPA incident: 2026-07-02 (displayed head -5 .deid_master)
  • HG-5 incident: 2026-07-17 (KC3 grading protocol violation) — RCA in ds460-master

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions