clone

a personal forge on plain git: static pages, stacked-diff reviews, signed local ci, repo sites and releases

Branches keep a review's number beside its status, tags their subject

cat committed 7a9e0c8
In a panel the review column wrapped its status label under the number,
and a tag's subject sat in a narrow last column, a word to a line. The
review cell doesn't wrap now, and a tag's subject follows its name.
commit
7a9e0c896ae498ee8bcc72e4606273a79fec1c0c
parent
a81976541a043c39cce699792bb5cc0f99b73690
author
cat <admin@dev.site>
ci
✓ passed in 75s, signed by cat
kind
fix risk score 1.3 of 3, Jev's estimate
review
#16 Panels with a head strip for content, and an even row hover
ci attestation
forge-attestation 1
type ci
commit 7a9e0c896ae498ee8bcc72e4606273a79fec1c0c
tree d9996f0f63c627d1e793df276f82f530d71e574b
script .forge/ci 2dbcda6e044dc4b05503abde8369e2528413d3c7
result pass
exit 0
started 2026-10-19T03:58:53Z
duration 75s
runner (not shown here; refs/notes/ci has it)
system Darwin 25.5.0 arm64
env host
log sha256:7108dd71c6b77a407421ab221cdc3d831a46e37f7cc41be02964c201a2604f77 267 lines
|pushed wip/i18n
|b34aa1e running .forge/ci: greet.sh: say what it is
|  | sh: /bin/sh
|  | ok   greet
|b34aa1e pass in 0s, signed
|pushed main
|remote: review #4: /dami/greet/reviews/4/
|pushed wip/i18n
|58eb6c5 running .forge/ci: wave at the world
|  | sh: /bin/sh
|  | FAIL greet : got 'hello, world o/', want 'hello, world'
|58eb6c5 fail in 0s, signed
|forge: 1 commit(s) did not pass
|remote: review #6: /dami/greet/reviews/6/
|pushed ana/wave
|0127888 running .forge/ci: update the test for the wave
|  | sh: /bin/sh
|  | ok   greet
|0127888 pass in 0s, signed
|remote: review #6: /dami/greet/reviews/6/
|pushed ana/wave
|warning: You appear to have cloned an empty repository.
|site home: deployed e24779a -> /sites/ana/dotfiles/home/
|created ana/notes
|remote: review #1: /ana/notes/reviews/1/
|pushed ana/todo
|landing #1 A todo list: ana/todo -> main
|1a2f7f1 running .forge/ci: web, server and Python versions of greet
|  | sh: /bin/sh
|  | ok   greet
|1a2f7f1 pass in 0s, signed
|pushed main
|bb7cdcf running .forge/ci: messages: notes for the later regions
|  | sh: /bin/sh
|  | ok   greet
|bb7cdcf pass in 0s, signed
|remote: review #7: /dami/greet/reviews/7/
|pushed dami/regions
|created dami/forge
|warning: You appear to have cloned an empty repository.
|site guide: mkdir -p guide/fonts && cp site/assets/fonts/*.woff2 guide/fonts/
|site guide: deployed 79e9869 -> /sites/dami/forge/guide/
|(node:8117) ExperimentalWarning: stripTypeScriptTypes is an experimental feature and might change at any time
|(Use `node --trace-warnings ...` to show where the warning was created)
|built ana/dotfiles in 1s -> /var/folders/b4/mv8w4c8j0zj0_mldppxdbdw00000gn/T/forge-ci.qR3Pi6/wt/demo/root/.forge/www
|(node:8244) ExperimentalWarning: stripTypeScriptTypes is an experimental feature and might change at any time
|(Use `node --trace-warnings ...` to show where the warning was created)
|built ana/notes in 0s -> /var/folders/b4/mv8w4c8j0zj0_mldppxdbdw00000gn/T/forge-ci.qR3Pi6/wt/demo/root/.forge/www
|(node:8384) ExperimentalWarning: stripTypeScriptTypes is an experimental feature and might change at any time
|(Use `node --trace-warnings ...` to show where the warning was created)
|built dami/forge in 1s -> /var/folders/b4/mv8w4c8j0zj0_mldppxdbdw00000gn/T/forge-ci.qR3Pi6/wt/demo/root/.forge/www
|(node:8517) ExperimentalWarning: stripTypeScriptTypes is an experimental feature and might change at any time
|(Use `node --trace-warnings ...` to show where the warning was created)
|built dami/greet in 1s -> /var/folders/b4/mv8w4c8j0zj0_mldppxdbdw00000gn/T/forge-ci.qR3Pi6/wt/demo/root/.forge/www
|(node:9183) ExperimentalWarning: stripTypeScriptTypes is an experimental feature and might change at any time
|(Use `node --trace-warnings ...` to show where the warning was created)
|built - in 0s -> /var/folders/b4/mv8w4c8j0zj0_mldppxdbdw00000gn/T/forge-ci.qR3Pi6/wt/demo/root/.forge/www
|234 of 234 pages render the same without 11ty
|guide: 8 files, links ok
|ok

Signature: good, cat

1 file changed, +6 -2
Msite/repo/refs.njk8++++++--
M site/repo/refs.njk +6 -2
@@ -7,11 +7,15 @@ pagination:
77 {% import "ui.njk" as ui %}88 {% set u = p.repo.urls %}99 {% block content %}10+{% css %}11+/* A tag's name, in ink like a branch's, then its commit's subject. */12+td.tag > a:first-child { font-family: var(--mono); font-size: var(--text-sm); }13+{% endcss %}1014 {% set head %}<b>branches</b><span class="n">{{ p.branches.length }}</span>{% endset %}1115 {% call ui.panel(head) %}1216 {% call ui.listTable() %}1317 {% for b in p.branches %}14-<tr><td class="main mono"><a href="{{ u.tree(b.name).href }}">{{ b.name }}</a>{% if b.isDefault %} <span class="desc">default</span>{% endif %}</td><td class="date">{{ b.date | date }}</td><td class="nowrap hide-sm">{{ b.author }}</td><td class="num">{{ ('' ~ b.behind + ' behind') if not b.isDefault else '' }}</td><td class="num">{{ ('' ~ b.ahead + ' ahead') if not b.isDefault else '' }}</td><td>{% if b.review %}<a href="{{ u.review(b.review.id).href }}">#{{ b.review.id }}</a> {{ m.status(b.review.status) }}{% endif %}</td></tr>18+<tr><td class="main mono"><a href="{{ u.tree(b.name).href }}">{{ b.name }}</a>{% if b.isDefault %} <span class="desc">default</span>{% endif %}</td><td class="date">{{ b.date | date }}</td><td class="nowrap hide-sm">{{ b.author }}</td><td class="num">{{ ('' ~ b.behind + ' behind') if not b.isDefault else '' }}</td><td class="num">{{ ('' ~ b.ahead + ' ahead') if not b.isDefault else '' }}</td><td class="nowrap">{% if b.review %}<a href="{{ u.review(b.review.id).href }}">#{{ b.review.id }}</a> {{ m.status(b.review.status) }}{% endif %}</td></tr>1519 {% endfor %}1620 {% endcall %}1721 {% endcall %}
@@ -20,7 +24,7 @@ pagination:
2024 {% call ui.panel(head) %}2125 {% call ui.listTable() %}2226 {% for t in p.tags %}23-<tr><td class="main mono">{{ t.sha | commitLink(p.repo, t.name) | safe }}</td><td class="date">{{ t.date | date }}</td><td class="hide-sm">{{ t.subject }}</td></tr>27+<tr><td class="main tag">{{ t.sha | commitLink(p.repo, t.name) | safe }} <span class="desc">{{ t.subject }}</span></td><td class="date">{{ t.date | date }}</td></tr>2428 {% endfor %}2529 {% endcall %}2630 {% endcall %}