lilleman
352de29013
Retire shell-context and render the dashboard from ctx.chrome
CI / full-gate (push) Successful in 3m18s
2026-10-31 08:37:45 +01:00
lilleman
de4eb7d9ee
Record the reading cost of the previous chunk
2026-10-31 08:37:45 +01:00
lilleman
4e7d897516
Answer prose round 1: 0 🔴 , 4 🟡 (0 misread); document the e2e typecheck, tighten comments and changelog
2026-10-31 08:24:18 +01:00
lilleman
520d2c928d
Visual E2E at five viewports, typecheck e2e-tests in the gate, drop unused icons
CI / full-gate (push) Successful in 3m29s
2026-10-31 08:20:16 +01:00
lilleman
6815caa47e
Answer prose round 1: 0 🔴 , 4 🟡 (0 misread); drop the false header bullet, match the changelog and test wording
2026-10-31 02:04:47 +01:00
lilleman
2ab482e774
Keep the mobile nav reachable on engines without :has(), and fix the stylesheet header
CI / full-gate (push) Successful in 3m8s
2026-10-31 01:49:13 +01:00
lilleman
c12fd2742f
Answer stability round 2: 0 🔴 , 2 🟡 (0 misread); make the order check able to fail, measure the page button, brand mark and forced dark
2026-10-31 01:34:42 +01:00
lilleman
a190166421
Answer stability round 1: 1 🔴 , 6 🟡 (0 misread); hide the theme switch after its base rule, hide inert nav toggles, test the rendered result
2026-10-31 01:32:26 +01:00
lilleman
635006b5fc
Show the whole nav tree without :has(), raise text contrast to 4.5:1, drop unused auth rules
CI / full-gate (push) Successful in 3m1s
2026-10-31 01:24:34 +01:00
lilleman
e9a7c0e726
Answer stability round 1: 0 🔴 , 2 🟡 (0 misread); explain the failure correctly and test each stylesheet
2026-10-31 01:07:30 +01:00
lilleman
7e3e8acb28
Give every palette colour a hex value an engine without oklch can read
CI / full-gate (push) Successful in 3m5s
2026-10-31 01:00:42 +01:00
lilleman
44a777dc3f
Answer stability round 1: 1 🔴 , 0 🟡 (0 misread); share no page
2026-10-30 21:32:56 +01:00
lilleman
1dfc6aac3a
Set Cache-Control on every rendered page, and record the CSRF token's unbinding
CI / full-gate (push) Successful in 3m23s
2026-10-30 21:28:14 +01:00
lilleman
16873662b9
Keep the reader in place when the drawer closes, and stop the CSS promising a header it deleted
2026-09-10 16:16:35 +02:00
lilleman
53ab35bfb8
A page is a document: drop the sticky chrome and the bounded-frame opt-out
2026-09-10 16:16:35 +02:00
lilleman
41aa59d05d
One home per fact: cut the copied rationale, and give the seam test room to mean something
2026-09-10 16:16:35 +02:00
lilleman
696da397e7
Split the fill seam where ownership splits: the shell bounds, the page fills
2026-09-10 16:16:35 +02:00
lilleman
7f2c0cc2c2
Name the bounded frame: fill:true on the shell, and the contract minor that ships it
2026-09-10 16:16:35 +02:00
lilleman
54956fe627
Release the gate change as 0.3.0, and start a changelog
CI / full-gate (push) Successful in 2m50s
Mirror / github-mirror (push) Successful in 4s
Release / retag-image (push) Successful in 22s
Release / publish-overview (push) Successful in 3s
2026-09-03 17:58:09 +02:00
lilleman
18dc4f3136
Refuse an emailless identity where the session is minted, and rows the upstream should not have sent
CI / full-gate (push) Successful in 2m53s
2026-09-02 18:24:56 +02:00
lilleman
6a0d11d9d3
Name exactly one gate on every declaration, and own a shift by identity id
2026-09-02 14:00:04 +02:00
lilleman
dfb043c3bd
Read one gate everywhere, and check a declaration's gate in one pass
2026-09-02 12:32:51 +02:00
lilleman
bf146c07e7
Bump the contract for the new gate, and close the ways it could read as open
CI / full-gate (push) Successful in 2m45s
2026-09-02 08:36:16 +02:00
lilleman
a17ed96b54
Say gate where the code now gates, in the two contracts that still said permission
CI / full-gate (push) Failing after 2m38s
2026-09-02 08:17:10 +02:00
lilleman
c7e6d66750
Scope My shifts at the upstream, and give Route and NavNode one gate declaration
CI / full-gate (push) Successful in 2m56s
2026-09-02 08:15:08 +02:00
lilleman
8da75b4ca7
Gate a route or nav node on a session, not only a permission
CI / full-gate (push) Successful in 3m6s
2026-09-02 07:36:08 +02:00
lilleman
f4693af3df
Let a multi-select say what a capped list left out, inside the panel
CI / full-gate (push) Successful in 2m52s
2026-08-25 09:15:30 +02:00
lilleman
c702a347dc
Offer a long filter list as a popover multi-select instead of a wall of chips
CI / full-gate (push) Successful in 2m51s
2026-08-25 09:10:23 +02:00
lilleman
fa7cad1d65
Declare plugin settings in the manifest, resolve them from the environment
2026-08-23 13:17:03 +02:00
lilleman
cbf55bebae
Give each version mismatch its own remedy, and stop publishing a moving bare-major tag
2026-08-22 12:27:43 +02:00
lilleman
9e0cb26b3e
Refuse a 0.x minor mismatch, and republish the overview from the named release's tree
2026-08-22 12:13:41 +02:00
lilleman
8fd492e544
Scope the sidecar trailer by package so a mixed branch cannot lose it
2026-08-22 12:01:35 +02:00
lilleman
bfcf4ed072
Trim the prose to what is true now
2026-08-22 11:24:16 +02:00
lilleman
a3d9a3df5f
Keep the release at v0.1.0 — nothing consumed the old contract
2026-08-22 11:21:42 +02:00
lilleman
d545445ea8
Release this as v0.2.0, and give the Hub overview its own job, token and template
2026-08-20 23:32:10 +02:00
lilleman
c35ba3fb4e
Make the plugin contract version the release version, and publish the Docker Hub overview from CI
2026-08-20 23:16:11 +02:00
lilleman
e0046e5068
Warn rather than refuse on a storage URL mismatch, and scrub the provisioning DSN before discovery
2026-08-19 01:03:40 +02:00
lilleman
5589472e25
Keep role re-assertion within a non-superuser provisioner's rights, and test the second boot
2026-08-19 00:44:49 +02:00
lilleman
e66a8a3e89
Isolate the storage CI stack, prove least-privilege provisioning, drop the secret before discovery
2026-08-19 00:20:17 +02:00
lilleman
060535c8ab
Confine the Postgres driver to bootstrap, bound plugin connections, and gate the storage DDL
2026-08-19 00:08:35 +02:00
lilleman
d2211cf75a
Refuse a throwaway plugin storage secret in bootstrap, before any role is created
2026-08-18 23:24:34 +02:00
lilleman
c7013be2f0
Give a plugin a Postgres database of its own
2026-08-18 23:12:13 +02:00
lilleman
8f3fc7414a
Hint the code field's digits-only rule, so the browser's refusal isn't bare
2026-08-18 22:07:12 +02:00
lilleman
65e76b69fd
Refuse a stray package.json or node_modules in config/ by name
2026-08-18 21:55:32 +02:00
lilleman
cb59eee76d
Refuse a node_modules at the plugins/ root, where it outranks the host's
2026-08-18 08:14:21 +02:00
lilleman
82af77356f
Follow symlinked plugin folders, and keep a plugin .npmrc out of the image
2026-08-18 07:49:51 +02:00
lilleman
94dc581593
Fail loud on a null package.json and a stray plugins/package.json
2026-08-17 22:50:29 +02:00
lilleman
453058c67b
Refuse a shadowing barrel copy, and record the packaging contract
2026-08-17 22:34:56 +02:00
lilleman
af974cfa36
Let a plugin carry its own package.json and npm dependencies
2026-08-17 22:23:53 +02:00
lilleman
a005acb93d
Cut non-essential prose from docs and comments, and require the same of every future change
...
CI / full-gate (push) Successful in 2m38s
README loses the competitor comparison, the personas and the repeated philosophy; the
five near-identical E2E command blocks become a table plus one command, and the file
map a clause per entry. AGENTS.md keeps every decision but drops the narrative around
them. todo.md's completed items collapse to their task line — git holds the rest.
Comments lose restatement, README duplication and history ("used to", "originally",
dated notes). AGENTS.md gains a Prose discipline section making this a standing pass on
every change rather than a one-off cleanup.
src/compose.test.ts now expects 6 documented E2E run commands, not 10, since the README
states the command once instead of per suite.
2026-08-05 23:41:12 +02:00