# StoryCode Agent Checklist Use this file as the durable handoff if another agent needs to continue. Do not mark an item done unless it was actually run or verified. ## Current Status - [x] Read `HANDOFF.md`, `AGENTS.md`, and `README.md`. - [x] Installed local CPU dependencies with `python3 -m pip install -r requirements.txt`. - [x] Verified analyzer baseline with `python3 tests/test_analyzer.py` -> `10/10 passed`. - [x] Fixed fallback rendering bug where `ProjectModel.note` was referenced but not preserved from ingest. - [x] Checked the MiniCPM4.1-8B Hugging Face model card. - [x] Disabled MiniCPM reasoning mode for app calls by appending `/no_think` in `llm.py`. - [x] Added `add_special_tokens=True` to vLLM OpenAI calls, per the model card. - [x] Updated Modal image build to use pre-release/nightly vLLM, per the model card. - [x] Deployed once and found `vllm-0.23.0` rejects the old server flag `--guided-decoding-backend`; removed it and kept request-level xgrammar. - [x] Found vLLM 0.23 defaults to v1 and does not recognize `VLLM_USE_V1`; switched Modal to a CUDA 13 devel base image so FlashInfer can find `nvcc`. - [x] Changed `serve()` from `subprocess.Popen()` to blocking `subprocess.run()` so Modal keeps the web server process alive. ## Next Required Steps - [ ] Run `python3 app.py` with no `.env` model endpoint, open it, click "Try the sample project", and verify Story, Map, Safe-to-Edit, and Dependencies render with fallback narration. - [ ] Install Modal locally if needed: `python3 -m pip install modal`. - [ ] Authenticate Modal: `modal token new`. - [ ] Create a long random shared secret; do not commit it. - [ ] Create the Modal secret: `modal secret create storycode-api MODAL_API_KEY=`. - [ ] Redeploy after removing the obsolete vLLM server flag: `modal deploy modal_app.py`. - [ ] Record the printed public Modal URL without the secret. - [ ] Smoke-test `/v1/chat/completions` with Authorization bearer secret. - [ ] Confirm smoke-test JSON response contains no `` content and returns valid JSON. - [ ] Copy `.env.example` to `.env` and set `MODAL_ENDPOINT_URL=/v1` plus `MODAL_API_KEY=`. - [ ] Run `python3 app.py` with the live model. - [ ] Verify the Story tab renders model-backed Story plus Plain English. - [ ] Verify style and difficulty changes re-narrate without re-analysis. - [ ] Verify Architecture Map draws from `ProjectModel`. - [ ] Verify Safe-to-Edit shows `config.py` and `app.py` as red. - [ ] Verify Dependencies explains `openai`, `chromadb`, and `gradio`. - [ ] Upload a zip with a fake API key and verify the secret-redaction banner. - [ ] Tune prompts in `story.py` only for all 5 styles x 3 difficulty levels. - [ ] After every prompt change, run `python3 tests/test_analyzer.py`. - [ ] Make small Codex-attributed commits with clear messages. - [ ] Add real-user proof to `README.md` under "The person I built it for". - [ ] Deploy to a Gradio Space under `build-small-hackathon`, set secrets, and test on phone. - [ ] Record and link the demo video. - [ ] Push public GitHub repo and link it in `README.md`. - [ ] Post on social and link it in `README.md`. ## Rules To Preserve - Static analysis is the source of truth; the model only narrates `ProjectModel` facts. - Do not add `torch`, `vllm`, or `transformers` to `requirements.txt`. - Core model stays `openbmb/MiniCPM4.1-8B`. - Do not claim Tiny Titan. - Keep `ui/styles.css`. - Never display or send code that has not passed `ingest.redact_secrets`.