Dev-only pages (sources, trends, complexity, idea-analysis, false-positives, similarity, landscape, export) now require @admin_required and are hidden from nav in production mode. Citations page keeps the graph public but hides influence/BCP tabs behind --dev flag. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
131 lines
5.9 KiB
Markdown
131 lines
5.9 KiB
Markdown
# IETF Draft Analyzer — Project Instructions
|
|
|
|
## What This Is
|
|
|
|
Python CLI tool (`ietf`) to track, categorize, rate, and map IETF Internet-Drafts on AI/agent topics. 361 drafts, 403 authors, 1,262 ideas, 12 gaps. Uses Claude for analysis, Ollama for embeddings, SQLite for storage.
|
|
|
|
## Key Paths
|
|
|
|
- Source: `src/ietf_analyzer/`
|
|
- Database: `data/drafts.db` (NOT `data/ietf_drafts.db`)
|
|
- Reports: `data/reports/`
|
|
- Blog series: `data/reports/blog-series/`
|
|
- Agent definitions: `.claude/agents/`
|
|
- Team prompt: `scripts/agent-team-prompt.md`
|
|
- Scripts: `scripts/`
|
|
|
|
## Development Journal
|
|
|
|
**Every agent and every session MUST log development milestones to `data/reports/dev-journal.md`.**
|
|
|
|
This journal serves two purposes:
|
|
1. Track progress across sessions so nothing gets lost
|
|
2. Source material for the meta blog post about using Claude agent teams to build this project
|
|
|
|
### What to Log
|
|
|
|
Append entries in this format:
|
|
|
|
```markdown
|
|
### [DATE] [AGENT/SESSION] — [SHORT TITLE]
|
|
|
|
**What**: [What was done — features built, analyses run, posts written]
|
|
**Why**: [The reasoning or decision behind it]
|
|
**Result**: [Outcome, key numbers, links to artifacts]
|
|
**Surprise**: [Optional — anything unexpected, a lesson learned, a tool limitation hit]
|
|
**Cost**: [Optional — API tokens, time taken, model used]
|
|
```
|
|
|
|
### Examples of What to Log
|
|
|
|
- Pipeline runs (how many drafts processed, cost, any failures)
|
|
- New features implemented (what, why, how it changed the analysis)
|
|
- Blog posts drafted or revised (key editorial decisions)
|
|
- Architectural decisions (why we structured something a certain way)
|
|
- Agent coordination moments (when one agent's output changed another's direction)
|
|
- Surprises in the data (unexpected findings that shifted the narrative)
|
|
- Tool/infra issues (things that broke, workarounds found)
|
|
|
|
### What NOT to Log
|
|
|
|
- Routine file reads or searches
|
|
- Minor formatting fixes
|
|
- Anything already captured in git commits
|
|
|
|
## Agent Team Conventions
|
|
|
|
When working as a team:
|
|
|
|
1. **Architect** designs the narrative arc and reviews everything for coherence
|
|
2. **Analyst** runs the pipeline, queries the DB, provides data packages
|
|
3. **Coder** implements new features following existing patterns (Click CLI, SQLite, rich output)
|
|
4. **Writer** produces the blog series from data packages and architectural guidance
|
|
|
|
**Always launch agents in parallel when possible.** If agents have independent tasks (e.g., Analyst querying data while Writer drafts from existing material, or Coder implementing features that don't depend on each other), spawn them concurrently in a single message rather than sequentially. Only run agents sequentially when one genuinely depends on another's output.
|
|
|
|
All agents should:
|
|
- Read `scripts/agent-team-prompt.md` for the full brief
|
|
- Log milestones to `data/reports/dev-journal.md`
|
|
- Write blog posts to `data/reports/blog-series/`
|
|
- Save reusable scripts to `scripts/`
|
|
- Follow existing code patterns (don't over-engineer)
|
|
|
|
## Blog Series
|
|
|
|
7 posts planned in `data/reports/blog-series/` (01 through 07), plus:
|
|
- **Post 8: "Agents Building the Agent Analysis"** — Meta post about using Claude Code agent teams to analyze and write about IETF agent standards. The dev-journal.md is the source material for this post.
|
|
|
|
## Code Conventions
|
|
|
|
- CLI: Click commands in `cli.py` with `@click.option()` decorators
|
|
- DB: Tables in `db.py` `ensure_tables()`, queries as methods on `DraftDB`
|
|
- Reports: Report types in `reports.py` `generate_report()`
|
|
- Always cache Claude API calls via `llm_cache` table
|
|
- Use `rich` for console output
|
|
- Save multi-step workflows as scripts in `scripts/`
|
|
|
|
## Web UI: Public vs Dev-Only Pages
|
|
|
|
The web dashboard runs in two modes: production (default) and dev (`--dev` flag).
|
|
**When adding new pages, always decide which mode they belong to.**
|
|
|
|
Use `@admin_required` decorator on dev-only routes, and `{% if is_admin %}` in `base.html` nav links.
|
|
|
|
### Public pages (visible to everyone)
|
|
Pages showing **publicly available data** or **high-level results** that are defensible:
|
|
- Overview, Draft Explorer, Draft Detail — browsable catalog
|
|
- Authors — public data from Datatracker
|
|
- Citations — public citation data
|
|
- Ratings — score distributions (aggregate, not per-draft methodology)
|
|
- Timeline — submission trends (factual)
|
|
- Search — search functionality
|
|
- About, Impressum, Datenschutz — legal/info pages
|
|
|
|
### Dev-only pages (`@admin_required`, `--dev` mode)
|
|
Pages exposing **internal methodology**, **LLM judgments**, **cost data**, or **debatable analysis**:
|
|
- Gap Explorer, Gap Generation — internal gap analysis, draft generation
|
|
- Monitor — pipeline health, API costs, token usage
|
|
- Analytics — pageview tracking
|
|
- Compare — side-by-side draft comparison (uses Claude)
|
|
- AI Ask/Synthesize — Claude-powered Q&A (costs tokens)
|
|
- Annotations — internal notes
|
|
- False Positives — exposes filtering methodology, raw LLM judgment calls
|
|
- Complexity — correlations between LLM ratings and structural metrics (methodologically debatable)
|
|
- Idea Analysis — LLM-generated novelty scores could be challenged
|
|
- Trends — safety ratio uses internal category mappings
|
|
- Sources — rating comparisons across standards bodies (could offend orgs)
|
|
- Similarity — embedding-based methodology
|
|
- Landscape — t-SNE map (methodology-dependent)
|
|
- Obsidian Export — internal tool
|
|
|
|
### Decision criteria for new pages
|
|
- **Public if**: data comes from public sources (Datatracker, standards body websites), or shows aggregate statistics without exposing LLM methodology
|
|
- **Dev-only if**: page reveals how Claude rates/classifies things, shows internal cost/token data, compares organizations in potentially sensitive ways, or uses methodology that could be questioned without full context
|
|
|
|
## Current Status (2026-03-03)
|
|
|
|
- v0.2.0, 361 drafts (101 new, unprocessed)
|
|
- 101 new drafts need: analyze, authors, ideas, embed, gaps
|
|
- Blog series: planned, not yet written
|
|
- Agent team: defined in `.claude/agents/`, ready to launch
|