12 Commits

Author SHA1 Message Date
psmyrdek 9d957e3a10 feat(bench-kit): shallow base repo clone by default, --deep for history
The bootstrap decides the depth (`baseRepoClone.depth`: 1 = HEAD only,
null = full history); this side only executes it. `--deep` on
`bench-kit init` sends `deepClone: true` in the request.

`--depth` is silently ignored for a local path, so a shallow clone goes
through a `file://` URL: that gives up object hardlinking, which is the
point — one commit's objects instead of the whole history. Origin is
re-pointed at the registered remote as before, so `git fetch
--unshallow` in the clone adds the history later.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-18 09:56:19 +02:00
przeprogramowani 56484f5856 feat(skills): guide CLI setup, filtered downloads and safe updates (#41)
* feat(skills): guide CLI setup, named downloads and updates

* fix(skills): bound npm inventory checks on cold Windows runners

* fix(skills): align launch guide with 10xCards PRD journey

* fix(tests): make helper checks portable on Windows

* test(helpers): trace Windows npm pack startup

* fix(helpers): allow bounded Windows npm startup time

* fix(helpers): use released lesson-scoped skill filters

Correct setup/guide examples and sync ownership to match CLI 1.21.
Exercise the documented preview/write commands through CAC and the
real partial writer, preserving all three trees and the PRD schema.

Refs: https://github.com/przeprogramowani/10x-cli/pull/41

---------

Co-authored-by: Claude <noreply@anthropic.com>
2026-09-14 10:51:38 +02:00
psmyrdek 8a6a32aca1 feat(tool-profiles): replace Windsurf with Devin Desktop 2026-08-20 10:21:18 +02:00
Przemek Smyrdek e1b4b236dc refactor(bench-kit): CLI woła bootstrap kitu — kontrakt v1, logika instancji w template'cie (#37)
Kit zna siebie, CLI zna maszynę użytkownika: init/update klonują
template i wołają .bench-kit/bootstrap/index.mjs z klonu (żądanie JSON
na stdin, odpowiedź w ostatniej linii stdout). Update wykonuje bootstrap
z NOWEJ wersji kitu, więc migracje układu jadą z tagiem. Wchłania
TEMPLATE_ONLY_PATHS (gałąź fix/bench-kit-template-only-paths zbędna).
Minimalna wersja template'u: v0.10.0 (brak bootstrapu → template_incomplete).
Testy zawężone do kontraktu: fake runBootstrap, asercje na żądanie,
render, koperty --json i kody wyjścia.

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
2026-08-17 10:35:45 +02:00
Przemek Smyrdek d9a822556b feat(bench-kit): init clones the detected base repo into .repos/<name> (#36)
Local working copy for the authoring skills (bench-task, bench-refresh,
bench-wiring): cloned from the surrounding product repo (instant,
offline, full history) with origin pointed at the registered remote.
Gitignored via ensureIgnored so older template tags never commit it;
clone failure degrades to a hint.

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
2026-08-16 23:25:20 +02:00
Przemek Smyrdek 5d6466ed36 feat(bench-kit): remove TENX_CLI_EXPERIMENTAL gating — init and update generally available (#35)
The bench-kit command is feature-complete (zone-aware update, agent-tool
profiles, safe init defaults shipped in v1.17.0), so the experimental
opt-in has served its purpose. The command now registers unconditionally,
shows up in --help, and is documented in the README; the gating module
and its error envelope (experimental_locked) are removed.

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
2026-08-16 23:24:25 +02:00
Przemek Smyrdek 155bde9da7 feat(bench-kit): init safe defaults — pin demo task to detected repo, install runner deps, prefer https over SSH (#34)
- init pins placeholder tasks (repo: demo-app + all-zeros commit) to the
  detected base repo and its HEAD; company tasks never touched
- init and update run npm ci in .bench-kit/runner (update's wholesale
  swap deletes node_modules); failure degrades to a hint
- detected SSH remote is probed over https (git ls-remote, no terminal
  prompt) and rewritten when the repo answers publicly

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
2026-08-16 19:41:42 +02:00
Przemek Smyrdek 17a504b039 feat(bench-kit): sync shared root files (AGENTS.md) on update (#33)
Template v0.6.0 ships AGENTS.md (agent instructions: skill order and
purpose). init already materializes it with the template root; update
now syncs it with the same proposal semantics as skills — added or
overwritten in the working tree, reviewable via git diff, never
deleting company edits silently.

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
2026-08-14 22:59:42 +02:00
Przemek Smyrdek 8202734856 feat(bench-kit): zone-aware update + agent-tool profile in init (#31) (#32)
- init resolves the agent tool (--tool flag > manifest on repair >
  interactive pick pre-filled by marker detection > claude-code) and
  materializes template skills under the profile's skill root
  (.claude/skills, .agents/skills, ...); the chosen tool is recorded in
  instance.json so update knows where to propose skill diffs
- update works zone by zone: .bench-kit/ replaced wholesale (staged swap,
  manifest survives version-bumped), workflows and skills synced into the
  working tree as an uncommitted proposal reviewed via git diff, company
  content never touched; clean-worktree gate keeps the proposal reviewable
- template skill source auto-detects the planned .agents/skills migration

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
2026-08-14 12:43:40 +02:00
Przemek Smyrdek 47fad2249f feat(bench-kit): install template workflows into .github/workflows (#30)
GitHub only runs workflows from .github/workflows/, so init copies
.bench-kit/workflows/* there; repair mode keeps existing files (the
company may have customized triggers or secrets).

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
2026-08-14 12:40:49 +02:00
Przemek Smyrdek 7fbe39eb5e feat: auto-register the surrounding product repo as first base repo (#27)
Running 'bench-kit init' from inside a product repo is the common flow,
so init now detects the git repo containing the invocation cwd (git
rev-parse --show-toplevel + origin remote + HEAD) and replaces the
template's demo-app placeholder in bench.config.yaml with that repo,
editing the YAML document in place so company-zone comments survive.
The detection also lands in instance.json (incl. HEAD as a candidate
pin for the first task). No detection, no origin, or detecting the
instance itself → the placeholder stays. Adds the 'yaml' dependency.

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
2026-08-13 20:55:12 +02:00
Przemek Smyrdek 3184882f38 feat: add bench-kit command (init + update stub) (#26)
* feat: add bench-kit command (init + update stub)

'10x bench-kit init [dir]' creates a benchmark instance from the
przeprogramowani/10x-bench-kit template: preflight (git required,
container engine advisory), shallow clone at a tag, materialization
without git history, fresh git init + initial commit, and an instance
manifest in .bench-kit/instance.json. Re-running init on an existing
instance repairs missing template files without touching company
content. 'bench-kit update' is a not_implemented stub.

CAC has no nested command groups, so the command follows the auth
precedent: one 'bench-kit <action>' command dispatching internally.
Side effects are injectable (BenchKitDeps) so tests exercise the full
flow against fixture trees without network or real git.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

* feat: gate experimental commands behind TENX_CLI_EXPERIMENTAL

New src/lib/experimental.ts exposes experimentalEnabled() and
requireExperimental(), which exits with a stable 'experimental_locked'
envelope (exit 4 FORBIDDEN) unless TENX_CLI_EXPERIMENTAL=1 (or 'true')
is set. bench-kit stays registered so help remains discoverable and the
command never dies silently, but its action is locked before any side
effects. This lets the branch merge to master ahead of the feature
being student-ready.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

* feat: hide experimental commands entirely without the opt-in

All-or-nothing per review: registerBenchKitCommand returns early when
TENX_CLI_EXPERIMENTAL is unset, so bench-kit is absent from --help and
behaves like any unknown command instead of appearing half-locked. The
requireExperimental gate stays in the action as defense in depth.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

---------

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
2026-08-13 20:36:43 +02:00