Everything's an experiment.

Notes on work, tech, and life.

Recent updates:

GitHubpush

Draft OpenSpec change mattpolicastro__nightshift-issue-189-spec-kit-drafter-feasibility-and-critic (specloop propose, round 3)

Pushed 104 commits to mattpolicastro/nightshift • Draft OpenSpec change mattpolicastro__nightshift-issue-189-spec-kit-drafter-feasibility-and-critic (specloop propose, round 2) • Draft OpenSpec change mattpolicastro__nightshift-issue-189-spec-kit-drafter-feasibility-and-critic (specloop propose, round 1) • Merge pull request #197 from mattpolicastro/spec/mattpolicastro__nightshift-issue-188-spec-kit-adapter-on-the-build-path-admit • specloop: archive mattpolicastro__nightshift-issue-188-spec-kit-adapter-on-the-build-path-admit into openspec/specs • specloop: complete task 3.1 • specloop: task 3.1 After merging main (`0172818e`, which landed #191's standalone OpenSpec binary), three documentation tests contradict the merged docs: two cases in `tests/test_openspec_binary_docs. • specloop: append base reconciliation task 3.1 • specloop: merge main (0172818e) into run branch; resolve docs/specloop/README.md • specloop: complete task 2.3 • specloop: task 2.3 Add `examples/specloop/speckit.toml` and update the scoped passages in `README.md`, `docs/specloop/README.md`, `docs/specloop/command-json.md`, `KNOWN-LIMITATIONS.md`, `plugins/nigh • specloop: complete task 2.2 • specloop: task 2.2 Verify native finish recovery in new `tests/test_speckit_finish_recovery.py` with real temporary Git histories and fake GitHub/Gitea responses: failed/timed-out push, lost/failed re • specloop: complete task 2.1 • specloop: task 2.1 Implement native `speckit.finish` and its optional-head adapter seam, then branch native completion in `specloop/cli.py::_finish` while leaving OpenSpec clone/archive behavior intac • specloop: complete task 1.4 • specloop: task 1.4 Complete native context/committed-plan collection through `specloop/spec_format.py` and generic gate/context handling in `specloop/loop.py`. Reuse existing literal Human checks rule • specloop: complete task 1.3 • specloop: task 1.3 Add adapter-owned `append_round` in `specloop/spec_format.py`/`specloop/speckit.py` and route both fresh revision and candidate replay reconstruction in `specloop/revise.py` through • specloop: complete task 1.2 • specloop: task 1.2 Enable `get(m)` to return `SPECKIT` and complete native validation/paths/labels in `specloop/spec_format.py` and `specloop/speckit.py`, and native admission in `specloop/cli.py`. Us • specloop: complete task 1.1 • specloop: task 1.1 Add adapter-owned task operations in `specloop/spec_format.py` and native helpers in `specloop/speckit.py`; keep `specloop/tasks.py` unchanged. OPENSPEC delegates parse/tick/split/e • Draft OpenSpec change mattpolicastro__nightshift-issue-188-spec-kit-adapter-on-the-build-path-admit (specloop propose, round 2) • Draft OpenSpec change mattpolicastro__nightshift-issue-188-spec-kit-adapter-on-the-build-path-admit (specloop propose, round 1) • Draft OpenSpec change mattpolicastro__nightshift-issue-188-spec-kit-adapter-on-the-build-path-admit (specloop propose, round 2) • specloop: archive mattpolicastro__nightshift-issue-191-openspec-pinned-checksummed-standalone-b into openspec/specs • Merge branch 'main' into spec/mattpolicastro__nightshift-issue-185-spec-kit-house-rules-doc-and-the-nightsh • Merge pull request #195 from mattpolicastro/spec/mattpolicastro__nightshift-issue-186-spec-kit-parser-validator-and-scenario-i • specloop: archive mattpolicastro__nightshift-issue-186-spec-kit-parser-validator-and-scenario-i into openspec/specs • Merge current PR base 4b352b3701b6df53b9eff4ae8458c92e094c8593 • specloop: complete task 2.1 • specloop: task 2.1 Address review feedback 1: "**mattpolicastro:**\n\nCI `test` fails at collection on Python 3.12 (run 42422605947):\n\n```\nERROR tests/test_speckit_format.py - AttributeError: 'Fiel • specloop: append review round 1 • specloop: complete task 1.5 • specloop: task 1.5 Complete the module's pure text helpers `questions`, `human_checks` and `mark_complete`, with `test_questions_from_clarification_markers`, `test_mark_complete_is_idempotent` and foc • specloop: complete task 1.4 • specloop: task 1.4 Add `validate` to `specloop/speckit.py` with all ten design rules, deterministic `path:line: message` diagnostics, readable-input handling and aggregate minimum-content errors. Reus • specloop: complete task 1.3 • specloop: task 1.3 Add `parse_tasks` to `specloop/speckit.py`, returning the existing `Task` type with original flags, backticks and zero-based source lines. Reuse `tasks.TASK` and `tasks.SCENARIO_REF • specloop: complete task 1.2 • specloop: task 1.2 Add `specloop/speckit.py` with `feature_dir`, the small spec records, `parse_spec` and `scenario_ids`; add the three-story authored `tests/fixtures/speckit/specs/042-add-a-gate/spec • specloop: complete task 1.1 • specloop: task 1.1 Copy `spec-template.md`, `plan-template.md` and `tasks-template.md` byte-for-byte from `tests/fixtures/speckit-upstream/v1.3.2/templates/` to `tests/fixtures/speckit/.specify/templa • Draft OpenSpec change mattpolicastro__nightshift-issue-186-spec-kit-parser-validator-and-scenario-i (specloop propose, round 1) • Draft OpenSpec change mattpolicastro__nightshift-issue-186-spec-kit-parser-validator-and-scenario-i (specloop propose, round 2) • specloop: archive mattpolicastro__nightshift-issue-185-spec-kit-house-rules-doc-and-the-nightsh into openspec/specs • Merge pull request #195 from mattpolicastro/spec/mattpolicastro__nightshift-issue-186-spec-kit-parser-validator-and-scenario-i • specloop: archive mattpolicastro__nightshift-issue-186-spec-kit-parser-validator-and-scenario-i into openspec/specs • Merge current PR base 4b352b3701b6df53b9eff4ae8458c92e094c8593 • specloop: complete task 2.1 • specloop: task 2.1 Address review feedback 1: "**mattpolicastro:**\n\nCI `test` fails at collection on Python 3.12 (run 42422605947):\n\n```\nERROR tests/test_speckit_format.py - AttributeError: 'Fiel • specloop: append review round 1 • specloop: complete task 1.5 • specloop: task 1.5 Complete the module's pure text helpers `questions`, `human_checks` and `mark_complete`, with `test_questions_from_clarification_markers`, `test_mark_complete_is_idempotent` and foc • specloop: complete task 1.4 • specloop: task 1.4 Add `validate` to `specloop/speckit.py` with all ten design rules, deterministic `path:line: message` diagnostics, readable-input handling and aggregate minimum-content errors. Reus • specloop: complete task 1.3 • specloop: task 1.3 Add `parse_tasks` to `specloop/speckit.py`, returning the existing `Task` type with original flags, backticks and zero-based source lines. Reuse `tasks.TASK` and `tasks.SCENARIO_REF • specloop: complete task 1.2 • specloop: task 1.2 Add `specloop/speckit.py` with `feature_dir`, the small spec records, `parse_spec` and `scenario_ids`; add the three-story authored `tests/fixtures/speckit/specs/042-add-a-gate/spec • specloop: complete task 1.1 • specloop: task 1.1 Copy `spec-template.md`, `plan-template.md` and `tasks-template.md` byte-for-byte from `tests/fixtures/speckit-upstream/v1.3.2/templates/` to `tests/fixtures/speckit/.specify/templa • Draft OpenSpec change mattpolicastro__nightshift-issue-186-spec-kit-parser-validator-and-scenario-i (specloop propose, round 1) • Draft OpenSpec change mattpolicastro__nightshift-issue-186-spec-kit-parser-validator-and-scenario-i (specloop propose, round 2) • specloop: archive mattpolicastro__nightshift-issue-186-spec-kit-parser-validator-and-scenario-i into openspec/specs • Merge current PR base 4b352b3701b6df53b9eff4ae8458c92e094c8593 • specloop: complete task 2.1 • Merge pull request #192 from mattpolicastro/spec/mattpolicastro__nightshift-issue-187-engine-a-format-seam-with-the-openspec-a • specloop: task 2.1 Address review feedback 1: "**mattpolicastro:**\n\nCI `test` fails at collection on Python 3.12 (run 42422605947):\n\n```\nERROR tests/test_speckit_format.py - AttributeError: 'Fiel • specloop: append review round 1 • specloop: archive mattpolicastro__nightshift-issue-187-engine-a-format-seam-with-the-openspec-a into openspec/specs • Merge current PR base a61131e90689760b68983ac009283df95d116f60 • specloop: complete task 2.2 • specloop: task 2.2 Add the formats paragraph to `docs/specloop/README.md` under How the engine works, the manifest field/refusal contract to `docs/specloop/command-json.md`, and explicit OpenSpec sele • specloop: complete task 2.1 • specloop: task 2.1 Wire `[run] format` parsing in `specloop/manifest.py` with `openspec` default and retained explicit `speckit`; have `specloop/cli.py::problems_with` return the selector's exact unav • specloop: complete task 1.3 • specloop: task 1.3 Substitute adapter calls in `specloop/cli.py` and `specloop/propose.py` for validation, scenario lookup, tasks, confinement, in-flight reads, staging, PR labels and finish, includin • specloop: complete task 1.2 • specloop: task 1.2 Substitute adapter calls in `specloop/loop.py` for task paths, all scenario lookups, context copying and the retained `design_human_checks` wrapper; substitute the task path in `spe • specloop: complete task 1.1 • specloop: task 1.1 Add `specloop/spec_format.py` with the exact protocol, `OPENSPEC` and `get(m)`; add only the defaulted trailing `Manifest.format` field in `specloop/manifest.py` so selection type-c • Draft OpenSpec change mattpolicastro__nightshift-issue-187-engine-a-format-seam-with-the-openspec-a (specloop propose, round 2) • Draft OpenSpec change mattpolicastro__nightshift-issue-187-engine-a-format-seam-with-the-openspec-a (specloop propose, round 1) • specloop: merge main (4b352b37) into run branch; resolve docs/specloop/README.md • specloop: complete task 3.1 • Merge pull request #192 from mattpolicastro/spec/mattpolicastro__nightshift-issue-187-engine-a-format-seam-with-the-openspec-a • specloop: task 3.1 Address review feedback 1: "**mattpolicastro:**\n\nFor the next revision round (found by the live preset check on spec-kit 1.3.2, recorded on #184):\n\n- `presets/nightshift-speckit • specloop: append review round 2 • specloop: archive mattpolicastro__nightshift-issue-187-engine-a-format-seam-with-the-openspec-a into openspec/specs • Merge current PR base a61131e90689760b68983ac009283df95d116f60 • specloop: complete task 2.2 • specloop: task 2.2 Add the formats paragraph to `docs/specloop/README.md` under How the engine works, the manifest field/refusal contract to `docs/specloop/command-json.md`, and explicit OpenSpec sele • specloop: complete task 2.1 • specloop: task 2.1 Wire `[run] format` parsing in `specloop/manifest.py` with `openspec` default and retained explicit `speckit`; have `specloop/cli.py::problems_with` return the selector's exact unav • specloop: complete task 1.3 • specloop: task 1.3 Substitute adapter calls in `specloop/cli.py` and `specloop/propose.py` for validation, scenario lookup, tasks, confinement, in-flight reads, staging, PR labels and finish, includin • specloop: complete task 1.2 • specloop: task 1.2 Substitute adapter calls in `specloop/loop.py` for task paths, all scenario lookups, context copying and the retained `design_human_checks` wrapper; substitute the task path in `spe • specloop: complete task 1.1 • specloop: task 1.1 Add `specloop/spec_format.py` with the exact protocol, `OPENSPEC` and `get(m)`; add only the defaulted trailing `Manifest.format` field in `specloop/manifest.py` so selection type-c • Draft OpenSpec change mattpolicastro__nightshift-issue-187-engine-a-format-seam-with-the-openspec-a (specloop propose, round 2) • Draft OpenSpec change mattpolicastro__nightshift-issue-187-engine-a-format-seam-with-the-openspec-a (specloop propose, round 1)

View commits
GitHubpr merged

Spec: spec-kit: adapter on the build path (admit, run, gates, publish, finish)

Merged PR in mattpolicastro/nightshift: "Spec: spec-kit: adapter on the build path (admit, run, gates, publish, finish)"

View pull request
GitHubpr merged

Spec: OpenSpec: pinned, checksummed standalone binary replaces npx; bump to 1.16.1

Merged PR in mattpolicastro/nightshift: "Spec: OpenSpec: pinned, checksummed standalone binary replaces npx; bump to 1.16.1"

View pull request
GitHubpr merged

Spec: spec-kit: house-rules doc and the nightshift-speckit preset

Merged PR in mattpolicastro/nightshift: "Spec: spec-kit: house-rules doc and the nightshift-speckit preset"

View pull request
GitHubpr merged

Spec: spec-kit: parser, validator and scenario IDs (specloop/speckit.py)

Merged PR in mattpolicastro/nightshift: "Spec: spec-kit: parser, validator and scenario IDs (specloop/speckit.py)"

View pull request
GitHubpush

Merge pull request #192 from mattpolicastro/spec/mattpolicastro__nightshift-issue-187-engine-a-format-seam-with-the-openspec-a

Pushed 50 commits to mattpolicastro/nightshift • specloop: archive mattpolicastro__nightshift-issue-187-engine-a-format-seam-with-the-openspec-a into openspec/specs • Merge current PR base a61131e90689760b68983ac009283df95d116f60 • specloop: complete task 2.2 • specloop: task 2.2 Add the formats paragraph to `docs/specloop/README.md` under How the engine works, the manifest field/refusal contract to `docs/specloop/command-json.md`, and explicit OpenSpec sele • specloop: complete task 2.1 • specloop: task 2.1 Wire `[run] format` parsing in `specloop/manifest.py` with `openspec` default and retained explicit `speckit`; have `specloop/cli.py::problems_with` return the selector's exact unav • specloop: complete task 1.3 • specloop: task 1.3 Substitute adapter calls in `specloop/cli.py` and `specloop/propose.py` for validation, scenario lookup, tasks, confinement, in-flight reads, staging, PR labels and finish, includin • specloop: complete task 1.2 • specloop: task 1.2 Substitute adapter calls in `specloop/loop.py` for task paths, all scenario lookups, context copying and the retained `design_human_checks` wrapper; substitute the task path in `spe • specloop: complete task 1.1 • specloop: task 1.1 Add `specloop/spec_format.py` with the exact protocol, `OPENSPEC` and `get(m)`; add only the defaulted trailing `Manifest.format` field in `specloop/manifest.py` so selection type-c • Draft OpenSpec change mattpolicastro__nightshift-issue-187-engine-a-format-seam-with-the-openspec-a (specloop propose, round 2) • Draft OpenSpec change mattpolicastro__nightshift-issue-187-engine-a-format-seam-with-the-openspec-a (specloop propose, round 1) • specloop: complete task 2.1 • specloop: task 2.1 Address review feedback 1: "**mattpolicastro:**\n\nBuild review: the house rules and the preset match the approved design, and types/plugin CI pass. One wording round before finish, • specloop: append review round 1 • specloop: archive mattpolicastro__nightshift-issue-187-engine-a-format-seam-with-the-openspec-a into openspec/specs • Merge current PR base a61131e90689760b68983ac009283df95d116f60 • specloop: complete task 2.2 • specloop: task 2.2 Add the formats paragraph to `docs/specloop/README.md` under How the engine works, the manifest field/refusal contract to `docs/specloop/command-json.md`, and explicit OpenSpec sele • specloop: complete task 2.1 • specloop: task 2.1 Wire `[run] format` parsing in `specloop/manifest.py` with `openspec` default and retained explicit `speckit`; have `specloop/cli.py::problems_with` return the selector's exact unav • specloop: complete task 1.3 • specloop: task 1.3 Substitute adapter calls in `specloop/cli.py` and `specloop/propose.py` for validation, scenario lookup, tasks, confinement, in-flight reads, staging, PR labels and finish, includin • specloop: complete task 1.2 • specloop: task 1.2 Substitute adapter calls in `specloop/loop.py` for task paths, all scenario lookups, context copying and the retained `design_human_checks` wrapper; substitute the task path in `spe • specloop: complete task 1.1 • Merge pull request #193 from mattpolicastro/fixtures/speckit-upstream-templates • specloop: task 1.1 Add `specloop/spec_format.py` with the exact protocol, `OPENSPEC` and `get(m)`; add only the defaulted trailing `Manifest.format` field in `specloop/manifest.py` so selection type-c • tests: add verbatim spec-kit v1.3.2 templates for offline fixtures • Merge current PR base a61131e90689760b68983ac009283df95d116f60 • specloop: complete task 1.2 • specloop: task 1.2 Add exactly `presets/nightshift-speckit/preset.yml`, `presets/nightshift-speckit/templates/spec-template.md`, `presets/nightshift-speckit/templates/tasks-template.md`, `presets/nigh • specloop: complete task 1.1 • specloop: task 1.1 Add `docs/specloop/speckit.md` with all eight exact rule headings, reasons and examples from design.md; add the one-sentence link under `docs/specloop/README.md`'s How the engine wo • Merge pull request #193 from mattpolicastro/fixtures/speckit-upstream-templates • tests: add verbatim spec-kit v1.3.2 templates for offline fixtures • Draft OpenSpec change mattpolicastro__nightshift-issue-186-spec-kit-parser-validator-and-scenario-i (specloop propose, round 1) • Draft OpenSpec change mattpolicastro__nightshift-issue-185-spec-kit-house-rules-doc-and-the-nightsh (specloop propose, round 1) • Merge pull request #193 from mattpolicastro/fixtures/speckit-upstream-templates • tests: add verbatim spec-kit v1.3.2 templates for offline fixtures • Merge pull request #183 from mattpolicastro/spec/mattpolicastro__nightshift-issue-182-readiness-evidence-disabled-manifests-ar • specloop: complete task 1.1 • specloop: task 1.1 In one session (about 100 changed lines), add the disabled-manifest early return only inside `nightshift/specloop_intake.py::_readiness_evidence` after existing state/manifest valid • Draft OpenSpec change mattpolicastro__nightshift-issue-182-readiness-evidence-disabled-manifests-ar (specloop propose, round 2) • Draft OpenSpec change mattpolicastro__nightshift-issue-182-readiness-evidence-disabled-manifests-ar (specloop propose, round 1) • Draft OpenSpec change mattpolicastro__nightshift-issue-182-readiness-evidence-disabled-manifests-ar (specloop propose, round 2) • Draft OpenSpec change mattpolicastro__nightshift-issue-182-readiness-evidence-disabled-manifests-ar (specloop propose, round 1)

View commits
GitHubpr merged

Spec: Engine: a format seam with the OpenSpec adapter behind it (behaviour-preserving)

Merged PR in mattpolicastro/nightshift: "Spec: Engine: a format seam with the OpenSpec adapter behind it (behaviour-preserving)"

View pull request
GitHubpr merged

tests: add verbatim spec-kit v1.3.2 templates for offline fixtures

Merged PR in mattpolicastro/nightshift: "tests: add verbatim spec-kit v1.3.2 templates for offline fixtures"

View pull request
GitHubpr merged

Spec: Readiness: evidence-disabled manifests are always merge:blocked

Merged PR in mattpolicastro/nightshift: "Spec: Readiness: evidence-disabled manifests are always merge:blocked"

View pull request
GitHubissue opened

Strikethrough: a single ~ after whitespace is accepted as a closer when followed by punctuation

Opened issue in mity/md4c: "Strikethrough: a single ~ after whitespace is accepted as a closer when followed by punctuation"

View issue
Browse the archive