Skip to content

Commit a2da9d0

Browse files
cobusgreylingCobus Greyling
andauthored
feat: make loop-engineering super useful (#16)
- loop-audit v1.4: dynamic 'loopActivity' signal (git history, 'Last run' timestamps in STATE, scheduled workflows, run logs). L3 now requires real usage evidence (not just files). Stronger --suggest output and recommendations. Updated tests + README. - GitHub Pages showcase: Interactive Pattern Picker (click symptom pills → exact npx + first /loop command + links). Live Readiness Simulator (checkboxes for all signals → live score + level + next action, mirrors computeScore + new L3 rules). Hero now has prominent one-click copy npx CTAs for loop-init and loop-audit. - New low-risk pattern: Issue Triage (perfect companion to Daily Triage for noisy GitHub/Linear issues). 7 patterns total. Updated registry.yaml (validated), patterns/README, pattern-picker.md decision flow + table. - Polish: loop-init bumped to 1.2.0. Main + tool READMEs, badges, and quickstart language updated to emphasize 'npx works today' and the new interactive tools + activity proof requirement. Builds and validation green. All changes dogfood the philosophy: structure + actual runs = high L3 score. Co-authored-by: Cobus Greyling <cobusgreyling@Cobuss-MacBook-Pro-2.local>
1 parent 8514302 commit a2da9d0

27 files changed

Lines changed: 952 additions & 50 deletions

‎.github/workflows/daily-triage.yml‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,7 @@ jobs:
6565
## High Priority (loop is acting or waiting on human)
6666
6767
- Maintain loop readiness score ≥ 58 (current: **${SCORE}**, level **${LEVEL}**).
68-
- Publish \`@cobusgreyling/loop-audit\` and \`@cobusgreyling/loop-init\` to npm when \`NPM_TOKEN\` is configured (see docs/RELEASE.md).
68+
- Keep npm packages current after tool changes (tag \`loop-audit-v*\`, \`loop-init-v*\`, \`loop-cost-v*\` — see docs/RELEASE.md).
6969
$([ "$FAILING" -gt 0 ] && echo "- **${FAILING}** dogfood workflow(s) failing — investigate CI.")
7070
7171
## Watch List
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
name: Release loop-cost
2+
3+
on:
4+
push:
5+
tags:
6+
- 'loop-cost-v*'
7+
8+
permissions:
9+
contents: read
10+
id-token: write
11+
12+
jobs:
13+
test-and-publish:
14+
runs-on: ubuntu-latest
15+
steps:
16+
- uses: actions/checkout@v6
17+
18+
- uses: actions/setup-node@v6
19+
with:
20+
node-version: '22'
21+
registry-url: 'https://registry.npmjs.org'
22+
cache: 'npm'
23+
cache-dependency-path: tools/loop-cost/package-lock.json
24+
25+
- name: Ensure npm supports trusted publishing (OIDC)
26+
run: npm install -g npm@latest
27+
28+
- name: Install, build, test
29+
working-directory: tools/loop-cost
30+
run: |
31+
npm ci
32+
npm run build
33+
npm test
34+
35+
- name: Publish to npm
36+
working-directory: tools/loop-cost
37+
run: npm publish --access public --provenance
38+
env:
39+
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}

‎CONTRIBUTING.md‎

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -52,8 +52,9 @@ Also add an entry to `patterns/registry.yaml`.
5252

5353
## Community
5454

55-
- **Questions**: open an issue with label `question` or `pattern-request`
56-
- **Discussions**: enable GitHub Discussions on the repo for pattern Q&A (recommended for maintainers)
55+
- **Questions**: [GitHub Discussions](https://github.com/cobusgreyling/loop-engineering/discussions) (preferred) or issue with label `question`
56+
- **Show your loop**: post in Discussions or add a row to [docs/adopters.md](./docs/adopters.md)
57+
- **Good first issues**: look for label [`good first issue`](https://github.com/cobusgreyling/loop-engineering/issues?q=is%3Aissue+is%3Aopen+label%3A%22good+first+issue%22)
5758
- **Security**: see [SECURITY.md](./SECURITY.md) — do not file public issues for exploitable vulnerabilities
5859

5960
Thank you for helping make this the go-to reference for loop engineering.

‎README.md‎

Lines changed: 13 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -8,9 +8,11 @@
88
</p>
99

1010
<p align="center">
11+
<a href="https://github.com/cobusgreyling/loop-engineering/stargazers"><img src="https://img.shields.io/github/stars/cobusgreyling/loop-engineering?style=social" alt="GitHub stars"></a>
1112
<a href="https://github.com/cobusgreyling/loop-engineering/actions/workflows/audit.yml"><img src="https://img.shields.io/github/actions/workflow/status/cobusgreyling/loop-engineering/audit.yml?label=loop-audit%20dogfood" alt="loop-audit dogfood"></a>
13+
<a href="https://www.npmjs.com/package/@cobusgreyling/loop-audit"><img src="https://img.shields.io/npm/v/@cobusgreyling/loop-audit?label=loop-audit" alt="loop-audit npm"></a>
1214
<a href="https://github.com/cobusgreyling/loop-engineering/blob/main/LICENSE"><img src="https://img.shields.io/badge/license-MIT-blue.svg" alt="MIT"></a>
13-
<a href="https://cobusgreyling.github.io/loop-engineering/"><img src="https://img.shields.io/badge/GitHub_Pages-live-3ee8c5" alt="Pages"></a>
15+
<a href="https://cobusgreyling.github.io/loop-engineering/"><img src="https://img.shields.io/badge/GitHub_Pages-live%20%7C%20interactive-3ee8c5" alt="Pages"></a>
1416
</p>
1517

1618

@@ -42,10 +44,10 @@ A loop is a recursive goal: you define a purpose and the AI iterates (often with
4244
| [Pattern Picker](docs/pattern-picker.md) | Which loop to run first — **start here if unsure** |
4345
| [Primitives Matrix](docs/primitives-matrix.md) | Grok vs Claude Code vs Codex — bookmark this |
4446
| [Loop Design Checklist](docs/loop-design-checklist.md) | Ship readiness rubric |
45-
| [Patterns](patterns/README.md) | 6 production patterns including the new low-risk Changelog Drafter |
47+
| [Patterns](patterns/README.md) | 7 production patterns + [interactive picker](https://cobusgreyling.github.io/loop-engineering/#interactive) |
4648
| [Starters](starters/) | Clone-and-run kits (Grok, Claude Code, Codex) |
47-
| [loop-audit](tools/loop-audit/) | Loop Readiness Score CLI — `npx @cobusgreyling/loop-audit` |
48-
| [loop-init](tools/loop-init/) | Scaffold starters + budget/run-log — `npx @cobusgreyling/loop-init` |
49+
| [loop-audit](tools/loop-audit/) | Loop Readiness Score CLI (v1.4 + activity detection) — `npx @cobusgreyling/loop-audit . --suggest` |
50+
| [loop-init](tools/loop-init/) | Scaffold starters + budget/run-log (v1.2) — `npx @cobusgreyling/loop-init . --pattern daily-triage --tool grok` |
4951
| [loop-cost](tools/loop-cost/) | Token spend estimator — `npx @cobusgreyling/loop-cost` |
5052
| [Stories](stories/) | Real wins and honest failures |
5153

@@ -107,10 +109,11 @@ flowchart LR
107109
| [Dependency Sweeper](patterns/dependency-sweeper.md) | 6h–1d | [dependency-sweeper](starters/dependency-sweeper/) | L2 patch-only | Medium |
108110
| [Changelog Drafter](patterns/changelog-drafter.md) | 1d or tag | [changelog-drafter](starters/changelog-drafter/) | **L1** draft | Low |
109111
| [Post-Merge Cleanup](patterns/post-merge-cleanup.md) | 1d–6h | [post-merge-cleanup](starters/post-merge-cleanup/) | **L1** off-peak | Low |
112+
| [Issue Triage](patterns/issue-triage.md) | 2h–1d | [minimal-loop](starters/minimal-loop/) | **L1** propose-only | Low |
110113

111-
Not sure which to pick? See [pattern-picker](docs/pattern-picker.md).
114+
Not sure which to pick? Try the [interactive picker](https://cobusgreyling.github.io/loop-engineering/#interactive) or [pattern-picker](docs/pattern-picker.md).
112115

113-
Machine-readable index: [patterns/registry.yaml](patterns/registry.yaml) (now 6 patterns)
116+
Machine-readable index: [patterns/registry.yaml](patterns/registry.yaml) (7 patterns)
114117

115118
## Getting Started (5 minutes)
116119

@@ -131,7 +134,9 @@ bash scripts/before-after-demo.sh
131134
/loop 1d Run loop-triage. Update STATE.md. No auto-fix in week one.
132135
```
133136

134-
Packages publish from tagged releases — see [docs/RELEASE.md](docs/RELEASE.md). Until npm is live, run from this repo:
137+
All three CLIs publish to npm from tagged releases — see [docs/RELEASE.md](docs/RELEASE.md). No clone required.
138+
139+
**Develop from source** (monorepo contributors):
135140

136141
```bash
137142
cd tools/loop-init && npm ci && npm test && node dist/cli.js /path/to/project --pattern daily-triage --tool grok
@@ -173,7 +178,7 @@ Addy Osmani:
173178
174179
## Contributing
175180

176-
Share production patterns, tool mappings, and failure stories. See [CONTRIBUTING.md](CONTRIBUTING.md) and [GitHub Discussions](https://github.com/cobusgreyling/loop-engineering/discussions).
181+
Share production patterns, tool mappings, and failure stories. See [CONTRIBUTING.md](CONTRIBUTING.md), [adopters](docs/adopters.md), and [GitHub Discussions](https://github.com/cobusgreyling/loop-engineering/discussions).
177182

178183
## Sources
179184

‎docs/RELEASE.md‎

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ This repo ships two public npm packages from `tools/`:
66
|---------|-----------|-------------|
77
| `@cobusgreyling/loop-audit` | `tools/loop-audit` | `loop-audit-v*` |
88
| `@cobusgreyling/loop-init` | `tools/loop-init` | `loop-init-v*` |
9-
| `@cobusgreyling/loop-cost` | `tools/loop-cost` | `loop-cost-v*` (add workflow when publishing) |
9+
| `@cobusgreyling/loop-cost` | `tools/loop-cost` | `loop-cost-v*` |
1010

1111
## One-time setup (trusted publishing — recommended)
1212

@@ -16,6 +16,7 @@ Link npm to GitHub, then for **each package** on [npmjs.com](https://www.npmjs.c
1616
|---------|--------------|-------------------|
1717
| `@cobusgreyling/loop-audit` | `cobusgreyling/loop-engineering` | `release-loop-audit.yml` |
1818
| `@cobusgreyling/loop-init` | `cobusgreyling/loop-engineering` | `release-loop-init.yml` |
19+
| `@cobusgreyling/loop-cost` | `cobusgreyling/loop-engineering` | `release-loop-cost.yml` |
1920

2021
Names must match **exactly** (case-sensitive). No `NPM_TOKEN` secret is required when trusted publishing is configured.
2122

@@ -35,17 +36,22 @@ git tag loop-audit-v1.3.0
3536
git push origin loop-audit-v1.3.0
3637

3738
# loop-init (bundles starters/templates, runs smoke tests)
38-
git tag loop-init-v1.1.0
39-
git push origin loop-init-v1.1.0
39+
git tag loop-init-v1.2.0
40+
git push origin loop-init-v1.2.0
41+
42+
# loop-cost (bundles patterns/registry.yaml)
43+
git tag loop-cost-v1.0.0
44+
git push origin loop-cost-v1.0.0
4045
```
4146

42-
Workflows: `.github/workflows/release-loop-audit.yml`, `.github/workflows/release-loop-init.yml`.
47+
Workflows: `.github/workflows/release-loop-audit.yml`, `.github/workflows/release-loop-init.yml`, `.github/workflows/release-loop-cost.yml`.
4348

4449
## Verify after publish
4550

4651
```bash
4752
npx @cobusgreyling/loop-audit --help
4853
npx @cobusgreyling/loop-init --help
54+
npx @cobusgreyling/loop-cost --help
4955

5056
mkdir /tmp/loop-init-test && cd /tmp/loop-init-test
5157
npx @cobusgreyling/loop-init . --pattern daily-triage --tool grok --dry-run

‎docs/adopters.md‎

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
# Adopters & community setups
2+
3+
Forks and stars mean people are trying this in their own stacks. If you run a loop from this repo (or adapted from it), add yourself here via PR.
4+
5+
## How to list your project
6+
7+
Open a PR that adds a row to the table below:
8+
9+
| Field | What to include |
10+
|-------|-----------------|
11+
| **Project** | Repo link or product name |
12+
| **Pattern(s)** | e.g. Daily Triage + Issue Triage |
13+
| **Tool** | Grok, Claude Code, Codex, GitHub Actions, mixed |
14+
| **Level** | L1 / L2 / L3 (honest) |
15+
| **Notes** | One line — what worked or what broke |
16+
17+
## Adopters
18+
19+
| Project | Pattern(s) | Tool | Level | Notes |
20+
|---------|------------|------|-------|-------|
21+
| [loop-engineering](https://github.com/cobusgreyling/loop-engineering) (this repo) | Daily Triage, Changelog Drafter, audit dogfood | GitHub Actions + Grok | L3 | Reference implementation — dogfoods `loop-audit` on every PR |
22+
23+
*Your project here — see [CONTRIBUTING.md](../CONTRIBUTING.md).*
24+
25+
## Show & tell
26+
27+
Prefer chat over a PR? Post in [GitHub Discussions → Show your loop](https://github.com/cobusgreyling/loop-engineering/discussions/categories/show-your-loop) with:
28+
29+
1. Which pattern you picked and why
30+
2. Your first `/loop` or scheduler command
31+
3. One surprise (good or bad)
32+
33+
Failure reports are first-class — see [stories/](../stories/).

‎docs/assets/css/showcase.css‎

Lines changed: 103 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -506,4 +506,106 @@ section {
506506
.nav-links { display: none; }
507507
.hero { padding: 48px 0 40px; }
508508
.flow-arrow { display: none; }
509-
}
509+
}
510+
511+
/* === Interactive widgets (v1.4 site upgrade) === */
512+
.interactive {
513+
background: var(--bg-elevated);
514+
border: 1px solid var(--border);
515+
border-radius: var(--radius);
516+
padding: 28px;
517+
margin: 24px 0;
518+
}
519+
520+
.symptom-pills {
521+
display: flex;
522+
flex-wrap: wrap;
523+
gap: 8px;
524+
margin: 16px 0;
525+
}
526+
527+
.symptom-pill {
528+
padding: 8px 14px;
529+
background: var(--bg-card);
530+
border: 1px solid var(--border);
531+
border-radius: 999px;
532+
font-size: 0.82rem;
533+
color: var(--text-muted);
534+
cursor: pointer;
535+
user-select: none;
536+
transition: all 0.15s;
537+
}
538+
539+
.symptom-pill:hover { border-color: var(--accent); color: var(--text); }
540+
.symptom-pill.active {
541+
background: rgba(62, 232, 197, 0.15);
542+
border-color: var(--accent);
543+
color: var(--accent);
544+
font-weight: 600;
545+
}
546+
547+
.reco-card {
548+
margin-top: 16px;
549+
padding: 16px 18px;
550+
background: #050810;
551+
border: 1px solid var(--accent);
552+
border-radius: 10px;
553+
font-size: 0.9rem;
554+
}
555+
556+
.reco-card .cmd {
557+
font-family: var(--font-mono);
558+
background: rgba(255,255,255,0.04);
559+
padding: 2px 6px;
560+
border-radius: 4px;
561+
}
562+
563+
.check-grid {
564+
display: grid;
565+
grid-template-columns: repeat(auto-fit, minmax(180px, 1fr));
566+
gap: 8px 16px;
567+
margin: 16px 0;
568+
}
569+
570+
.check-item {
571+
display: flex;
572+
align-items: center;
573+
gap: 8px;
574+
font-size: 0.85rem;
575+
color: var(--text-muted);
576+
cursor: pointer;
577+
}
578+
579+
.check-item input { accent-color: var(--accent); }
580+
581+
.live-score {
582+
display: flex;
583+
align-items: center;
584+
gap: 16px;
585+
margin: 12px 0;
586+
padding: 12px 16px;
587+
background: var(--bg-card);
588+
border-radius: 10px;
589+
}
590+
591+
.live-score .big {
592+
font-size: 2.1rem;
593+
font-weight: 800;
594+
color: var(--accent);
595+
line-height: 1;
596+
}
597+
598+
.live-score .meta { font-size: 0.85rem; }
599+
600+
.copy-btn {
601+
font-size: 0.7rem;
602+
padding: 2px 8px;
603+
border-radius: 4px;
604+
background: rgba(62,232,197,0.1);
605+
color: var(--accent);
606+
border: 1px solid rgba(62,232,197,0.3);
607+
cursor: pointer;
608+
margin-left: 8px;
609+
}
610+
611+
.copy-btn:hover { background: rgba(62,232,197,0.2); }

0 commit comments

Comments
 (0)