Changed the pastebin tutorial so it now starts skeletal: no prebuilt Flask behavior, no pre-generated task tests, and .gitkeep placeholders under templates/ and tests/. The new pipeline in nightshift/project_templates/tutorial-pastebin/nightshift.yaml:1 now runs:
plan -> semantic_context -> context -> write_tests -> review_tests -> implement -> pytest -> review
────────────────────────────────────────────────────
Added nightshift/project_templates/tutorial-pastebin/.nightshift/agents/test-writer.md:1, tightened the planner/implementer/reviewer/debugger prompts, mirrored the pipeline docs/
example, and raised default retries to 6 for the basic starter plus pastebin.
I also fixed the retry policy issue in nightshift/escalation.py:17 and nightshift/pipeline.py:251: configured repeated-failure thresholds are now respected instead of hard-stopping in nightshift/project_templates/tutorial-pastebin/
early after three same-stage/same-cause failures. Non-implementation file_writer stages now get stage-specific retry artifacts so test generation does not collide with implementation
repair artifacts
- Added nightshift what-happened to summarize the latest run/task failure from artifacts.
- Added integ-run --setup with setup options, so sandbox creation can immediately run integ-setup.
- integ-setup output now explicitly shows the venv activation command.
- Command stages now prefer a detected project/adjacent .venv, so python -m pytest -q should use the integ venv without relying on shell activation.
- Retry command outputs now get attempt-specific artifact names, like test-output-1.txt, instead of overwriting.
- Docs updated in README.md, the pastebin template README, and examples/tutorial/03-pastebin.
- Added pytest config so root python -m pytest -q ignores generated integ/template target tests.
- Version bumped to 0.2.4-alpha-bratwurst-relish.
What changed:
- Added file_writer stage support in nightshift/config.py:93, nightshift/agents.py:446, and nightshift/pipeline.py:374.
- Added file-block parsing and deterministic patch generation in nightshift/patches.py:65.
- file_writer agents now return complete file blocks:
```file:relative/path.py
<complete file content>
```
NightShift reads current files and generates the unified diff itself.
- Existing patch_validator, patch_normalizer, and patch_apply still run after that.
- Switched tiny-lisp-nightshift/nightshift.yaml:51 to type: file_writer.
- Updated tiny-lisp-nightshift/agents/implementer.md:1 to request file blocks instead of diffs.
- Updated README, tutorial, config reference, and design doc.
Also added tests for parsing file blocks, generating multi-file diffs, validating those diffs, and running a full file_writer -> normalize -> validate pipeline.
Verification: python -m unittest discover -v passes, 101 tests.
- Added operational run logging via nightshift/runlog.py.
- CLI now streams progress during run / run --all.
- Runs write .nightshift/runs/<run-id>/run.log and aggregate .nightshift/nightshift.log.
- Web dashboard now shows the last 100 run log lines.
- Added agent temperature config.
- Added minimal openai_compatible backend and temperature passing for it.
- Added Ollama temperature handling.
- Added scoped repo lookup tools in nightshift/repo_tools.py: list_files, read_file, grep.
- Planner agents can request lookup context with lookup_requests; NightShift saves files-inspected.md and reruns the planner with retrieved context.
- Added repo_context stage type that writes context-pack.md.
- Marked phases 23-27 complete in docs/design.md:990.
Includes starter project generation, validation for configs/tasks/commands, artifact snapshot writing, structured stage results, command output capture, devlogs for phases 1-6, and unit coverage for the implemented MVP layers.