Skip to content

Module 02 · Chapter 4

Turn Real Tasks Into Training Examples

Specify desired behaviour, provenance, rights, and sensitive-data handling for each training example.

Advanced14 min readUpdated Nov 7, 2026

Learning objectives

  • Specify data schema contracts separating System, User, and Assistant roles for domain operational tasks.
  • Implement Shannon entropy scanning and deterministic regex patterns to redact credentials and PII from traces.
  • Filter production chatter and ambiguous logs to optimize data signal-to-noise ratio following LIMA principles.
  • Record immutable provenance, lineage metadata, and data rights licensing to ensure regulatory audit compliance.

Before you start

  • Familiarity with production incident telemetry and baseline evaluation gates from Module 1
  • Basic understanding of regex and string entropy calculations

Before we dive into the pipeline, look at what we’re transforming. Scenario Continuity Bridge: In Module 1 (diagnose-gap-before-training.mdx), our initial evaluation under modest traffic and general queries concluded with a DO NOT TRAIN / HOLD decision. The four-gate engine triggered on Gate 4 (Economics): at 5,000 incidents/month, few-shot prompting cost ~$2.93/month while dedicated GPU hosting cost ~$1,601/month.

Why does Module 2 proceed with dataset preparation? In this branch of the scenario, the organization re-evaluated under an enterprise workload with high daily query volume (e.g., 500,000 queries/day ≈ 15M queries/month) where dedicated GPU hosting is economically superior to API token costs, and where strict data-residency/privacy regulations prohibit sending raw internal incident telemetry to third-party APIs. Under these conditions—high volume amortizing the fixed hosting cost, and regulatory constraints forbidding external APIs—adapting an internal open-weights specialist is fully justified.

The schema for curated training examples includes:

  • subsystem: auth
  • severity: P3
  • root_cause_hypothesis: concise technical description
  • recommended_runbook: exact runbook ID (e.g., “RB-DB-POOL-MITIGATION-02”)
  • safety_escalation: boolean flag for executive escalation
  • rationale: chain of evidence from telemetry

A raw production incident trace — complete with exposed API keys, internal IPs, engineer names, and conversational noise — becomes a clean, schema-valid SFT training record with verifiable provenance.

=== PAGERDUTY ALERT ===
Alert ID: PD-ABC123DEF
Service: payment-api
Severity: SEV-2
Timestamp: 2026-10-15T14:32:11Z
Details: p99 latency > 2s for 5m (threshold: 500ms)
Runbook: https://runbooks.company.com/payment-api/latency-spike
=== SLACK THREAD #incident-payment-api ===
[14:32:15] @oncall-pagerbot: 🚨 SEV-2: payment-api latency spike (PD-ABC123DEF)
[14:32:22] alice.chen: ack, looking
[14:32:35] alice.chen: `kubectl get pods -n payment -l app=payment-api`
[14:32:41] alice.chen: 3/5 pods CrashLoopBackOff
[14:33:02] alice.chen: `kubectl logs payment-api-7b9c4f-x2k9m -n payment --previous`
[14:33:10] alice.chen: ERROR: redis connection refused to 10.240.12.84:6379
[14:33:25] bob.wilson: redis primary failed over? check datadog
[14:33:40] alice.chen: `datadog query: redis.replication.lag{env:prod,cluster:payments}`
[14:33:55] alice.chen: lag spiked to 120s at 14:31:45, primary 10.240.12.84 unreachable
[14:34:10] alice.chen: initiating manual failover per runbook step 3
[14:34:15] alice.chen: `kubectl exec -n redis redis-cli-0 -- redis-cli -h 10.240.12.85 -a $REDIS_PASSWORD FAILOVER`
[14:34:30] alice.chen: whoops pasted wrong key: sk-proj-abcdef1234567890abcdef1234567890abcdef12
[14:34:35] alice.chen: ^^ IGNORE THAT - wrong window
[14:34:40] alice.chen: `kubectl exec -n redis redis-cli-0 -- redis-cli -h 10.240.12.85 -a $REDIS_PASSWORD FAILOVER`
[14:34:55] alice.chen: failover complete, new primary 10.240.12.85
[14:35:10] alice.chen: `kubectl rollout restart deployment/payment-api -n payment`
[14:35:45] alice.chen: p99 back to 180ms, marking resolved
[14:35:50] @oncall-pagerbot: ✅ RESOLVED: PD-ABC123DEF by alice.chen

After Pipeline Processing (Final Training Example)

Section titled “After Pipeline Processing (Final Training Example)”
{
"provenance": {
"trace_id": "0192f3a8-7c4e-7d1a-8b9c-2e5f6a7b8c9d",
"ingestion_ts": "2026-10-15T14:32:11.123Z",
"source_system": "slack",
"source_id": "C01ABCD2EFG/p1728999131.123456",
"scrubber_version": "v2.3.1",
"curator_id": "eng-alice-chen",
"license_rights": "internal-only",
"gdpr_basis": "legitimate-interest"
},
"messages": [
{
"role": "system",
"content": "You are an SRE responding to a SEV-2 latency alert for payment-api. Follow the runbook: https://runbooks.company.com/payment-api/latency-spike. Available tools: kubectl, datadog query, redis-cli. All internal IPs and secrets are redacted."
},
{
"role": "user",
"content": "ALERT: payment-api p99 latency > 2s for 5m (threshold: 500ms). Runbook: latency-spike. Initial investigation shows 3/5 pods in CrashLoopBackOff. Previous logs show: ERROR: redis connection refused to [REDACTED_IP]:6379"
},
{
"role": "assistant",
"content": "Check Redis replication lag to confirm primary failure: `datadog query: redis.replication.lag{env:prod,cluster:payments}`"
},
{
"role": "user",
"content": "Replication lag spiked to 120s at 14:31:45, primary [REDACTED_IP] unreachable."
},
{
"role": "assistant",
"content": "Initiate manual Redis failover per runbook step 3: `kubectl exec -n redis redis-cli-0 -- redis-cli -h [REDACTED_IP] -a $REDIS_PASSWORD FAILOVER`"
},
{
"role": "user",
"content": "Failover complete, new primary [REDACTED_IP]."
},
{
"role": "assistant",
"content": "Restart payment-api pods to reconnect: `kubectl rollout restart deployment/payment-api -n payment`"
},
{
"role": "user",
"content": "p99 latency recovered to 180ms. Incident resolved."
}
],
"metadata": {
"incident_duration_minutes": 3.5,
"runbook_id": "payment-api/latency-spike",
"root_cause": "redis-primary-failure",
"resolution_action": "manual-failover + pod-restart"
},
"quality_scores": {
"completeness": 0.92,
"specificity": 0.87,
"schema_compliance": true,
"token_quality_ratio": 1.4
}
}

Section 2: The Data Curation Pipeline Architecture

Section titled “Section 2: The Data Curation Pipeline Architecture”
[1. Ingestion & Boundary] ──► [2. Sanitization & Scrubbing] ──► [3. Signal Filter (LIMA)]
• PagerDuty / Slack / Git • Charset-aware Entropy • Problem -> Resolution
• Assign UUIDv7 trace_id • Regex: IP, Email, ARN, K8s • >= 3 concrete actions
• Scrubber version metadata • No bot loops / chatter
│
▼
[5. Target Schema Contract] ◄── [4. Provenance & Governance] ◄────────────┘
• Pydantic TrainingExample • Immutable trace_id, curator, license
• System / User / Assistant • Erasure = retrain excluding trace_id
Five-stage data curation pipeline: Ingestion → Sanitization → Signal Filter → Provenance Tagging → Schema Contract
Read this diagram as text

Each raw artifact receives a UUIDv7 trace_id at ingestion. Stage 2 applies Shannon entropy sliding-window detection followed by deterministic regex/NER rules. Stage 3 applies LIMA quality filters (completeness, specificity, non-circularity, human agency, outcome known, token quality, schema compliance). Stage 4 attaches immutable lineage metadata including scrubber version, curator decision, and license rights. Stage 5 validates against the explicit Pydantic TrainingExample contract with System/User/Assistant role separation.

Each raw artifact receives a globally unique trace_id (UUIDv7) at ingestion. This ID propagates through every downstream stage.

Source Extraction Strategy Boundary Markers
Datadog/PagerDuty alerts Webhook → structured JSON alert_id, timestamp, service, severity
Slack/Teams conversations Export API → thread reconstruction channel_id, thread_ts, user_id, message_ts
Jira/Linear tickets REST API → issue + comments issue_key, status_transitions, comment_thread
Runbook executions CI/CD logs + manual runbook steps runbook_id, step_number, executor, output
Git commits/PRs GitHub/GitLab API → diff + review comments sha, pr_number, reviewer, approval_state

Section 3: Deterministic & Statistical Sanitization

Section titled “Section 3: Deterministic & Statistical Sanitization”

NIST Special Publication 800-122 (Guide to Protecting the Confidentiality of Personally Identifiable Information) establishes the core de-identification principle: no single scrubbing technique is sufficient for semi-structured text. Production data pipelines must combine statistical anomaly detection with deterministic rules and human review.

For any candidate string s (base64, hex, alphanumeric with special chars):

H(s) = - \sum_{i=1}^{n} P(c_i) \log_2 P(c_i)

Where P(c_i) is the empirical frequency of character c_i in s.

Entropy Threshold (Production Sliding Window) Action Example Patterns
H > 4.5 (Base64/mixed‑alphabet) REDACT + FLAG sk-proj-..., AKIA..., ghp_..., xoxb-...
3.5 < H ≤ 4.5 QUARANTINE for human review Potential JWT segments, partial keys
H ≤ 3.5 PASS (likely not a secret) Normal text, UUIDs, hashes

Note: Raw Shannon entropy depends on alphabet size. A 16‑symbol hexadecimal string has theoretical maximum log₂(16) = 4.0 bits/char, while Base62/Base64 reach 5.95–6.0 bits/char. In production pipelines we use charset‑aware sliding thresholds with a quarantine band (3.5 < H <= 4.5) to handle novel key formats and prevent false positives on legitimate high‑entropy data (hashes, UUIDs).

Note on Threshold Regimes: In high-throughput production pipelines, entropy is evaluated using a sliding window (20–128 characters) with quarantine queues. In lightweight single-pass scripts (such as our companion verifier), a charset-aware fixed token-level threshold provides an effective zero-dependency heuristic:

  • Hexadecimal strings (16‑symbol alphabet, max 4.0 bits/char): H ≥ 3.5 on strings ≥ 32 characters
  • Mixed alphanumeric/Base64 strings (~62‑symbol alphabet, max ~5.95‑6.0 bits/char): H ≥ 4.2 on strings ≥ 18 characters
  • Generic alphanumeric (26‑symbol alphabet, max ~4.17 bits/char): H ≥ 3.8 on strings ≥ 20 characters

3.2 Deterministic Rule Layer (Regex + NER)

Section titled “3.2 Deterministic Rule Layer (Regex + NER)”

Deterministic rules run after entropy detection. Any entropy-flagged region is never passed to NER (prevents model hallucination on redacted text).

Pattern Class Regex / Model Replacement
IPv4 (private RFC1918) \b(10\.\d{1,3}|172\.(1[6-9]|2[0-9]|3[0-1])|192\.168)\.\d{1,3}\.\d{1,3}\b [REDACTED_IP]
IPv6 (ULA) \bf[cd][0-9a-f]{2}(:[0-9a-f]{1,4}){7}\b [REDACTED_IPV6]
Email \b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}\b [REDACTED_EMAIL]
AWS ARN arn:aws:[a-z0-9-]+:[a-z0-9-]+:\d{12}:.+ [REDACTED_ARN]
K8s resource names namespace/name pattern in kubectl logs [REDACTED_K8S]
Internal hostnames *.internal, *.corp, *.local [REDACTED_HOST]
Credit card / SSN Luhn + regex [REDACTED_PII]
User Handles / Email Patterns Deterministic regex (username/email) [REDACTED_USER_HANDLE]
Names (NER) spaCy en_core_web_lg PERSON [REDACTED_NAME] (implemented but not in demo pipeline)

Every scrubbing pass emits metadata:

{
"scrubber_version": "v2.3.1",
"entropy_threshold": 4.5,
"rule_pack": "prod-2026-10-15",
"ner_model": "en_core_web_lg-3.7.0",
"redaction_count": 47,
"quarantine_count": 3
}
```
<Callout type="tradeoff">
**Entropy vs. Regex Trade-off:** Entropy detection catches *any* high-entropy string (novel key formats, encoding variations) but has false positives on legitimate high-entropy data (hashes, UUIDs). Deterministic regex catches known patterns with zero false positives but misses novel formats. Running entropy first, then regex, then quarantining the ambiguous band (3.5 < H ≤ 4.5) for human review gives the best coverage.
</Callout>
### 3.4 GDPR Right-to-Erasure Implications on Weights
> **Training weights cannot be surgically edited. Erasure = retrain from scratch without the trace_id.** However, legal requirements around model weights and machine unlearning vary by jurisdiction and require legal counsel to determine specific obligations.
| Approach | Feasibility | Cost |
| --------------------------------------------- | ----------------------------------------------------------- | --------------------------------------------------------- |
| **Retrain from scratch (excluded trace_ids)** | ✅ Only reliable method | High (GPU hours) — requires efficient retraining pipeline |
| **Machine unlearning (gradient surgery)** | ⚠️ Research stage; no production guarantees | Uncertain; may degrade capabilities |
| **Output filtering (blocklisted strings)** | ❌ Insufficient — weights still contain information | Low but non-compliant |
| **Differential privacy (DP-SGD)** | ⚠️ Reduces memorization but degrades utility; ε tuning hard | High compute; utility tradeoff |
**Architectural requirement:** The pipeline **must** maintain a manifest of `trace_id → training_shard` mappings to enable targeted retraining exclusion. Without this, a single erasure request = full retrain.
---
## Section 4: Signal-to-Noise Ratio & The LIMA Principle
Building upon the instruction-tuning foundations established by Ouyang et al. (2022, _Training language models to follow instructions with human feedback_, arXiv:2203.02155), the **LIMA principle (Zhou et al., 2023, arXiv:2305.11206)** demonstrated that a small set of approximately 1,000 meticulously curated demonstrations can match or exceed the alignment performance of tens of thousands of uncurated examples. In supervised fine-tuning, data quality and signal density dominate raw sample quantity.
### 4.1 Filtering Criteria (applied per candidate example)
| Criterion | Threshold | Rationale |
| --------------------- | ----------------------------------------------------------------- | -------------------------------------- |
| **Completeness** | Has clear `problem` → `investigation` → `resolution` arc | Incomplete traces teach hallucination |
| **Specificity** | ≥3 concrete technical actions (commands, queries, config changes) | Vague "I checked logs" adds no signal |
| **Non-circularity** | No bot↔bot loops, no "ack" / "looking" / "thanks" chains | Circular chatter dilutes signal |
| **Human agency** | At least one human decision point (not pure automation) | Pure automation = no teaching signal |
| **Outcome known** | Resolution confirmed (not "escalated" or "investigating") | Unresolved = ambiguous target |
| **Token quality** | Compression ratio (completion/prompt) ∈ [0.3, 3.0] | Extreme ratios = likely garbage |
| **Schema compliance** | Parses to target JSON schema without repair | Downstream training expects valid JSON |
### 4.2 Discard Categories
- Pure status updates ("investigating", "paging @oncall")
- Venting/emotional content ("this is ridiculous", "why does this keep happening")
- Bot-generated noise (automated "ack", "resolved" without human action)
- Duplicate incidents (same root cause, same resolution — keep one canonical)
<Callout type="mistake">
**Common failure:** Keeping "ack, looking" and "thanks" messages because they "show the human
workflow." They don't — they teach the model to output conversational filler instead of technical
actions. The LIMA principle is a design constraint: every token in the training set must carry
signal.
</Callout>
### 4.3 Failure Mode: Hallucination Amplification
Training on noisy, incomplete traces causes the model to:
1. **Invent commands** — "I checked logs" becomes a valid response pattern
2. **Hallucinate resolutions** — Unresolved incidents teach speculative diagnoses as facts
3. **Amplify memorization** — Secrets/PII in noise get memorized alongside signal (Carlini et al., 2021; Lukas et al., 2023)
---
## Section 5: Provenance Metadata & Legal Rights Schema
### 5.1 Immutable Lineage Metadata
Every training example carries **immutable lineage metadata**:
```json
{
"trace_id": "0192f3a8-7c4e-7d1a-8b9c-2e5f6a7b8c9d",
"ingestion_timestamp": "2026-10-15T14:32:11.123Z",
"source_system": "slack",
"source_id": "C01ABCD2EFG/p1728999131.123456",
"scrubber": {
"version": "v2.3.1",
"entropy_threshold": 4.5,
"rule_pack": "prod-2026-10-15",
"redactions": 12,
"quarantined": 0
},
"curator": {
"id": "eng-alice-chen",
"review_timestamp": "2026-10-16T09:15:00Z",
"decision": "accept",
"notes": "Canonical example of redis failover"
},
"license": {
"rights": "internal-only",
"gdpr_basis": "legitimate-interest",
"retention_years": 3,
"erasure_contact": "privacy@company.com"
},
"quality": {
"completeness_score": 0.92,
"specificity_score": 0.87,
"schema_compliance": true,
"token_quality_ratio": 1.4
}
}
Tier Scope GDPR Basis Retention
internal-only Company internal models only Legitimate interest 3 years
partner Named partner organizations (contractual) Contract + consent Per contract
public Open-weight release Explicit consent Indefinite
from pydantic import BaseModel, Field
from typing import Literal, Optional
from datetime import datetime
from uuid import UUID
class Provenance(BaseModel):
trace_id: UUID
ingestion_ts: datetime
source_system: str
source_id: str
scrubber_version: str
curator_id: str
license_rights: Literal["internal-only", "public", "partner"]
gdpr_basis: str
class Message(BaseModel):
role: Literal["system", "user", "assistant"]
content: str
# Optional: tool_calls, tool_results for agentic traces
class TrainingExample(BaseModel):
provenance: Provenance
messages: list[Message] = Field(min_length=3) # system + user + assistant minimum
metadata: dict = Field(default_factory=dict)
# Quality gates (populated at curation time)
quality_scores: Optional[dict] = None

Role semantics:

  • system: Runbook excerpt, architecture context, constraints (“You are an SRE. Follow the runbook.”)
  • user: Alert text, ticket description, Slack question, observed symptoms
  • assistant: Human engineer’s actual response (commands run, queries executed, reasoning, resolution)

No unverified synthetic assistant messages. Synthetic targets require teacher provenance and multi-tier verification in Lesson 7; all accepted examples are verified human actions.


Section 6: Worked Code Example & Verifier Walkthrough

Section titled “Section 6: Worked Code Example & Verifier Walkthrough”

The verification script at scripts/verify-task-to-example.py demonstrates the complete pipeline. Let’s walk through its key components.

def calculate_shannon_entropy(text: str) -> float:
"""Calculates the Shannon entropy H(X) in bits per character.
High entropy (> 4.2 for alphanumeric strings >= 16 chars) indicates cryptographic
keys, API tokens, hashes, or passwords rather than natural language.
"""
if not text:
return 0.0
length = len(text)
counts = Counter(text)
entropy = 0.0
for count in counts.values():
p = count / length
entropy -= p * math.log2(p)
return entropy

Test results from the verifier:

  • Natural text: 3.70 bits/char → PASS (< 3.8)
  • Base62 API key: 4.30 bits/char → FLAG (> 4.1)
  • Hex secret: 3.84 bits/char → FLAG (> 3.6)
PATTERNS = {
"AWS_KEY": re.compile(r"\bAKIA[0-9A-Z]{16}\b"),
"JWT_TOKEN": re.compile(r"\beyJ[A-Za-z0-9_-]+\.[A-Za-z0-9_-]+\.[A-Za-z0-9_-]+\b"),
"GENERIC_SECRET_KEY": re.compile(r"\b(?:sk|key|token|secret)_[a-zA-Z0-9_\-]{20,}\b", re.IGNORECASE),
"IPV4_ADDRESS": re.compile(r"\b(?:10\.\d{1,3}\.\d{1,3}\.\d{1,3}|172\.(?:1[6-9]|2\d|3[01])\.\d{1,3}\.\d{1,3}|192\.168\.\d{1,3}\.\d{1,3})\b"),
"EMAIL": re.compile(r"\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}\b"),
"CREDIT_CARD": re.compile(r"\b(?:\d{4}[ -]?){3}\d{4}\b"),
}
# Entropy Pass for unrecognized high-entropy tokens (>= 18 chars, H > 4.2)
tokens = text.split()
scrubbed_tokens = []
for tok in tokens:
clean_tok = tok.strip(".,;:\"'()[]{}")
if len(clean_tok) >= 18 and calculate_shannon_entropy(clean_tok) >= 4.2:
if not clean_tok.startswith("[REDACTED_"):
scrubbed_tokens.append(f"[REDACTED_HIGH_ENTROPY_SECRET]")
redacted_types.append("HIGH_ENTROPY_SECRET")
continue
scrubbed_tokens.append(tok)
NOISE_PATTERNS = [
re.compile(r"\b(?:ok|okay|brb|thx|thanks|lol|omw|grabbing coffee|ack|ping|pong)\b", re.IGNORECASE),
re.compile(r"^<@[A-Z0-9]+> (?:did you see this|looking now)$", re.IGNORECASE),
re.compile(r"^Bot [a-z0-9_-]+ posted an update\.$", re.IGNORECASE),
]
def is_high_signal_utterance(line: str) -> bool:
line = line.strip()
if len(line) < 5:
return False
for pat in NOISE_PATTERNS:
if pat.search(line):
return False
return True
def transform_raw_trace_to_sft_example(
trace: Dict[str, Any], curator_id: str = "curator_ops_712"
) -> Optional[SFTTrainingExample]:
# 1. Check licensing rights
if not trace.get("consent_for_training", False):
return None
# 2. Filter high-signal operational notes
meaningful_notes = [n for n in raw_notes if is_high_signal_utterance(n)]
# 3. Scrub PII and Secrets
sanitized_user_input, user_redactions = scrub_sensitive_data(unfiltered_user_input)
sanitized_assistant_completion, assist_redactions = scrub_sensitive_data(assistant_json_str)
# 4. Build provenance metadata
metadata = ProvenanceMetadata(
trace_id=trace_id,
source_system=trace.get("source_monitor", "datadog"),
capture_timestamp=trace.get("timestamp", "..."),
curator_id=curator_id,
license_classification=license_type,
scrubber_version="v2.4.0-regex-entropy",
redactions_applied=all_redactions,
rights_verified_for_training=True,
)
# 5. Construct messages with role separation
messages = [
TrainingMessage(role="system", content=SYSTEM_TRIAGE_PROMPT),
TrainingMessage(role="user", content=sanitized_user_input.strip()),
TrainingMessage(role="assistant", content=sanitized_assistant_completion.strip()),
]
Terminal window
python3 scripts/verify-task-to-example.py

Expected output:

=== Running Topic 04 Verification Suite ===
[*] Entropy natural text: 3.70 bits/char
[*] Entropy base62 key: 4.30 bits/char
[*] Entropy hex secret: 3.84 bits/char
[+] Test 1 (Shannon Entropy) Passed.
[*] Scrubbed Output:
Server [REDACTED_IPV4_ADDRESS] crashed. Developer [REDACTED_EMAIL] posted AWS key [REDACTED_AWS_KEY] and secret token [REDACTED_GENERIC_SECRET_KEY] for debug. Also temporary token [REDACTED_JWT_TOKEN]
[*] Redactions Detected: ['JWT_TOKEN', 'EMAIL', 'IPV4_ADDRESS', 'GENERIC_SECRET_KEY', 'AWS_KEY']
[+] Test 2 (Scrubbing Patterns) Passed.
[+] Test 3 (SFT Example Transformation) Passed.
[*] Verified Provenance: curator_ops_712, rights: True
[*] Total Messages: 3
=== All Topic 04 Verification Tests Passed Successfully ===

  1. Extend the entropy calculator to handle multi-line secrets split across log lines (e.g., base64 with line breaks). How would you normalize before scanning?

    Show a hint

    Join lines within a sliding window before computing entropy; strip whitespace and common line-break chars.

  2. Add a new regex pattern to detect GitHub Personal Access Tokens (ghp_ prefix, 36+ chars). Where in the pipeline does this go and why?

    Show a hint

    Deterministic regex layer — after entropy detection, before NER. Known prefix = zero false positives.

  3. Design a trace_id → training_shard manifest format that supports efficient erasure (exclude 1 trace_id from retraining without full reprocessing).

    Show a hint

    Map trace_id to (shard_file, offset, length). Erasure = rebuild shard minus that range, or mark shard dirty for incremental rebuild.

  4. A curator flags a trace as 'quarantine' due to ambiguous PII ('the server in rack 3, row B'). How does this propagate to provenance and what GDPR action is required?

    Show a hint

    Provenance gets quarantine_count > 0. GDPR: if trace contains identifiable info, either redact fully with human review or exclude from training.

Why does the pipeline run entropy detection BEFORE deterministic regex, rather than the reverse?

Entropy catches unknown/novel secret formats (new vendor prefixes, custom encodings). Regex only catches known patterns. Running entropy first ensures novel secrets are flagged; regex then catches known patterns with zero false positives. Entropy-flagged regions are excluded from NER to prevent model hallucination on redacted text.

What happens when a GDPR erasure request arrives for a trace_id that was used in training 6 months ago?

The only compliant path: retrain from scratch excluding that trace_id. This requires a manifest mapping trace_id → training_shard. Without the manifest, you must retrain the entire dataset. Machine unlearning is not production-ready; output filtering is non-compliant (weights still contain the information).

Explain why 'ack, looking' and 'thanks' messages are filtered out as noise, even though they represent real human workflow.

LIMA principle: every training token must carry signal. These messages teach conversational style, not technical problem-solving. The model learns to output filler instead of commands/queries. Specificity threshold requires ≥3 concrete technical actions per example.

How does the quarantine band (3.5 < H ≤ 4.5) reduce false negatives without overwhelming human reviewers?

Low-entropy secrets (short keys, dictionary words, partial tokens) fall below the 4.5 threshold but above natural language (~3.5). Quarantining only this narrow band for human review catches edge cases while keeping review volume low — most secrets are either clearly high-entropy (>4.5) or clearly not secrets (<3.5).