Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
22 changes: 22 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,28 @@ a patch.

---

## v0.28.0 — 2026-11-07

D209, from the fourth project: in a project whose checks are attested, the forge's CI reads the record it judges.

This is a minor version: a pull request whose head has no attested record, or a failed one, was green on the forge and is now red (A1, A2).

**In the engine**

- **An attested project's CI reads the record it judges** (D209): `nstack pr-check` under GitHub Actions fetches the remote's notes (`refs/notes/nstack/checks`) and judges the head as a workstation does — no record refused (A1), a failed or incomplete one refused (A2). The fetch carries the job's token in git's environment, masked for the runner, only towards GitHub and only under GitHub Actions; on a workstation the remote's own credential answers. A remote that cannot be read is a warning naming git's reason, never the silent `judged where nstack attest runs, not in CI` line it replaces.

**In your project** — 4 files, text

- **`.copier-answers.yml`**: `_commit`.
- **`.github/workflows/pull-request.yml`** (D209): the comment on `contents: read` says it covers the attested record.
- **`.nstack/handbook/07-governance.md`** §7, **`.nstack/handbook/RULES.md`** (D209): A1 and A2 are judged in CI too.

**Migration**

- **An open pull request red on `FAIL [A1] no record of the head`** after the update: run `nstack attest` on its head, push — the check reads the record again at its next run, a push or an edit of the description.

---

## v0.27.0 — 2026-11-07

D208, from the third project: a person named verifier of a test sheet must have a hand on the pull request.
Expand Down
6 changes: 3 additions & 3 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ modules, contracts, guardrails in CI. On the Django or Rails model, one command
the project, which then receives new versions on demand; no application stack is imposed.
Positioning and vocabulary: [`PRODUCT.md`](PRODUCT.md) §1.

> **Status: v0.27.0, published** on [PyPI](https://pypi.org/project/napkinstack/).
> **Status: v0.28.0, published** on [PyPI](https://pypi.org/project/napkinstack/).
> What each version changes, engine and project apart: [`CHANGELOG.md`](CHANGELOG.md).
> What is open: [`docs/governance/workstreams.md`](docs/governance/workstreams.md).

Expand Down Expand Up @@ -69,8 +69,8 @@ To try it without installing anything, or to install it from this repository ins
registry — always pinned to a release tag:

```bash
uvx --from "git+https://github.com/NapkinStack/engineering-os@v0.27.0" nstack init my-project
uv tool install "napkinstack @ git+https://github.com/NapkinStack/engineering-os@v0.27.0"
uvx --from "git+https://github.com/NapkinStack/engineering-os@v0.28.0" nstack init my-project
uv tool install "napkinstack @ git+https://github.com/NapkinStack/engineering-os@v0.28.0"
```

**Two channels, one published artefact.** The registry publishes: the PyPI artefact of a
Expand Down
2 changes: 1 addition & 1 deletion pyproject.toml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
[project]
name = "napkinstack"
version = "0.27.0"
version = "0.28.0"
description = "Engineering framework for several teams and their agents working in one repository: modules, contracts, guardrails in CI."
requires-python = ">=3.12"
license = "MIT"
Expand Down
2 changes: 1 addition & 1 deletion uv.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Loading