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
8 changes: 8 additions & 0 deletions .github/workflows/deploy-site.yml
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,14 @@ jobs:
- name: Checkout
uses: actions/checkout@v4

- name: Configure Pages
# Pin the Pages source to GitHub Actions (build_type=workflow); enables
# Pages if needed. Without this, deploy-pages fails when the repo is
# still set to "Deploy from a branch".
uses: actions/configure-pages@v5
with:
enablement: true

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 Use a PAT/App token for Pages enablement

In the workflow I inspected, this step does not pass token:, so actions/configure-pages@v5 uses its default github.token. The action's own action.yml says enablement requires a token other than GITHUB_TOKEN; when the repo is still set to “Deploy from a branch” or Pages is not enabled, the enable/configure API call is rejected and the build fails before artifact upload instead of self-healing. Either pass a PAT/GitHub App token with the required Pages/admin permissions or leave enablement off and require manual Pages source setup.

Useful? React with 👍 / 👎.


- name: Setup Node
uses: actions/setup-node@v4
with:
Expand Down
30 changes: 13 additions & 17 deletions site/src/pages/index.astro
Original file line number Diff line number Diff line change
Expand Up @@ -99,7 +99,7 @@ const CAPABILITIES = [
{/* ---------------------------------------------------------------- */}
<section class="hero">
<div class="wrap">
<p class="eyebrow">Legis · git/CI governance &amp; attestations · {me.lang}</p>
<p class="weft-eyebrow">Legis · git/CI governance &amp; attestations · {me.lang}</p>
<h1 class="hero__title">One attributable, tamper-evident record — instead of a silent pass.</h1>
<p class="hero__sub">
Every agent action at the git/CI boundary that breaks a policy produces exactly one
Expand Down Expand Up @@ -136,7 +136,7 @@ const CAPABILITIES = [
{/* ---------------------------------------------------------------- */}
<section class="band">
<div class="wrap">
<p class="eyebrow">What it is</p>
<p class="weft-eyebrow">What it is</p>
<h2 class="h2">The federation&rsquo;s governance surface — the one judge.</h2>
<p class="lede">
Legis is the Weft authority for change provenance and governance over change: it answers
Expand All @@ -158,7 +158,7 @@ const CAPABILITIES = [
{/* ---------------------------------------------------------------- */}
<section id="cells" class="section">
<div class="wrap">
<p class="eyebrow">The governance 2×2 · graded enforcement</p>
<p class="weft-eyebrow">The governance 2×2 · graded enforcement</p>
<h2 class="h2">When a policy fires, the cell decides who answers.</h2>
<p class="lede">
Two independent, agent-set axes: how much governance <strong>structure</strong> you want
Expand All @@ -185,7 +185,7 @@ const CAPABILITIES = [
{/* ---------------------------------------------------------------- */}
<section class="band">
<div class="wrap">
<p class="eyebrow">Key capabilities</p>
<p class="weft-eyebrow">Key capabilities</p>
<h2 class="h2">What it gives an agent at the boundary.</h2>
<div class="grid grid--2">
{CAPABILITIES.map((c) => (
Expand All @@ -203,7 +203,7 @@ const CAPABILITIES = [
{/* ---------------------------------------------------------------- */}
<section class="section">
<div class="wrap">
<p class="eyebrow">Usage snapshot</p>
<p class="weft-eyebrow">Usage snapshot</p>
<h2 class="h2">Legis runs as a service; agents drive it over MCP.</h2>
<p class="lede">
A curated quick-start, not the full surface. The complete CLI (nine subcommands) and the
Expand Down Expand Up @@ -238,7 +238,7 @@ const CAPABILITIES = [
{/* ---------------------------------------------------------------- */}
<section class="band">
<div class="wrap">
<p class="eyebrow">How it composes · {me.name}&rsquo;s pairings</p>
<p class="weft-eyebrow">How it composes · {me.name}&rsquo;s pairings</p>
<h2 class="h2">Each pair lights up a capability neither tool has alone.</h2>
<p class="lede">
Legis is a <strong>consumer</strong> of identity, never an authority, and never re-adjudicates
Expand Down Expand Up @@ -273,7 +273,7 @@ const CAPABILITIES = [
{/* ---------------------------------------------------------------- */}
<section class="section">
<div class="wrap">
<p class="eyebrow">Status &amp; honest limits</p>
<p class="weft-eyebrow">Status &amp; honest limits</p>
<h2 class="h2">What it is, and what it is not.</h2>
<p class="lede">
Legis is at <code>v1.0.0</code> — the gold release; all four 2×2 cells work end-to-end. It is a
Expand All @@ -299,7 +299,7 @@ const CAPABILITIES = [
{/* ---------------------------------------------------------------- */}
<section class="band">
<div class="wrap">
<p class="eyebrow">Links &amp; pointers</p>
<p class="weft-eyebrow">Links &amp; pointers</p>
<h2 class="h2">The authoritative surfaces.</h2>
<ul class="links">
<li><a href={REPO} rel="noopener">Repository</a> <span class="links__dim">— authority for the endpoint list and policy grammar (<code>README.md</code>, <code>src/legis/mcp.py</code>, <code>CHANGELOG.md</code>)</span></li>
Expand Down Expand Up @@ -338,25 +338,21 @@ const CAPABILITIES = [
Legis's thread color is read via --member-legis (walnut) from the kit. */
.wrap { max-width: var(--width-content); margin: 0 auto; padding: 0 36px; }
.nowrap { white-space: nowrap; }
.eyebrow {
font: var(--type-mono-sm); text-transform: uppercase;
letter-spacing: var(--tracking-caps); color: var(--text-muted);
font-size: var(--text-xs); margin: 0 0 14px;
}
.weft-eyebrow { margin: 0 0 14px; }
.h2 { font: var(--type-h1); color: var(--text-strong); margin: 0 0 16px; max-width: 26ch; }
.lede { font: var(--type-body); color: var(--text-body); max-width: 64ch; margin: 0 0 26px; }
.lede code, .pair__cap code, .limits code, .links code, .cta__sub code,
.terminal__cap code { font-family: var(--font-mono); font-size: 0.92em; color: var(--text-strong); }

.section { padding: 64px 0; }
.section { padding: var(--space-10) 0; }
.band {
padding: 64px 0; background: var(--bg-sunken);
padding: var(--space-10) 0; background: var(--bg-sunken);
border-top: 1px solid var(--border-hairline);
border-bottom: 1px solid var(--border-hairline);
}

/* hero */
.hero { padding: 78px 0 64px; border-bottom: 1px solid var(--border-hairline); }
.hero { padding: 78px 0 var(--space-10); border-bottom: 1px solid var(--border-hairline); }
.hero__title {
font: var(--type-display); color: var(--member-legis);
letter-spacing: -0.025em; line-height: 1.05;
Expand Down Expand Up @@ -431,7 +427,7 @@ const CAPABILITIES = [
/* cta strip */
.cta { padding: 40px 0; background: var(--bg-sunken); border-top: 1px solid var(--border-hairline); }
.cta__inner { display: flex; align-items: center; gap: 16px; flex-wrap: wrap; }
.cta__dot { width: 12px; height: 12px; border-radius: 3px; flex: none; box-shadow: inset 0 0 0 1px rgba(0,0,0,.08); }
.cta__dot { width: 12px; height: 12px; border-radius: var(--radius-sm); flex: none; box-shadow: inset 0 0 0 1px var(--border-hairline); }
.cta__copy { flex: 1 1 360px; }
.cta__lead { font: var(--type-body); font-weight: var(--fw-semibold); color: var(--text-strong); margin: 0 0 2px; }
.cta__sub { font: var(--type-body-sm); color: var(--text-muted); margin: 0; }
Expand Down
Loading