Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
179 commits
Select commit Hold shift + click to select a range
c42772d
refactor(cli): split architecture rules into self-contained invariants
Aug 21, 2026
7dd28cf
test(cli): add architecture invariant tests and make guardrails blocking
Aug 21, 2026
aae60f7
docs(cli): correct three stale claims and record the file ownership r…
Aug 21, 2026
e8f20c3
refactor(cli): drop the re-export that only served a test
Aug 21, 2026
b9610fc
docs(cli): persist the context refactor plan
Aug 21, 2026
c97962e
docs(cli): plan phase 0, extending the golden net
Aug 21, 2026
b5e1afe
docs(cli): resolve a contradiction about framework build's golden
Aug 21, 2026
5ed3777
docs(cli): turn the scoping into an executable plan of 17 phases
Aug 21, 2026
bbd5125
docs(cli): add three nets and split the oversized phase
Aug 21, 2026
1faa335
docs(cli): add a smoke phase, after running the suite that nobody runs
Aug 21, 2026
6627997
docs(cli): a fourth dormant net, broken by a TypeScript upgrade
Aug 21, 2026
1a577d5
docs(contributing): name the pnpm 11 first-install stop
Aug 21, 2026
399e54c
test(cli): extend the golden net with drift, errors and a help surface
Aug 21, 2026
ac5fbb0
fix(cli): make `aidd restore --force` actually force
Aug 21, 2026
c02d097
test(cli): recapture the golden after the restore fix, close phase 1
Aug 21, 2026
2b4dbc4
docs(cli): record that telemetry lands in the current structure
Aug 21, 2026
60fb1ad
docs(cli): replan phase 2 after measuring what the smoke suite covers
Aug 21, 2026
649c81a
test(cli): make the smoke suite hermetic and put it in CI
Aug 21, 2026
80e2b7e
test(cli): pin the corrupt-catalog recovery instead of demanding an e…
Aug 21, 2026
84f8362
docs(cli): re-verify phase 3's targets and size them
Aug 21, 2026
f7c5b42
refactor(cli): delete the dead code before moving anything
Aug 21, 2026
dd14bf0
docs(cli): correct phase 4 before executing it, not during
Aug 21, 2026
dfcdc64
refactor(cli): drop plugin scaffolding
Aug 21, 2026
ad0b767
test(cli): explain the coverage exclusion and unblock stryker's first…
Aug 21, 2026
cdb19fb
docs(cli): cancel phase 5, its premise does not hold
Aug 21, 2026
dfdb60d
docs(cli): record the three ways a marketplace gets registered
Aug 21, 2026
82d884e
refactor(cli): one data-driven plugin CLI adapter instead of three
Aug 21, 2026
f3abdd8
docs(cli): phase 5 becomes letting each tool own its configuration
Aug 21, 2026
8d46b5d
docs(cli): plan the hosted per-tool marketplaces
Aug 21, 2026
029397e
docs(cli): park phase 5 until the hosting shape is decided
Aug 21, 2026
1fc6b0b
docs(cli): record the per-tool scopes and what the gitignore exposes
Aug 22, 2026
808144e
refactor(cli): import every symbol from where it is defined
Aug 22, 2026
a7a4765
docs(cli): refresh the index's net table after phase 6
Aug 22, 2026
7c7f28e
docs(cli): settle phase 5 β€” the offline question was not the blocker
Aug 22, 2026
155d851
test(cli): keep the smoke suite out of the real home directory
Aug 22, 2026
a3923fd
feat(cli): keep the machine-local registration out of the committed s…
Aug 22, 2026
675c19b
test(cli): pin the two things the split could quietly get wrong
Aug 22, 2026
77ed6ef
feat(cli): give each tool the answer its own architecture allows
Aug 22, 2026
763c3b0
feat(cli): let the tool write its own configuration where it offers a…
Aug 22, 2026
72ab9f6
feat(cli): carry the scope through to the tool, and take a name back …
Aug 22, 2026
78bf5f6
fix(cli): build a user-scope marketplace outside the project that reg…
Aug 22, 2026
5bc8d61
fix(cli): rebuild when the source can have changed, and tell the tool…
Aug 22, 2026
6478f92
test(cli): stop the golden from depending on what has been released
Sep 1, 2026
c09df0b
refactor(cli): empty the shared dumping ground
Sep 1, 2026
568c2c3
docs(cli): settle the context boundary without a barrel, and plan the…
Sep 1, 2026
0dbe146
refactor(cli): put three misplaced units where their dependencies alr…
Sep 1, 2026
dc40b23
refactor(cli): extract the kernel, the vocabulary every context will …
Sep 1, 2026
d6e21f3
test(cli): make every architecture rule prove it still fires, and put…
Sep 1, 2026
c67bcd6
refactor(cli): gather the tools context
Sep 1, 2026
1fe22c7
docs(cli): repoint the skills at where the code now lives, and keep t…
Sep 1, 2026
c1dc085
refactor(cli): give each tool its own build knowledge back
Sep 1, 2026
77a8c6b
refactor(cli): extract translate, and hold the boundary with a test i…
Sep 1, 2026
ca3c6ce
docs(cli): record how a green run can hide a dead suite, and align th…
Sep 1, 2026
bb0e129
docs(cli): record the measured pyramid, and that the default run alre…
Sep 2, 2026
ba95642
refactor(cli): extract distribution, the context that only says where…
Sep 2, 2026
d1092e6
refactor(cli): extract framework, and turn the chain into a test that…
Sep 2, 2026
ef52906
refactor(cli): split the manifest aggregate, with the document as the…
Sep 2, 2026
202e255
refactor(cli): drop the manifest migrations, and give the guard a way…
Sep 2, 2026
af6d92b
refactor(cli): separate what speaks to a human from what wires the ma…
Sep 2, 2026
8c28dcf
feat(cli): move the command surface, and prove the two spellings matc…
Sep 2, 2026
46dd7f4
docs(cli): describe the structure that exists, and empty the tree it …
Sep 2, 2026
0e9139d
test(cli): score mutation per context, and make an error that instruc…
Sep 2, 2026
64286a5
docs(cli): measure what the kanban deep import costs, and narrow what…
Sep 2, 2026
e8efb6a
perf(cli): stop loading a text interface on every invocation
Sep 2, 2026
e84622c
test(cli): find the boundary rule that had stopped forbidding anything
Sep 2, 2026
a3c4f9f
refactor(cli): make a sixth tool a profile, not four edits
Sep 2, 2026
5620417
docs(cli): close the refactor, with what the guards caught
Sep 2, 2026
1ef17c8
test(cli): give each e2e run its own binary instead of a rule asking …
Sep 2, 2026
56ff746
fix(cli): stop the new build variable from deleting what it is pointe…
Sep 3, 2026
0e16cec
test(cli): declare what mutation covers, so a new file cannot escape it
Sep 3, 2026
4b2b7dc
fix(cli): scope what the exclusion reason claimed was already proven
Sep 3, 2026
e480d2a
test(cli): pin the source spellings a user types, and say what is lef…
Sep 3, 2026
6db92a1
fix(cli): cover the dropped ref my own record called harmless
Sep 3, 2026
774df09
refactor(cli): delete the reverse API and the placeholders nothing pr…
Sep 3, 2026
469d507
fix(cli): put back the copilot rewriting my proof could not see me break
Sep 3, 2026
5ca763a
test(cli): freeze the eight golden cells nobody was comparing
Sep 3, 2026
0602a25
test(cli): pin the codex transform the golden was vouching for on its…
Sep 3, 2026
a564698
test(cli): guard the settings file this CLI shares with whoever edits it
Sep 3, 2026
c0dac74
refactor(cli): leave the marketplace registration to the tools that d…
Sep 3, 2026
488abad
refactor(cli): finish the narrowing that stopped one field short
Sep 3, 2026
362abc2
refactor(cli): pay the folder-size debt where a defect was hiding beh…
Sep 3, 2026
f8b16cf
refactor(cli): correct the reasoning a review found wrong around a cl…
Sep 3, 2026
2005e43
fix(cli): repair a reference this refactor broke, and the guard that …
Sep 3, 2026
630ebd9
test(cli): pin what `auth login` and `auth status` do with a credential
Sep 3, 2026
b4dcd00
fix(cli): keep a user's own credential out of the cache path and the …
Sep 3, 2026
0205f98
refactor(cli): delete the pre-commit hook installer nothing ever called
Sep 3, 2026
fed1cbb
docs(cli): record what phase 5 measured, and the leak it turned up
Sep 3, 2026
dd227e0
refactor(cli): stop shipping a text interface for a command nobody ca…
Sep 3, 2026
8bd0a2c
refactor(cli): empty the error catalog of classes nothing throws, and…
Sep 3, 2026
1e5fe77
fix(cli): repair the CI job I broke, and guard the seam that let me
Sep 3, 2026
0089298
fix(cli): fence the context the boundary test was skipping entirely
Sep 3, 2026
6680567
fix(cli): widen three guards to the scope their names claim, and decl…
Sep 3, 2026
873f900
refactor(cli): make an admitted baseline carry its weight, not just i…
Sep 3, 2026
52e0667
fix(cli): make the tool-addition rule able to see the next tool
Sep 3, 2026
ce4fe90
refactor(cli): clear the dead code out of the guards, and unify two e…
Sep 3, 2026
0b29a49
feat(cli): guard the layer direction nobody was guarding, and say so …
Sep 3, 2026
6ca621d
fix(cli): stop compiling a sibling package, which is what CI was alre…
Sep 3, 2026
58d8cf9
refactor(cli): drop what the composition root builds and nobody reads
Sep 3, 2026
3660116
refactor(cli): narrow three ports to the methods something actually c…
Sep 3, 2026
0e39fc6
refactor(cli): stop filling three fields and two methods nothing cons…
Sep 3, 2026
86a3dc5
refactor(cli): delete a requirement that was declared twice and enfor…
Sep 3, 2026
f834753
test(cli): fail when a port declares a method nothing calls
Sep 3, 2026
e8c9bdc
docs(cli): a measured strategy for landing telemetry in the new archi…
Sep 3, 2026
3734889
docs(cli): capture what telemetry does before anything moves it
Sep 3, 2026
0434896
refactor(cli): telemetry, in the architecture the refactor built
Sep 4, 2026
d901b73
docs(framework): read the memory bank and the docs against the tree, …
Sep 4, 2026
5c0cd22
Merge branch 'next' into refactor/telemetry-into-contexts
Sep 4, 2026
a4835e6
Merge commit '39a4e84b' (next) into refactor/telemetry-into-contexts
Sep 4, 2026
54d8b8b
chore(cli): drop a session lock, two decorative evals and a gitkeep f…
Sep 6, 2026
1846f4e
refactor(cli): what fourteen reviews found, applied in four lots and …
Sep 6, 2026
c2538a0
Merge commit '1f1ae9ee' (next) into refactor/telemetry-into-contexts
Sep 6, 2026
a336a26
Merge commit '25f08379' (next) into refactor/telemetry-into-contexts
Sep 6, 2026
f1075a9
refactor(cli): what three reviews of the merged telemetry found, appl…
Sep 6, 2026
5de7086
docs(cli): a harness that says only what a guard can hold
Sep 6, 2026
3f43ddd
fix(cli): translate keeps what it did not write, and a merge a sessio…
Sep 6, 2026
973e4e8
fix(cli): a hook script is not a plugin, and a diagnostic says what i…
Sep 6, 2026
f220426
feat(cli): opencode runs a plugin's hooks through a bridge it can load
Sep 6, 2026
a45be18
chore: call the session trailer from the hook lefthook owns
Sep 6, 2026
99a0547
feat(cli): the manifest says where each plugin lives, and what a host…
Sep 6, 2026
5e90dc9
feat(cli): doctor asks the host whether a plugin is registered, and s…
Sep 6, 2026
cedae49
feat(cli): sync registers plugins with the host the way setup does
Sep 6, 2026
1ca8332
feat(cli): clean leaves nothing of aidd behind, and only removes what…
Sep 6, 2026
1b4a95a
test(cli): a smoke against the real host binaries, run only where the…
Sep 6, 2026
af129a4
feat(cli): refuse a marketplace name another catalog already holds, b…
Sep 7, 2026
7c0a7fe
feat(cli): clean and plugin remove purge the cache a host leaves behi…
Sep 7, 2026
9661da4
test(cli): the real smoke measures the capability it names, and exits…
Sep 7, 2026
ed3963f
feat(cli): one framework source per CLI version, shared by every proj…
Sep 7, 2026
073863b
feat(cli): the machine knows which projects still use the shared fram…
Sep 7, 2026
390635b
feat(cli): setup --scope user installs the framework for the machine,…
Sep 7, 2026
0dfa537
feat(cli): purge the shared source at user scope and migrate older in…
Sep 8, 2026
5ac0fe4
test(cli): prove machine scope against the real hosts in smoke:real
Sep 8, 2026
2279ea6
test(cli): let smoke:real undo the disabled keys copilot leaves behind
Sep 8, 2026
884f3af
fix(cli): keep a shared plugin enabled where another project still ne…
Sep 8, 2026
f58d1e3
fix(cli): close the gaps the reviews left open around aliases, hooks …
blafourcade Sep 8, 2026
e09a04a
ci: let the runners run what passes on a developer machine
blafourcade Sep 8, 2026
d63fb23
fix(cli): answer what code scanning found
blafourcade Sep 8, 2026
1a90b9d
ci: complete the Windows measurement chain with the transcript it reads
blafourcade Sep 8, 2026
61c3147
ci: make the Windows diagnosis prove it judged, and say why one insta…
blafourcade Sep 8, 2026
ff04adb
fix: snapshot a hook file through one descriptor
blafourcade Sep 8, 2026
b7c1bdf
ci: build the release archives from the run's own CLI and pin what fl…
blafourcade Sep 8, 2026
a0f1dac
test(cli): state path expectations the way the code builds them
blafourcade Sep 8, 2026
6fe520c
test: name a workflow the same way on every platform
blafourcade Sep 8, 2026
b6f99cb
test: declare a floating install in one place
blafourcade Sep 8, 2026
374837e
test(cli): seed and compare paths the way the code resolves them
blafourcade Sep 8, 2026
9010307
test(cli): probe the in-memory tree the way it is keyed
blafourcade Sep 8, 2026
74e9388
test(cli): build the e2e binary through node, not a shell shim
blafourcade Sep 8, 2026
b93ec3e
fix(cli): find a tool CLI as Windows installs it and record paths eve…
blafourcade Sep 9, 2026
4189de6
test(cli): compare a build golden by its files, not by listing order
blafourcade Sep 9, 2026
007c7f4
docs: say what the repository does, and stop calling the delegate twice
blafourcade Sep 9, 2026
5d65b6a
fix(cli): leave no update-check cache behind, and say what the code does
blafourcade Sep 9, 2026
1628643
docs(telemetry): rewrite the plugin README for someone who has never …
blafourcade Sep 9, 2026
7ccd4ad
docs(cli): rewrite rules, memory and README to the concise contract
blafourcade Sep 9, 2026
e84a44e
refactor: keep only the comments the code cannot say itself
blafourcade Sep 9, 2026
028351d
test(cli): reach the repository through one helper, never by climbing
blafourcade Sep 9, 2026
1ebbb6b
test: prove every guard on the defect it names
blafourcade Sep 9, 2026
201f1ef
test(cli): gate mutation per scope on a floor, incrementally
blafourcade Sep 9, 2026
f173878
chore(cli): hold process.exit, default exports and swallowed catches …
blafourcade Sep 9, 2026
07b9c8a
chore: refuse a sentence written in two documents
blafourcade Sep 9, 2026
48a37e9
test: name a skill path with forward slashes and import the validator…
blafourcade Sep 9, 2026
e3fa9c5
fix: validate a manifest named with the host separator
blafourcade Sep 9, 2026
b524d69
test(cli): split the tools scope at its profiles and replay every mut…
blafourcade Sep 9, 2026
65c6210
test(cli): one mutation scope per tool profile
blafourcade Sep 9, 2026
1e94909
test(cli): render clean, doctor, sync and setup through display modules
blafourcade Sep 9, 2026
021ec53
test(cli): render the remaining commands through display modules
blafourcade Sep 9, 2026
78981b3
test(cli): kill the surviving mutants of the telemetry displays and t…
blafourcade Sep 9, 2026
06a61a3
test(cli): raise the presentation mutation floor to 72
blafourcade Sep 9, 2026
e094e78
fix(cli): carry only kills across mutation runs
blafourcade Sep 9, 2026
a1fe101
fix(cli): read the incremental file instead of checking for it first
blafourcade Sep 9, 2026
ec91d67
docs: name the Node floor the bundled hooks need
blafourcade Sep 9, 2026
45c91d1
fix(cli): record the catalog entry's strict on a plugin installed fro…
blafourcade Sep 9, 2026
011d41e
test(cli): refresh the command-matrix golden for the recorded strict
blafourcade Sep 9, 2026
e1d666c
chore(cli): drop the meta guard and let biome hold two rules natively
blafourcade Sep 9, 2026
c31d93d
refactor(cli): read the environment through a port below infrastructure
blafourcade Sep 9, 2026
adb6053
test(cli): kill the surviving mutants of the five tool profiles
blafourcade Sep 9, 2026
f800845
test(cli): kill the surviving mutants of the translate context
blafourcade Sep 9, 2026
bdb1b86
test(cli): drive every command through its own wiring test
blafourcade Sep 9, 2026
e199954
test(cli): ask each host whether it loads what the catalog ships
blafourcade Sep 9, 2026
c0f8e8d
fix(cli): spawn the host acceptance fake as a node script so Windows …
blafourcade Sep 9, 2026
8240e9c
fix(cli): key the translate strategy expectations in posix form so Wi…
blafourcade Sep 9, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
31 changes: 31 additions & 0 deletions .github/dependabot.yml
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,14 @@ updates:
interval: "weekly"
day: "monday"
open-pull-requests-limit: 5
# devDependencies batch into one PR instead of one per package β€” the CLI's
# Windows job alone runs ~8 min, and an unrelated bump should not pay for it once
# per dependency.
groups:
npm-dev-dependencies:
dependency-type: "development"
patterns:
- "*"
commit-message:
prefix: "chore"
include: "scope"
Expand All @@ -42,6 +50,29 @@ updates:
interval: "weekly"
day: "monday"
open-pull-requests-limit: 5
groups:
npm-dev-dependencies:
dependency-type: "development"
patterns:
- "*"
commit-message:
prefix: "chore"
include: "scope"
labels:
- "dependencies"

- package-ecosystem: "npm"
directory: "kanban"
target-branch: "next"
schedule:
interval: "weekly"
day: "monday"
open-pull-requests-limit: 5
groups:
npm-dev-dependencies:
dependency-type: "development"
patterns:
- "*"
commit-message:
prefix: "chore"
include: "scope"
Expand Down
6 changes: 4 additions & 2 deletions .github/rulesets/main.json
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,8 @@
"dismiss_stale_reviews_on_push": false,
"require_code_owner_review": true,
"require_last_push_approval": false,
"required_review_thread_resolution": true
"required_review_thread_resolution": true,
"require_extra_approval_for_unattributed_changes": true
}
},
{
Expand All @@ -29,7 +30,8 @@
"strict_required_status_checks_policy": false,
"required_status_checks": [
{"context": "lefthook (framework-local checks)"},
{"context": "Commitlint"}
{"context": "Commitlint"},
{"context": "cli / gate"}
]
}
},
Expand Down
6 changes: 4 additions & 2 deletions .github/rulesets/next.json
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,8 @@
"dismiss_stale_reviews_on_push": false,
"require_code_owner_review": false,
"require_last_push_approval": false,
"required_review_thread_resolution": false
"required_review_thread_resolution": false,
"require_extra_approval_for_unattributed_changes": true
}
},
{
Expand All @@ -29,7 +30,8 @@
"strict_required_status_checks_policy": false,
"required_status_checks": [
{"context": "lefthook (framework-local checks)"},
{"context": "Commitlint"}
{"context": "Commitlint"},
{"context": "cli / gate"}
]
}
},
Expand Down
23 changes: 8 additions & 15 deletions .github/workflows/back-merge.yml
Original file line number Diff line number Diff line change
@@ -1,16 +1,12 @@
name: Back-merge

# After a release on main, fold main's changelog, manifest and version bumps
# back into next so the two branches do not drift.
# After a release on main, fold main's changelog, manifest and version bumps back into next.
#
# This stays a plain merge because promote.yml lands as a merge commit: main and
# next share a real merge base, so the only thing left to reconcile here is the
# release commit itself. Conflict -> open a PR for a human. Any other failure ->
# open a tracking issue so the drift is never silent.
# A plain merge, because promote.yml lands as a merge commit: main and next share a real
# merge base, so only the release commit is left to reconcile. Conflict opens a PR instead.
#
# A release can publish several tags at once (umbrella, plugins, cli), firing
# this workflow once per tag. The first run folds main in; the rest find main
# already merged and exit, instead of each opening its own duplicate PR.
# A release can publish several tags at once, firing this once per tag: the first run folds
# main in, the rest find it already merged rather than each opening a duplicate PR.

on:
release:
Expand Down Expand Up @@ -56,10 +52,8 @@ jobs:
exit 0
fi

# `ci:` on purpose. The type is absent from release-please's
# changelog-sections, so this plumbing commit never surfaces in a
# released changelog, while commitlint still accepts it as the tip of
# a later promote PR.
# `ci:` on purpose: the type is absent from release-please's changelog-sections,
# so this plumbing commit never surfaces in a changelog, and commitlint accepts it.
if git merge --no-ff -m "ci: back-merge main into next" origin/main; then
git push origin next
else
Expand All @@ -72,8 +66,7 @@ jobs:
--body "Automated back-merge hit conflicts. Resolve manually, then **merge with a merge commit, not a squash**: the second parent is what keeps a shared merge base between \`main\` and \`next\`, and a squash puts the next back-merge back into conflict."
fi

# Never let a back-merge fail silently: a rejected push or any other error
# opens a tracking issue so a human resyncs main into next.
# A rejected push, or any other error, must not leave next drifting silently.
- name: Open tracking issue on failure
if: failure()
env:
Expand Down
Loading
Loading