nightshift/examples/tutorial/03-pastebin/README.md
K. Hodges f7fed4535b Add tutorial integration workflow helpers
- Add `integ-test` to create, set up, validate, and run integration template tasks
  - Add `integ-report` to summarize latest integration run artifacts
  - Switch default pastebin template from model fallback to single `qwen3-coder:30b`
  - Support optional Ollama fields: `num_ctx`, `num_predict`, `seed`, and `stop`
  - Add `nightshift validate` preflight for task-specific test files
  - Update pastebin docs, config reference, and ideas tracking
  - Add tests for integration helpers, task-test validation, config parsing, and template expectations
2026-05-21 03:46:27 -07:00

141 lines
3.9 KiB
Markdown

# Tutorial 03: Pastebin With Fixed Tests And Telemetry
This tutorial uses the `tutorial-pastebin` template: a small Flask snippet-hosting service designed for deterministic NightShift orchestration tests.
It is intentionally simpler than the imageboard tutorial. There are no uploads, thumbnails, sessions, or moderation queues. The work is ordinary web-app behavior: snippet creation, viewing, listing, filtering, expiration handling, and simple HTML forms.
## What The Template Creates
Run this from a disposable parent directory:
```bash
nightshift init --template tutorial-pastebin --root nightshift-pastebin
cd nightshift-pastebin
```
For an isolated local integration run, use the integration sandbox command from the NightShift repository root:
```bash
python -m nightshift.cli integ-run --template tutorial-pastebin
```
To create, set up, validate, and run one task in a single command:
```bash
python -m nightshift.cli integ-test --template tutorial-pastebin --task TASK-001
```
To create the sandbox and set up the Python project immediately:
```bash
python -m nightshift.cli integ-run --template tutorial-pastebin --setup
```
Then set up the generated Python project:
```bash
python -m nightshift.cli integ-setup --project integ_runs/<timestamp>/project
```
`integ-setup` cannot activate the venv for your current shell. In PowerShell, activate it manually if you want plain `python` and `nightshift` to use the integration venv:
```powershell
integ_runs\<timestamp>\.venv\Scripts\Activate.ps1
```
The template creates:
```text
nightshift.yaml
.nightshift/
agents/
planner.md
test-writer.md
implementer.md
debugger.md
reviewer.md
tasks.md
src/
pastebin_app/
templates/
tests/
pyproject.toml
README.md
```
The template includes a tiny Flask `create_app(database_path=None)` scaffold and fixed tests for each tutorial task. The default tutorial pipeline asks the implementation agent to make only the current task's deterministic tests pass before review.
## Prerequisites
Install NightShift from this repository:
```bash
python -m pip install -e .
```
Install target dependencies:
```bash
python -m pip install -e . pytest flask
```
Install and start Ollama, then pull the default pastebin model:
```bash
ollama pull qwen3-coder:30b
ollama list
```
NightShift uses Ollama's local HTTP API, normally at `http://localhost:11434`.
## Model
The default pastebin pipeline uses one strong local coder model:
- `qwen3-coder:30b`
NightShift records which agent/model handled each stage in `telemetry-summary.md`. Multi-candidate fallback belongs in a separate experiment template, not the default pastebin reliability harness.
## TDD Pipeline
The task pipeline runs in this shape:
```text
plan -> semantic_context -> context -> implement -> pytest -> review
```
The default template uses fixed task tests instead of model-generated tests. This keeps the tutorial focused on implementation and NightShift orchestration instead of letting a test-writing model invent an incompatible architecture.
## Task Plan
The template writes the full task list to `.nightshift/tasks.md`. A copy is included here as [tasks.md](tasks.md).
1. Snippet creation and viewing
2. Snippet metadata fields
3. Snippet listing and filtering
4. Expiration handling
5. HTML forms and templates
Run one task first:
```bash
python -m nightshift.cli validate
python -m nightshift.cli run --task TASK-001
python -m nightshift.cli what-happened
```
Then inspect:
```text
.nightshift/runs/<run-id>/devlog.md
.nightshift/runs/<run-id>/telemetry-summary.md
.nightshift/runs/<run-id>/tasks/TASK-001/semantic-context.md
.nightshift/runs/<run-id>/tasks/TASK-001/telemetry-summary.md
.nightshift/runs/<run-id>/tasks/TASK-001/artifact-index.md
.nightshift/runs/<run-id>/tasks/TASK-001/test-output.txt
```
## Pipeline Reference
A copy of the template pipeline is included here as [nightshift.yaml](nightshift.yaml). The canonical runnable template lives under `nightshift/project_templates/tutorial-pastebin/`.