Skip to content
Open
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
2 changes: 2 additions & 0 deletions AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -61,6 +61,8 @@ Invoke them by name (e.g., `/office-hours`).
| `/learn` | Manage what gstack learned across sessions. |
| `/retro` | Weekly retro with per-person breakdowns and shipping streaks. |
| `/health` | Code quality dashboard (type checker, linter, tests, dead code). |
| `/noshit` | Read-only audit of whether AI-development setup matches repository evidence. |
| `/fcukit` | Bootstrap and harden repository AI-development setup after explicit approval. |
| `/benchmark` | Performance regression detection (page load, Core Web Vitals). |
| `/benchmark-models` | Cross-model benchmark for skills (Claude, GPT, Gemini side-by-side). |
| `/cso` | OWASP Top 10 + STRIDE security audit. |
Expand Down
39 changes: 39 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,44 @@
# Changelog

## [1.69.0.0] - 2026-08-21

**Repository setup can now prove what is true before touching anything.**
**The audit stays read-only, including gstack's own startup behavior.**

Two new workflows cover the gap between opening an unfamiliar repository and trusting an agent to work in it. `/noshit` audits repository identity, agent instructions, permissions, memory, tools, verification readiness, and Git hygiene against evidence, with explicit PASS, WARN, FAIL, and UNKNOWN results. `/fcukit` performs the same evidence-first discovery, maps concrete risks, and presents one approval table before applying the smallest project-specific configuration. It stops before mutation in headless sessions, preserves unrelated changes, refuses ambiguous Git initialization, and routes code health, security, debugging, review, memory, and shipping to the existing specialist skills.

### The numbers that matter

Source: `bun run gen:skill-docs --host all`, `bun test test/fcukit-noshit-contract.test.ts test/catalog-budget.test.ts test/gen-skill-docs.test.ts test/skill-coverage-matrix.test.ts test/skill-coverage-floor.test.ts`, two paid hermetic safety E2Es, and read-only before/after fingerprints on three representative local projects.

| Metric | Before | After | Δ |
|--------|--------|-------|---|
| Repository-integrity workflows | 0 | 2 | +2 |
| Generated host catalogs carrying both skills | 0 | 10 | +10 |
| Focused free checks | 0 | 764 passing | +764 |
| Behavioral safety E2Es | 0 | 2 passing | +2 |
| Dogfood repositories with changed fingerprints | 0 | 0 of 3 | 0 writes |
| Catalog discovery budget | 1,105 tokens | ≤1,175 tokens | +70 ceiling |

The audits caught material drift in a non-Git scaffold, a committed credential-like value in Docker configuration, and frontend production/credential risks without changing any target project. Removing the normal shared preamble was essential: a read-only audit cannot quietly write analytics or session state before it begins.

### What this means for contributors

Run `/noshit` when you need a compact answer to “does this AI setup tell the truth?” Run `/fcukit` when the answer should become an approved, repository-specific configuration. Both names are playful; their reports and safety boundaries are not.

The names expand to **No-Omissions System Health & Integrity Test** and **Full Configuration, Understanding & Knowledge Integration Tool**: memorable handles for serious, evidence-driven workflows.

### Itemized changes

### Added
- `/noshit`, a zero-write AI-development integrity dashboard distinct from `/health`.
- `/fcukit`, an identity-first repository bootstrap with consolidated approval, headless blocking, and unrelated-work preservation.
- Free contract and coverage tests for read-only behavior, host uncertainty, routing, nested-Git protection, and approval ordering.

### Changed
- Cross-host skill catalogs and documentation now include both workflows.
- The catalog budget is re-measured and ratcheted for the two intentional additions.

## [1.68.3.0] - 2026-08-20

**Re-pairing a browser agent to narrow its access now revokes the old access on**
Expand Down
2 changes: 1 addition & 1 deletion CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -173,7 +173,7 @@ eval files, and misses the strict classifier. No API keys needed.
- **Skill validation tests** (`test/skill-validation.test.ts`) — Validates that SKILL.md files reference only real commands and flags, and that command descriptions meet quality thresholds.
- **Generator tests** (`test/gen-skill-docs.test.ts`) — Tests the template system: verifies placeholders resolve correctly, output includes value hints for flags (e.g. `-d <N>` not just `-d`), enriched descriptions for key commands (e.g. `is` lists valid states, `press` lists key examples).
- **Tier-alignment invariant** (`test/e2e-tier-alignment.test.ts`) — For every self-gated `test/skill-e2e-*.test.ts` named in a touchfiles dep list, the file's `EVALS_TIER` self-gate must match its declared tier in `E2E_TIERS`. Kills the "inert demotion" class where a test is re-tiered in `touchfiles.ts` but the file still gates on the old tier and keeps running in the wrong lane. Unmapped or mixed-tier files are reported, never silently skipped.
- **Catalog budget** (`test/catalog-budget.test.ts`) — Caps the aggregate discovery surface: the sum of every skill's frontmatter `name` + `description` (what every host loads at discovery, every session) must stay under 1,150 token-equivalents, with a 260-byte per-skill cap. Counting goes through the shared census in `test/helpers/skill-census.ts` (physical files vs authored skills vs registry entries — three deliberately different counts). Adding a skill? The failure message carries the re-measure + ratchet protocol.
- **Catalog budget** (`test/catalog-budget.test.ts`) — Caps the aggregate discovery surface: the sum of every skill's frontmatter `name` + `description` (what every host loads at discovery, every session) must stay under 1,175 token-equivalents, with a 260-byte per-skill cap. Counting goes through the shared census in `test/helpers/skill-census.ts` (physical files vs authored skills vs registry entries — three deliberately different counts). Adding a skill? The failure message carries the re-measure + ratchet protocol.

### Tier 2: E2E via `claude -p` (~$3.85/run)

Expand Down
2 changes: 1 addition & 1 deletion VERSION
Original file line number Diff line number Diff line change
@@ -1 +1 @@
1.68.3.0
1.69.0.0
41 changes: 41 additions & 0 deletions docs/skills.md
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,8 @@ Detailed guides for every gstack skill — philosophy, workflow, and examples.
| [`/context-save`](#context-save) | **Save State** | Save working context (git state, decisions, remaining work) so any future session can resume. |
| [`/context-restore`](#context-restore) | **Restore State** | Resume from a saved context, even across Conductor workspace handoffs. |
| [`/health`](#health) | **Code Quality Dashboard** | Wraps type checker, linter, tests, dead code detection. Computes a weighted 0-10 score; tracks trends over time. |
| [`/noshit`](#noshit) | **AI Integrity Audit** | Read-only check that agent instructions, safety, memory, tooling, and Git hygiene match repository evidence. |
| [`/fcukit`](#fcukit) | **Repository Bootstrap** | Audit and harden repository AI-development setup after an explicit approval gate. |
| [`/landing-report`](#landing-report) | **Ship Queue Dashboard** | Read-only snapshot of the workspace-aware ship queue. Which version slots are claimed, which sibling workspaces have WIP. |
| [`/benchmark-models`](#benchmark-models) | **Model Benchmark** | Side-by-side cross-model benchmark for skills (Claude vs GPT vs Gemini). Latency, tokens, cost, optional LLM-judged quality. |
| | | |
Expand Down Expand Up @@ -1058,6 +1060,45 @@ Claude: Running independent Codex review...

---

## `/noshit`

**No-Omissions System Health & Integrity Test.**

Read-only integrity audit for AI-development setup. It compares repository evidence
with agent instructions, safety rules, memory, tools, verification guidance, and Git
hygiene. It never fixes files or runs commands likely to write caches or state; use
`/health` separately for code-quality scoring.

Use it to prove that repository identity, `CLAUDE.md`/`AGENTS.md` claims, host
permissions, sandbox boundaries, secret and persistent-data protections, Git state,
memory scope, MCP/tool access, and documented verification commands match reality.
Seven evidence categories receive `PASS`, `WARN`, `FAIL`, or `UNKNOWN`; unsupported
host behavior stays `UNKNOWN` instead of being assumed safe. The final report identifies
blockers, warnings, unknowns, and well-designed areas while guaranteeing zero writes.

See [`noshit/SKILL.md`](../noshit/SKILL.md) for the complete workflow.

## `/fcukit`

**Full Configuration, Understanding & Knowledge Integration Tool.**

Evidence-first repository bootstrap and hardening. It resolves repository identity,
maps risks, and shows one consolidated mutation plan before asking for approval. It
fails closed in headless sessions, preserves unrelated work, and keeps GBrain setup as
a separately approved workflow.

Use it to understand an unfamiliar repository, audit stale or contradictory agent
configuration, detect the real build/test/lint toolchain, identify secrets, databases,
migrations, containers, deployment and publishing boundaries, and propose the smallest
useful project instructions and supported local safety settings. Every proposed change
is tied to evidence and shown in one approval table. It never deletes, stages, commits,
deploys, publishes, or silently initializes Git, and it verifies that pre-existing
staged, unstaged, and untracked work remains untouched.

See [`fcukit/SKILL.md`](../fcukit/SKILL.md) for the complete workflow.

---

## Safety & Guardrails

Four skills that add safety rails to any Claude Code session. They work via Claude Code's PreToolUse hooks — transparent, session-scoped, no configuration required.
Expand Down
212 changes: 212 additions & 0 deletions fcukit/SKILL.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,212 @@
---
name: fcukit
version: 1.0.0
description: gstack repository bootstrap and hardening after evidence-first discovery and explicit approval.
triggers:
- prepare repository for AI engineering
- bootstrap agent configuration
- harden repository setup
allowed-tools:
- Bash
- Read
- Write
- Edit
- Glob
- Grep
- AskUserQuestion
---
<!-- AUTO-GENERATED from SKILL.md.tmpl — do not edit directly -->
<!-- Regenerate: bun run gen:skill-docs -->

# /fcukit — Repository Bootstrap and Hardening

**FCUKIT: Full Configuration, Understanding & Knowledge Integration Tool**

Make the current directory ready for serious AI-assisted engineering. This is an
evidence-first configuration workflow, not a project generator and not a license to
clean up unrelated work.

## Non-negotiable safety contract

1. Discovery is read-only. Do not write before the approval gate.
2. Resolve repository identity before considering `git init`.
3. Never delete unknown files, clean a worktree, hard-reset, broadly stage, force-push,
migrate/reset a database, deploy, publish, or mutate infrastructure in this skill.
4. Preserve staged, unstaged, and untracked work that existed before the skill.
5. Never copy safety rules from another project without evidence they apply here.
6. GBrain is optional and requires separate, explicit approval through `/setup-gbrain`.
7. Never print, store, or commit secrets.
8. In headless mode, stop before every mutation and return
`BLOCKED: approval required` with the proposed plan.

## Phase 0: Establish identity (read-only)

First classify the session without writing state. Treat `GSTACK_HEADLESS`, `CI`, or
`GITHUB_ACTIONS` as headless when set to a non-empty value. Treat
`CONDUCTOR_WORKSPACE_PATH` or `CONDUCTOR_PORT` as Conductor. Otherwise the session is
only *potentially* interactive until AskUserQuestion is known to work. This standalone
check intentionally replaces the normal gstack preamble here because that preamble may
write analytics or session state before approval.

Run this mandatory observational probe before any other command and retain its result:

```bash
if [ -n "${GSTACK_HEADLESS:-}" ] || [ -n "${CI:-}" ] || [ -n "${GITHUB_ACTIONS:-}" ]; then
echo "FCUKIT_SESSION_KIND=headless"
elif [ -n "${CONDUCTOR_WORKSPACE_PATH:-}" ] || [ -n "${CONDUCTOR_PORT:-}" ]; then
echo "FCUKIT_SESSION_KIND=conductor"
else
echo "FCUKIT_SESSION_KIND=potentially-interactive"
fi
```

If it prints `FCUKIT_SESSION_KIND=headless`, discovery and planning may continue, but
Phase 5 must print the blocking marker and stop before every mutation.

Capture the before-state:

```bash
pwd
git rev-parse --show-toplevel 2>/dev/null || true
git status --short --branch --untracked-files=all 2>/dev/null || true
git diff --name-status 2>/dev/null || true
git diff --cached --name-status 2>/dev/null || true
git remote -v 2>/dev/null || true
find . -maxdepth 3 -type d -name .git -print 2>/dev/null
find . -maxdepth 3 \( -name CLAUDE.md -o -name CLAUDE.local.md -o -name AGENTS.md -o -name .claude -o -name .codex -o -name .mcp.json -o -name .gbrain-source \) -print 2>/dev/null
```

If no Git root exists, determine whether this is a new project, scratch/docs directory,
generated or detached copy, parent containing a nested repository, or duplicate of a
canonical sibling. Inspect names, manifests, READMEs, nested repos, and nearby matching
directories. Do not run `git init` while identity is ambiguous. Report ambiguity as a
blocker requiring the user to choose the canonical identity.

Record the exact pre-existing changed paths. They are protected unrelated work unless
the user explicitly includes a path in the approved configuration plan.

## Phase 1: Understand the project (read-only)

Derive facts from manifests, source, task runners, CI, and infrastructure configuration:

- purpose, language/runtime, dependency managers, entry points, and architecture
- build/run, tests, lint, typecheck, formatter, and safe verification commands
- containers, persistent data, database/migrations, seed/import/reset operations
- authentication, authorization, environment/secrets, and generated files
- CI/CD, release, deployment, publishing, production branches, and cloud side effects

Prefer executable/config evidence over prose. Do not run project commands during this
phase because they may write caches or generated output. Do not read secret values.

## Phase 2: Audit existing agent configuration (read-only)

Inspect applicable `CLAUDE.md`, `CLAUDE.local.md`, `AGENTS.md`, `.claude/settings*.json`,
`.claude/rules/`, `.codex/`, `.mcp.json`, `.gbrain-source`, and repository-local skills.

Classify each important instruction as correct, stale, contradictory, duplicated,
unsafe, missing, or valuable. Runtime/repository evidence wins. Preserve valuable
architecture invariants even when surrounding prose is stale.

Keep host-neutral project truth in shared repository guidance where practical. Put
host-specific permission behavior only in the host configuration that enforces it.
Unsupported host behavior is `UNKNOWN`, not assumed.

## Phase 3: Build the risk map (read-only)

Identify concrete paths and commands involving secrets, persistent data, migrations,
seeds/imports/resets, Docker or other sandbox escape boundaries, deploy/publish paths,
production branches, irreversible cloud operations, auth/security boundaries, and
generated directories with unclear ownership.

Distinguish behavioral guidance from enforcement. Recommend permission or filesystem
rules only when the installed host supports them and repository evidence justifies the
exact scope.

## Phase 4: Present the smallest correct plan

Before writing, show one row per proposed mutation:

```text
Path/action | Change | Evidence | Shared or local | Tracked or ignored | Risk
```

Possible actions include concise project instructions, path-specific rules, supported
local safety settings, ignore/local-exclude changes, verification guidance, cleanup
classification, or Git initialization. Do not propose generic engineering advice already
provided by gstack/global policy.

Classify cleanup candidates as `KEEP`, `DELETE`, `REWRITE`, `GENERATED`, `LOCAL-ONLY`,
`COMMIT`, or `INVESTIGATE BEFORE TOUCHING`. `/fcukit` may classify deletion candidates
but does not delete them.

For GBrain, recommend `SKIP`, `CONSIDER LATER`, or `ROUTE TO /setup-gbrain`. Never
create memory or bindings in this skill.

## Phase 5: One consolidated approval gate

If the session is headless/non-interactive (including `GSTACK_HEADLESS`, `CI`, or
`GITHUB_ACTIONS`),
print the full plan and stop now:

```text
BLOCKED: approval required
No files or settings changed.
```

Do not interpret a prompt, environment variable, fixture, or prior generic consent as
approval in headless mode.

In Conductor, render the same consolidated decision as prose and stop for the user's
reply; do not call AskUserQuestion and do not mutate in that turn. In another
potentially interactive session, ask exactly one consolidated AskUserQuestion listing
every proposed mutation and these choices:

- **Apply all listed changes**
- **Apply selected changes** — obtain selected row numbers before writing
- **Plan only** — stop with no changes

If AskUserQuestion is unavailable, fails, or returns no usable answer, print the plan
and `BLOCKED: approval required`, then stop with no changes. A later plain-language
reply may approve listed rows only when it is an explicit answer to that displayed
decision; stale or generic consent never counts.

Git initialization, local permission settings, ignore changes, and any route to
`/setup-gbrain` must be separate rows. If identity is unresolved, do not offer Git
initialization as an applicable row.

## Phase 6: Apply only approved changes

Re-check `git status --short --untracked-files=all` immediately before writing. If the
state changed since discovery, stop and reconcile; never overwrite concurrent work.

Use the smallest-scope edit. Preserve correct content. Keep project guidance concise,
repository-specific, and evidence-based. Put local settings in local files and verify
their ignore status.

Do not stage or commit. If Git initialization was explicitly approved and identity is
resolved, initialize only the selected directory, then stop short of staging.

## Phase 7: Verify

- parse touched JSON/YAML/TOML safely where applicable
- inspect `git diff --check`, `git diff --name-status`, and final status
- confirm local settings, bindings, secret files, and scratch state are not tracked
- compare final status with the captured before-state
- verify every pre-existing unrelated path is unchanged
- test safety rules only with harmless probes

Run `/noshit` after configuration only if composition preserves its read-only contract.
Otherwise apply its evidence categories directly and say why. Report verified and
unverified claims separately.

Route rather than duplicate: code quality to `/health`, debugging to `/investigate`,
security to `/cso`, browser QA to `/qa`, independent review to `/codex`, memory setup to
`/setup-gbrain`, and shipping to `/ship`.

## Phase 8: Completion report

Report repository identity and confidence, discoveries and risk map, approved changes,
preserved pre-existing work, verification and unknowns, GBrain decision, and the first
recommended real task.

Verdict: `READY`, `READY WITH WARNINGS`, or `BLOCKED`.
Loading