| Dimension | Shared | Only in A | Only in B | Overlap |
|---|---|---|---|---|
| Sections | 0 | 7 | 8 | 0% |
| Commands | 0 | 1 | 1 | 0% |
| Section tags | 0 | 1 | 4 | 0% |
What each file covers
Sections
0 shared · 7 only in A · 8 only in B- − Content safety: nothing proprietary leaves the on-prem machine
- − Redaction protocol
- − Hard rules — never include in your report
- − OK to include (after redaction)
- − Borderline cases
- − What this protects against
- − Mapping snapshot location [D-062]
- + CLAUDE.md
- + Project
- + Session-start ritual
- + Key skills
- + State files
- + Current state
- + Repository layout
- + Conventions
Commands
0 shared · 1 only in A · 1 only in B- − git push
- + python -m core.src.<module>.<module>_cli
Section tags
0 shared · 1 only in A · 4 only in B- − do-not
- + test
- + code-style
- + architecture
- + agent-behaviour
Line diff
kurnoolion/nora · .clinerules/02-content-safety.md
@@ −1 @@
1# Content safety: nothing proprietary leaves the on-prem machine
2
3The user reads your reports off your screen and hand-types into Teacher LLM. Teacher LLM must NEVER
4see verbatim corpus content, MNO names, plan IDs, requirement IDs, release codes, or any
5file path under `<env_dir>/input/`.
6
7## Redaction protocol
8
9You maintain a literal-string mapping at `<env_dir>/state/cline-mapping.json`. Apply it
10forward (real → placeholder) before emitting any report, and reverse (placeholder → real)
11when acting on Teacher LLM's response.
12
13**Mapping schema**:
14
15```json
16{
17 "version": 1,
18 "mappings": {
19 "<real-string>": "<placeholder>"
20 }
21}
22```
23
24**Placeholder format** — angle-bracketed, category-prefixed, stable index:
25
26| Category | Pattern | Example |
27|---|---|---|
28| MNO short prefix | `<MNO{N}>` | `VZ` → `<MNO0>` |
29| MNO alias | `<MNO{N}_ALIAS>` | `VZW` → `<MNO0_ALIAS>` |
30| MNO full name | `<MNO{N}_NAME>` | `Verizon` → `<MNO0_NAME>` |
31| Plan ID | `<PLAN{N}>` | `LTEAT` → `<PLAN0>` |
32| Plan name | `<PLAN{N}_NAME>` | (use when plan_name differs from plan_id) |
33| Release | `<REL{N}>` | `OA-baseline` → `<REL0>` |
34| Requirement ID | `<REQID-{N}>` | `VZ_REQ_LTEAT_45` → `<REQID-0>` |
35| Standards spec | `<SPEC{N}>` | `3GPP TS 24.301` → keep as-is (public standard, not proprietary) |
36
37`{N}` is a stable index — once allocated, never changes. New entries get the next free index.
38
39Apply substitution **longest-match-first** so `VZ_REQ_LTEAT_45` matches before `VZ`.
40
41The mapping playbook (`cline-playbooks/mapping.md`) describes how to seed and grow this
42file.
43
44## Hard rules — never include in your report
45
46- Verbatim quotes from any document under `<env_dir>/input/`
47- Section heading text > 5 words (treat as title-class quoted prose)
48- Requirement body text (any length)
49- Acronym definitions in full (the expansion phrase IS corpus content)
50- Tabular requirement data
51- Real values for any token in the mapping (always emit the placeholder)
52- Un-redacted file paths under `<env_dir>/input/<...>` (the path components are MNO/RELEASE/PLAN)
53
54## OK to include (after redaction)
55
56- Counts, percentages, ratios
57- Generic regex patterns — `^\d+(?:\.\d+)+\s+\S` is fine
58- Format-class observations — `89% of headings are numbered N.N.N`
59- Coverage stats — `rule catches 487/503`
60- Counts of misses by severity — `HIGH=96%, MED=3%, LOW=0.1%`
61- Source code paths inside the repo — `core/src/parser/structural_parser.py:1243`
62 (those are repo paths, not corpus)
63- Public standards references — `3GPP TS 24.301, Section 5.5.1.2.6` (public knowledge)
64- Domain terminology — `ATTACH`, `EMM`, `NAS` (3GPP standard terms)
65
66## Borderline cases
67
68A regex that ORs corpus-specific values is suspect: `(ATTACH|DETACH|FOO)` is fine if all
69three are public 3GPP terms; not fine if `FOO` is a customer-specific keyword. When unsure,
70add `FOO` to the mapping and emit the redacted form.
71
72When unsure in general: ask the user. Default to redaction.
73
74## What this protects against
75
76A passing observer of the user's hand-typed reports — and Teacher LLM itself, which logs
77conversations — never sees any string that uniquely identifies a customer, document,
78release, or specific requirement. Patterns and counts are sufficient for Teacher LLM to
79update code; concrete values stay on-prem.
80
81## Mapping snapshot location [D-062]
82
83Beyond the live `<env_dir>/state/cline-mapping.json` (forward redaction for outgoing
84reports), Cline also maintains a **per-bootstrap mapping snapshot** at:
85
86```
87customizations/mappings/<bootstrap_id>.json
88```
89
90This snapshot pairs with the placeholdered profile at
91`customizations/profiles/<bootstrap_id>.json` (which Teacher LLM commits to public
92github). At parse time, NORA's runtime substitution layer reads the snapshot and
93resolves placeholders in the profile's regex strings to real values.
94
95**The `customizations/mappings/` directory is NOT gitignored**. The contents are
96committed and pushed to the **company-internal** git remote so every team member
97shares one source of truth for the mappings. The trust boundary against the **public**
98mirror (`github.com`) is the work-PC pre-push hook installed by
99`~/work/utils/git-sync/sync-work.sh`: any `git push` whose remote URL is `github.com`
100is rejected unless `NORA_ALLOW_PUBLIC_PUSH=1` is set explicitly (used only for
101audited force-pushes such as history rewrites).
102
103You own this directory. `cline-playbooks/bootstrap.md` Step 8 specifies the write
104operation; `cline-playbooks/mapping.md` documents the on-disk shape and the live-vs-
105snapshot distinction. The directory IS suitable for git tracking — staging and
106committing mapping files is part of the normal team-sync flow. The hook (not
107`.gitignore`) is what keeps them off the public mirror.
108
kurnoolion/nora · CLAUDE.md
@@ +1 @@
1# CLAUDE.md
2
3This file provides guidance to Claude Code (and Cline) when working with code in this repository.
4
5## Project
6
7**NORA** — Network Operator Requirements Analyzer. AI system combining a unified Knowledge Graph with targeted RAG for intelligent querying, cross-referencing, and compliance analysis of US MNO device requirement specifications across multiple MNOs (MNO-A, AT&T, T-Mobile) and quarterly releases.
8
9See `docs/compact/PROJECT.md` for the 1-page identity and `TDD_Telecom_Requirements_AI_System.md` for the canonical technical design.
10
11## Session-start ritual
12
13This project uses **COMPACT** — a portable scaffold for team AI-partnered software development. The AI scaffolding lives under `.claude/skills/` and the durable state lives under `docs/compact/`.
14
15At the start of every session, invoke `run the session-start skill` (or `/session-start`). It loads Tier 1 context (`PROJECT.md` / `STATUS.md` / `MAP.md` / the active phase prompt) and asks what you're working on. Re-invoke mid-session after Claude Code auto-compaction or any time context feels stale.
16
17## Key skills
18
19- `/session-start` — hydrate context at start of every session
20- `/switch-phase <requirements | architecture | development>` — adopt the phase persona
21- `/regen-map` — regenerate `MAP.md` + Structure sections when code structure changes
22- `/drift-check <requirements | design | dev-full | dev-module <name> | all>` — audit for drift between requirements, design, and implementation
23- `/close-session` — end-of-session ritual: triages decisions, updates STATUS, audits MODULE.md edits, proposes commit (this is the **only** place memory is made)
24- `/project-init --re-init` — regenerate phase prompts after project-level changes (state files preserved)
25
26## State files
27
28- `docs/compact/PROJECT.md` — identity + Contributors table
29- `docs/compact/STATUS.md` — active phase, done / in progress / next, flags
30- `docs/compact/requirements.md` — FR / NFR / Deferred (authority for what the system must do)
31- `docs/compact/MAP.md` — module table + Mermaid dependency graph (regenerated)
32- `docs/compact/DECISIONS.md` — append-only ADR log
33- `docs/compact/structure-conventions.md` — what's a module, visibility mapping
34- `docs/compact/design-inputs/` — TDD, README, SESSION_SUMMARY, SETUP_OFFLINE (archival design inputs)
35- `docs/compact/retrofit-snapshot.md` — archival scan of existing codebase at retrofit time
36- `docs/compact/phases/{requirements,architecture,development}.md` — phase personas loaded by `/switch-phase`
37- `src/<module>/MODULE.md` — per-module contracts (16 skeletons seeded by retrofit — see STATUS for curation progress)
38
39## Current state
40
41Retrofitted on 2026-04-21 via `/project-init --retrofit`. The 16 MODULE.md skeletons were curated through 2026-04-27 (sentinels removed). Three-tier code reorg (`core/` + `customizations/` + `config/`) executed 2026-04-27. See `docs/compact/STATUS.md` for the current active phase and work list.
42
43## Repository layout
44
45Three-tier code organization (D-019..D-024) plus a per-env runtime directory `<env_dir>`. See `docs/compact/structure-conventions.md` for the canonical layout.
46
47- `core/src/` — AI-generated Python source (16 packages; one MODULE.md per package). Manual edits exceptional (D-019).
48- `core/tests/` — pytest suite (one `test_<module>.py` per package).
49- `customizations/profiles/` — human-curated document profiles (committed JSON).
50- `customizations/llm/` — AI-scaffolded LLM provider boilerplate (e.g. `proprietary_provider.py`); humans complete the `complete()` body for production deployments.
51- `config/` — per-module settings (currently `config/web.json`; more files land as modules surface configurable knobs).
52- `environments/` — per-environment configs (gitignored except `.gitkeep`); each names an `env_dir` path.
53- `docs/compact/` — COMPACT state files.
54- `.claude/skills/` — COMPACT skills (flat layout: compact-skill, session-start, switch-phase, regen-map, drift-check, close-session, project-init, doctor).
55- `<env_dir>/` (runtime, user-supplied path; not in repo) — `input/<MNO>/<release>/`, `out/<stage>/`, `state/`, `corrections/`, `reports/`, `eval/`.
56
57## Conventions
58
59- Python; no `pyproject.toml` — `requirements.txt` + `core/src/` layout with `__init__.py` per package.
60- Public surface: top-level identifiers without a leading underscore (plus `__init__.py` re-exports when `__all__` is used).
61- CLI per module: `core/src/<module>/<module>_cli.py` with `main()` entrypoint; invoked as `python -m core.src.<module>.<module>_cli`.
62- Protocol-based abstractions: `LLMProvider`, `EmbeddingProvider`, `VectorStoreProvider`.
63- No proprietary document content in logs, error messages, compact reports, or test fixtures.
64
@@ −1 +1 @@
1−# Content safety: nothing proprietary leaves the on-prem machine
1+# CLAUDE.md
22
3−The user reads your reports off your screen and hand-types into Teacher LLM. Teacher LLM must NEVER
4−see verbatim corpus content, MNO names, plan IDs, requirement IDs, release codes, or any
5−file path under `<env_dir>/input/`.
3+This file provides guidance to Claude Code (and Cline) when working with code in this repository.
64
7−## Redaction protocol
5+## Project
86
9−You maintain a literal-string mapping at `<env_dir>/state/cline-mapping.json`. Apply it
10−forward (real → placeholder) before emitting any report, and reverse (placeholder → real)
11−when acting on Teacher LLM's response.
7+**NORA** — Network Operator Requirements Analyzer. AI system combining a unified Knowledge Graph with targeted RAG for intelligent querying, cross-referencing, and compliance analysis of US MNO device requirement specifications across multiple MNOs (MNO-A, AT&T, T-Mobile) and quarterly releases.
128
13−**Mapping schema**:
9+See `docs/compact/PROJECT.md` for the 1-page identity and `TDD_Telecom_Requirements_AI_System.md` for the canonical technical design.
1410
15−```json
16−{
17− "version": 1,
18− "mappings": {
19− "<real-string>": "<placeholder>"
20− }
21−}
22−```
11+## Session-start ritual
2312
24−**Placeholder format** — angle-bracketed, category-prefixed, stable index:
13+This project uses **COMPACT** — a portable scaffold for team AI-partnered software development. The AI scaffolding lives under `.claude/skills/` and the durable state lives under `docs/compact/`.
2514
26−| Category | Pattern | Example |
27−|---|---|---|
28−| MNO short prefix | `<MNO{N}>` | `VZ` → `<MNO0>` |
29−| MNO alias | `<MNO{N}_ALIAS>` | `VZW` → `<MNO0_ALIAS>` |
30−| MNO full name | `<MNO{N}_NAME>` | `Verizon` → `<MNO0_NAME>` |
31−| Plan ID | `<PLAN{N}>` | `LTEAT` → `<PLAN0>` |
32−| Plan name | `<PLAN{N}_NAME>` | (use when plan_name differs from plan_id) |
33−| Release | `<REL{N}>` | `OA-baseline` → `<REL0>` |
34−| Requirement ID | `<REQID-{N}>` | `VZ_REQ_LTEAT_45` → `<REQID-0>` |
35−| Standards spec | `<SPEC{N}>` | `3GPP TS 24.301` → keep as-is (public standard, not proprietary) |
15+At the start of every session, invoke `run the session-start skill` (or `/session-start`). It loads Tier 1 context (`PROJECT.md` / `STATUS.md` / `MAP.md` / the active phase prompt) and asks what you're working on. Re-invoke mid-session after Claude Code auto-compaction or any time context feels stale.
3616
37−`{N}` is a stable index — once allocated, never changes. New entries get the next free index.
17+## Key skills
3818
39−Apply substitution **longest-match-first** so `VZ_REQ_LTEAT_45` matches before `VZ`.
19+- `/session-start` — hydrate context at start of every session
20+- `/switch-phase <requirements | architecture | development>` — adopt the phase persona
21+- `/regen-map` — regenerate `MAP.md` + Structure sections when code structure changes
22+- `/drift-check <requirements | design | dev-full | dev-module <name> | all>` — audit for drift between requirements, design, and implementation
23+- `/close-session` — end-of-session ritual: triages decisions, updates STATUS, audits MODULE.md edits, proposes commit (this is the **only** place memory is made)
24+- `/project-init --re-init` — regenerate phase prompts after project-level changes (state files preserved)
4025
41−The mapping playbook (`cline-playbooks/mapping.md`) describes how to seed and grow this
42−file.
26+## State files
4327
44−## Hard rules — never include in your report
28+- `docs/compact/PROJECT.md` — identity + Contributors table
29+- `docs/compact/STATUS.md` — active phase, done / in progress / next, flags
30+- `docs/compact/requirements.md` — FR / NFR / Deferred (authority for what the system must do)
31+- `docs/compact/MAP.md` — module table + Mermaid dependency graph (regenerated)
32+- `docs/compact/DECISIONS.md` — append-only ADR log
33+- `docs/compact/structure-conventions.md` — what's a module, visibility mapping
34+- `docs/compact/design-inputs/` — TDD, README, SESSION_SUMMARY, SETUP_OFFLINE (archival design inputs)
35+- `docs/compact/retrofit-snapshot.md` — archival scan of existing codebase at retrofit time
36+- `docs/compact/phases/{requirements,architecture,development}.md` — phase personas loaded by `/switch-phase`
37+- `src/<module>/MODULE.md` — per-module contracts (16 skeletons seeded by retrofit — see STATUS for curation progress)
4538
46−- Verbatim quotes from any document under `<env_dir>/input/`
47−- Section heading text > 5 words (treat as title-class quoted prose)
48−- Requirement body text (any length)
49−- Acronym definitions in full (the expansion phrase IS corpus content)
50−- Tabular requirement data
51−- Real values for any token in the mapping (always emit the placeholder)
52−- Un-redacted file paths under `<env_dir>/input/<...>` (the path components are MNO/RELEASE/PLAN)
39+## Current state
5340
54−## OK to include (after redaction)
41+Retrofitted on 2026-04-21 via `/project-init --retrofit`. The 16 MODULE.md skeletons were curated through 2026-04-27 (sentinels removed). Three-tier code reorg (`core/` + `customizations/` + `config/`) executed 2026-04-27. See `docs/compact/STATUS.md` for the current active phase and work list.
5542
56−- Counts, percentages, ratios
57−- Generic regex patterns — `^\d+(?:\.\d+)+\s+\S` is fine
58−- Format-class observations — `89% of headings are numbered N.N.N`
59−- Coverage stats — `rule catches 487/503`
60−- Counts of misses by severity — `HIGH=96%, MED=3%, LOW=0.1%`
61−- Source code paths inside the repo — `core/src/parser/structural_parser.py:1243`
62− (those are repo paths, not corpus)
63−- Public standards references — `3GPP TS 24.301, Section 5.5.1.2.6` (public knowledge)
64−- Domain terminology — `ATTACH`, `EMM`, `NAS` (3GPP standard terms)
43+## Repository layout
6544
66−## Borderline cases
45+Three-tier code organization (D-019..D-024) plus a per-env runtime directory `<env_dir>`. See `docs/compact/structure-conventions.md` for the canonical layout.
6746
68−A regex that ORs corpus-specific values is suspect: `(ATTACH|DETACH|FOO)` is fine if all
69−three are public 3GPP terms; not fine if `FOO` is a customer-specific keyword. When unsure,
70−add `FOO` to the mapping and emit the redacted form.
47+- `core/src/` — AI-generated Python source (16 packages; one MODULE.md per package). Manual edits exceptional (D-019).
48+- `core/tests/` — pytest suite (one `test_<module>.py` per package).
49+- `customizations/profiles/` — human-curated document profiles (committed JSON).
50+- `customizations/llm/` — AI-scaffolded LLM provider boilerplate (e.g. `proprietary_provider.py`); humans complete the `complete()` body for production deployments.
51+- `config/` — per-module settings (currently `config/web.json`; more files land as modules surface configurable knobs).
52+- `environments/` — per-environment configs (gitignored except `.gitkeep`); each names an `env_dir` path.
53+- `docs/compact/` — COMPACT state files.
54+- `.claude/skills/` — COMPACT skills (flat layout: compact-skill, session-start, switch-phase, regen-map, drift-check, close-session, project-init, doctor).
55+- `<env_dir>/` (runtime, user-supplied path; not in repo) — `input/<MNO>/<release>/`, `out/<stage>/`, `state/`, `corrections/`, `reports/`, `eval/`.
7156
72−When unsure in general: ask the user. Default to redaction.
57+## Conventions
7358
74−## What this protects against
75−
76−A passing observer of the user's hand-typed reports — and Teacher LLM itself, which logs
77−conversations — never sees any string that uniquely identifies a customer, document,
78−release, or specific requirement. Patterns and counts are sufficient for Teacher LLM to
79−update code; concrete values stay on-prem.
80−
81−## Mapping snapshot location [D-062]
82−
83−Beyond the live `<env_dir>/state/cline-mapping.json` (forward redaction for outgoing
84−reports), Cline also maintains a **per-bootstrap mapping snapshot** at:
85−
86−```
87−customizations/mappings/<bootstrap_id>.json
88−```
89−
90−This snapshot pairs with the placeholdered profile at
91−`customizations/profiles/<bootstrap_id>.json` (which Teacher LLM commits to public
92−github). At parse time, NORA's runtime substitution layer reads the snapshot and
93−resolves placeholders in the profile's regex strings to real values.
94−
95−**The `customizations/mappings/` directory is NOT gitignored**. The contents are
96−committed and pushed to the **company-internal** git remote so every team member
97−shares one source of truth for the mappings. The trust boundary against the **public**
98−mirror (`github.com`) is the work-PC pre-push hook installed by
99−`~/work/utils/git-sync/sync-work.sh`: any `git push` whose remote URL is `github.com`
100−is rejected unless `NORA_ALLOW_PUBLIC_PUSH=1` is set explicitly (used only for
101−audited force-pushes such as history rewrites).
102−
103−You own this directory. `cline-playbooks/bootstrap.md` Step 8 specifies the write
104−operation; `cline-playbooks/mapping.md` documents the on-disk shape and the live-vs-
105−snapshot distinction. The directory IS suitable for git tracking — staging and
106−committing mapping files is part of the normal team-sync flow. The hook (not
107−`.gitignore`) is what keeps them off the public mirror.
59+- Python; no `pyproject.toml` — `requirements.txt` + `core/src/` layout with `__init__.py` per package.
60+- Public surface: top-level identifiers without a leading underscore (plus `__init__.py` re-exports when `__all__` is used).
61+- CLI per module: `core/src/<module>/<module>_cli.py` with `main()` entrypoint; invoked as `python -m core.src.<module>.<module>_cli`.
62+- Protocol-based abstractions: `LLMProvider`, `EmbeddingProvider`, `VectorStoreProvider`.
63+- No proprietary document content in logs, error messages, compact reports, or test fixtures.
10864
