|
1 | | -# feedback-a-tron |
| 1 | +# Project Instructions |
2 | 2 |
|
3 | | -> **SYNC STATUS**: Keep in sync with `STATE.scm` - run `scripts/sync-state.sh` to verify |
4 | | -> **Last sync**: 2025-12-11T14:30:00Z |
| 3 | +## ⚠️ CONVERSION NEEDED: npm → Deno |
5 | 4 |
|
6 | | -## Project Overview |
| 5 | +This repo currently uses npm but needs to be converted to Deno. |
7 | 6 |
|
8 | | -Automated multi-platform feedback submission with network verification. |
| 7 | +### DO NOT: |
| 8 | +- Run `npm install` |
| 9 | +- Add new npm dependencies |
| 10 | +- Create package-lock.json |
9 | 11 |
|
10 | | -- **Version**: 0.2.0 (alpha) |
11 | | -- **Phase**: ~60% to v1.0 |
12 | | -- **Origin**: Claude Code API error investigation → MCP security proposals |
| 12 | +### INSTEAD: |
| 13 | +- Use `deno task` for scripts |
| 14 | +- Use npm: specifiers for dependencies (e.g., `import X from "npm:package"`) |
| 15 | +- Create deno.json instead of package.json |
13 | 16 |
|
14 | | -## Quick Reference |
| 17 | +### Conversion Steps: |
| 18 | +1. Analyze package.json dependencies |
| 19 | +2. Create deno.json with equivalent imports/tasks |
| 20 | +3. Update source files to use Deno imports |
| 21 | +4. Remove package.json and package-lock.json |
| 22 | +5. Test with `deno check` and `deno test` |
15 | 23 |
|
16 | | -### What This Project Does |
| 24 | +## Package Manager Policy (RSR) |
17 | 25 |
|
18 | | -1. **Multi-platform issue submission** - Submit to GitHub, GitLab, Bitbucket, Codeberg from one place |
19 | | -2. **Network verification** - Verify submissions actually arrive (latency, packet loss, TLS, DANE) |
20 | | -3. **Credential rotation** - Rotate API tokens to avoid rate limits |
21 | | -4. **MCP integration** - `submit_feedback` tool for Claude Code |
22 | | - |
23 | | -### Key Files |
24 | | - |
25 | | -``` |
26 | | -elixir-mcp/lib/ |
27 | | -├── feedback_submitter.ex # Multi-platform submission GenServer |
28 | | -├── credentials.ex # Credential management with rotation |
29 | | -├── network_verifier.ex # Network-layer verification |
30 | | -└── mcp/tools/submit_feedback.ex # MCP tool for Claude |
31 | | -
|
32 | | -docs/ |
33 | | -└── LANDSCAPE.adoc # Ecosystem analysis |
34 | | -``` |
35 | | - |
36 | | -### Tech Stack |
37 | | - |
38 | | -- **MCP Server**: Elixir (OTP supervision, pattern matching) |
39 | | -- **Network Tools**: ping, traceroute, mtr, openssl, dig |
40 | | -- **Future**: Julia (stats), ReScript-Tea (UI), Oxigraph (RDF) |
41 | | - |
42 | | -## v1.0 Blockers |
43 | | - |
44 | | -### Must Have |
45 | | -- [ ] Elixir MCP server compiles and runs |
46 | | -- [ ] Multi-platform submission works (GitHub, GitLab) |
47 | | -- [ ] Network verification pre-flight checks |
48 | | -- [ ] Credential rotation functional |
49 | | -- [ ] Basic deduplication |
50 | | - |
51 | | -### Should Have |
52 | | -- [ ] Bitbucket and Codeberg support |
53 | | -- [ ] Post-submission verification |
54 | | -- [ ] DNSSEC/DANE checks |
55 | | -- [ ] Audit logging |
56 | | - |
57 | | -## Recent Work (2025-12-11) |
58 | | - |
59 | | -1. Created `FeedbackATron.Submitter` - multi-platform submission |
60 | | -2. Created `FeedbackATron.Credentials` - credential rotation |
61 | | -3. Created `FeedbackATron.NetworkVerifier` - network verification |
62 | | -4. Created MCP tool `submit_feedback` |
63 | | -5. Submitted MCP Security SEPs (#1959-#1962) |
64 | | -6. Submitted Claude Code bug report (#13683) |
65 | | - |
66 | | -## External Contributions |
67 | | - |
68 | | -| Date | Target | Issues | Topic | |
69 | | -|------|--------|--------|-------| |
70 | | -| 2025-12-11 | modelcontextprotocol | #1959-#1962 | MCP Security (DNS, .well-known, headers, unified profile) | |
71 | | -| 2025-12-11 | anthropics/claude-code | #13683 | Content filter session corruption | |
72 | | - |
73 | | -## Design Decisions |
74 | | - |
75 | | -- **Elixir over Rust**: OTP supervision, pattern matching for Datalog |
76 | | -- **ETS over SQLite**: In-memory speed, Oxigraph for persistence |
77 | | -- **CLI fallback**: gh/glab already authenticated, handles token refresh |
78 | | -- **Network verification mandatory**: Feedback silently fails without it |
79 | | - |
80 | | -## Commands |
81 | | - |
82 | | -```bash |
83 | | -# Run MCP server |
84 | | -cd elixir-mcp && mix deps.get && iex -S mix |
85 | | - |
86 | | -# Test submission (when complete) |
87 | | -FeedbackATron.Submitter.submit(%{ |
88 | | - title: "Test issue", |
89 | | - body: "Testing", |
90 | | - repo: "owner/repo" |
91 | | -}, platforms: [:github]) |
92 | | -``` |
93 | | - |
94 | | -## Sync Validation |
95 | | - |
96 | | -STATE.scm is the source of truth. CLAUDE.md is derived. |
97 | | - |
98 | | -```bash |
99 | | -# Check sync |
100 | | -./scripts/sync-state.sh check |
101 | | - |
102 | | -# Regenerate CLAUDE.md from STATE.scm |
103 | | -./scripts/sync-state.sh generate |
104 | | -``` |
| 26 | +- **REQUIRED**: Deno for JavaScript/TypeScript |
| 27 | +- **FORBIDDEN**: npm, npx, node_modules (after conversion) |
| 28 | +- **FALLBACK**: Bun only if Deno is impossible |
0 commit comments