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
14 changes: 7 additions & 7 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -26,9 +26,9 @@ proposed improvements to the durable recipe that guides the next run.

**Start on your machine. Keep the evidence. Improve the process.**

> **Early preview.** The current Go source supports ticket analysis, approved execution,
> **Early release.** The current Go source supports ticket analysis, approved execution,
> verification and separately approved draft PRs, also available in the downloadable
> `0.2.0-preview.2` prerelease. Merge, deployment and issue closure
> `v0.3.1` release. Merge, deployment and issue closure
> remain manual. GitHub is the only supported tracker; GitLab, Jira and outside
> reviewers are post-v1.

Expand Down Expand Up @@ -60,20 +60,20 @@ The **Lab runs Molecules**; each Molecule is **Atoms arranged by a Formula**.

## Get started

Install the compiled preview for **macOS or Linux**, on **arm64 or amd64**.
Install the compiled release for **macOS or Linux**, on **arm64 or amd64**.
No Node, Go or source checkout is required to install it.

**[Installation guide →](docs/install.md)** — prerequisites, PATH, upgrades and rollback.

<details>
<summary>One-line installer · pinned to 0.2.0-preview.2</summary>
<summary>One-line installer · pinned to v0.3.1</summary>

```sh
sh -c 'set -eu; script=$(mktemp "${TMPDIR:-/tmp}/forgecell-bootstrap.XXXXXXXX") || { echo "Forgecell: cannot create bootstrap temporary file." >&2; exit 1; }; trap '"'"'rm -f "$script"'"'"' 0; trap '"'"'exit 1'"'"' HUP INT TERM; curl -fsSL --proto "=https" --proto-redir "=https" --connect-timeout 15 --max-time 30 https://github.com/DanielNetzer/forgecell/releases/download/v0.2.0-preview.2/install.sh -o "$script" || { echo "Forgecell: bootstrap download failed." >&2; exit 1; }; [ -s "$script" ] || { echo "Forgecell: bootstrap download was empty." >&2; exit 1; }; sh "$script"'
sh -c 'set -eu; script=$(mktemp "${TMPDIR:-/tmp}/forgecell-bootstrap.XXXXXXXX") || { echo "Forgecell: cannot create bootstrap temporary file." >&2; exit 1; }; trap '"'"'rm -f "$script"'"'"' 0; trap '"'"'exit 1'"'"' HUP INT TERM; curl -fsSL --proto "=https" --proto-redir "=https" --connect-timeout 15 --max-time 30 https://github.com/DanielNetzer/forgecell/releases/download/v0.3.1/install.sh -o "$script" || { echo "Forgecell: bootstrap download failed." >&2; exit 1; }; [ -s "$script" ] || { echo "Forgecell: bootstrap download was empty." >&2; exit 1; }; sh "$script"'
```

The installer verifies the executable checksum and version before activation and
preserves local Lab data. This command pins the published public-core prerelease.
preserves local Lab data. This command pins the published public-core v0.3.1 release.
Checksums share the binaries’ GitHub HTTPS endpoint; they are not independent signatures.

</details>
Expand Down Expand Up @@ -110,7 +110,7 @@ sample repository with a deterministic stub harness. It needs only Git and Go on
no API key, no GitHub token, no network and no repository of your own, and it publishes
nothing.

The `0.2.0-preview.2` prerelease defaults to a distinct private Lab for each checkout
The `v0.3.1` release defaults to a distinct private Lab for each checkout
under `~/.forgecell/labs/`; `forgecell doctor --json` reports the exact location.
Existing preview.1 checkout Labs remain intact: use the same `--lab .forgecell` path
for every command to keep using one. Labs and saved bindings are not automatically
Expand Down
12 changes: 6 additions & 6 deletions docs/install.md
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
# Install Forgecell CLI

Public CLI `0.2.0-preview.2` prerelease; core source licensed under the [MIT License](../LICENSE). No repository access, Node or Go is needed to install.
Public CLI `v0.3.1` release; core source licensed under the [MIT License](../LICENSE). No repository access, Node or Go is needed to install.

```sh
sh -c 'set -eu; script=$(mktemp "${TMPDIR:-/tmp}/forgecell-bootstrap.XXXXXXXX") || { echo "Forgecell: cannot create bootstrap temporary file." >&2; exit 1; }; trap '"'"'rm -f "$script"'"'"' 0; trap '"'"'exit 1'"'"' HUP INT TERM; curl -fsSL --proto "=https" --proto-redir "=https" --connect-timeout 15 --max-time 30 https://github.com/DanielNetzer/forgecell/releases/download/v0.2.0-preview.2/install.sh -o "$script" || { echo "Forgecell: bootstrap download failed." >&2; exit 1; }; [ -s "$script" ] || { echo "Forgecell: bootstrap download was empty." >&2; exit 1; }; sh "$script"'
sh -c 'set -eu; script=$(mktemp "${TMPDIR:-/tmp}/forgecell-bootstrap.XXXXXXXX") || { echo "Forgecell: cannot create bootstrap temporary file." >&2; exit 1; }; trap '"'"'rm -f "$script"'"'"' 0; trap '"'"'exit 1'"'"' HUP INT TERM; curl -fsSL --proto "=https" --proto-redir "=https" --connect-timeout 15 --max-time 30 https://github.com/DanielNetzer/forgecell/releases/download/v0.3.1/install.sh -o "$script" || { echo "Forgecell: bootstrap download failed." >&2; exit 1; }; [ -s "$script" ] || { echo "Forgecell: bootstrap download was empty." >&2; exit 1; }; sh "$script"'
```

The command downloads the bootstrap over HTTPS before executing it. A failed download
Expand Down Expand Up @@ -126,7 +126,7 @@ a Molecule's delivery and exits nonzero unless they passed.
and authentication checks; it does not prove model access or repository policy
readiness. `forgecell --help` lists every command and flag.

The `0.2.0-preview.2` prerelease uses a distinct directory under `~/.forgecell/labs/`
The `v0.3.1` release uses a distinct directory under `~/.forgecell/labs/`
for each checkout by default; `forgecell doctor --json` reports the exact location.
Existing preview.1 checkout Labs in the ignored `.forgecell` directory are left
intact. Use the same `--lab .forgecell` path for every command to continue using one;
Expand All @@ -136,7 +136,7 @@ path such as the example above keeps records outside the checkout.

## Versions, upgrade and rollback

The command above pins `0.2.0-preview.2`. Repeating it safely reinstalls that version. For another GitHub release, use its matching versioned installer; `FORGECELL_VERSION` overrides require the generic `FORGECELL_RELEASE_BASE` layout. Review release notes before upgrading.
The command above pins `v0.3.1`. v0.3.1 is the first release that drives the whole loop from `forgecell ui`. Repeating it safely reinstalls that version. For another GitHub release, use its matching versioned installer; `FORGECELL_VERSION` overrides require the generic `FORGECELL_RELEASE_BASE` layout. Review release notes before upgrading.

`forgecell rollback` restores the previous verified installation when one exists. Installation preserves Formulas and ledgers, stores versioned executables under `~/.forgecell/releases`, and refuses conflicting unmanaged launchers.

Expand Down Expand Up @@ -202,9 +202,9 @@ Native maintainers use [the distribution design](design/native-cli-distribution.

## Published public-core release and legacy provenance

The published [v0.2.0-preview.2 prerelease](https://github.com/DanielNetzer/forgecell/releases/tag/v0.2.0-preview.2)
The pinned installer uses `DanielNetzer/forgecell` and the `v0.3.1` tag.
The earlier published [v0.2.0-preview.2 prerelease](https://github.com/DanielNetzer/forgecell/releases/tag/v0.2.0-preview.2)
was built from public-core source `801a9846fc9066dde985bb678348cac2bc89a249`.
The pinned installer uses `DanielNetzer/forgecell` and the `v0.2.0-preview.2` tag.
Installation requires no GitHub token, Git, gh, Go or Node.

The legacy `DanielNetzer/forgecell-releases` preview `0.2.0-preview.1` used an
Expand Down
2 changes: 1 addition & 1 deletion scripts/test-native-installer.py
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@
assert binary.with_name(binary.name + '.sha256').read_text().strip() == hashlib.sha256(binary.read_bytes()).hexdigest()
assert (release_root / 'install.sh').read_bytes() == (release_root / versions[-1] / 'install.sh').read_bytes()
print('PASS: all four packages, license, notices and rendered version/tag pins')
public_url = 'https://github.com/DanielNetzer/forgecell/releases/download/v0.2.0-preview.2/install.sh'
public_url = 'https://github.com/DanielNetzer/forgecell/releases/download/v0.3.1/install.sh'
def documented_command(path):
commands = [block.strip() for block in re.findall(r'```sh\n(.*?)\n```', path.read_text(), re.S) if public_url in block]
assert len(commands) == 1, f'{path}: expected one public install command'
Expand Down
Loading