Commit Graph

139 Commits

Author SHA1 Message Date
Claude f4c9e740db chore: diagnose hosted CLI39 receipt access 2026-09-13 20:38:07 +02:00
Claude 638ea3477a fix(cli-release-repair): run version smoke with the production runtime (p3)
Use the actual Node entry with an isolated fixture and bounded processes.
Preserve version assertions and record regression gates and independent reviews.
Record operator-confirmed allowance restoration and one full CI retry.

Refs: https://github.com/przeprogramowani/10x-cli/pull/38, https://github.com/przeprogramowani/10x-toolkit/pull/31
2026-09-13 14:56:12 +02:00
Claude 4883721242 fix(cli-release-repair): resolve globally upgraded npm on Windows (p3)
Follow npm.cmd prefix selection without invoking a shell.
Add executable precedence, fallback and literal-argument regression coverage.
Record reviewed local gates and pending hosted exact-pair verification.

Refs: https://github.com/przeprogramowani/10x-cli/pull/38, https://github.com/przeprogramowani/10x-toolkit/pull/31
2026-09-13 14:29:10 +02:00
Claude a0bcd44a30 fix(cli-release-repair): validate promotion source and release handoff (p3)
Update exact producer selection and promotion ancestry regressions.
Document automatic versioning, recovery, contracts and operational gates.
Record local verification without claiming production release completion.

Refs: https://github.com/przeprogramowani/10x-cli/pull/38, https://github.com/przeprogramowani/10x-toolkit/pull/31
2026-09-13 14:18:51 +02:00
Claude ca19fe244f fix(cli-release-repair): automate exact-source publication under a lease (p2)
Update CLI CI/version workflows and version/publication helpers.
Add Toolkit coordinator/lease/evidence helpers and regression coverage.
Record approved amendments, review closure and local verification evidence.

Refs: https://github.com/przeprogramowani/10x-cli/pull/38, https://github.com/przeprogramowani/10x-toolkit/pull/31
2026-09-13 13:52:11 +02:00
Claude 8000d80071 fix(cli-release-repair): bind evidence to exact sources and attempts (p1)
Bind receipts and retained stages to exact commits, run attempts and artifact IDs.
Add release-only retained-byte evidence and regression coverage.

Refs: https://github.com/przeprogramowani/10x-cli/pull/38, https://github.com/przeprogramowani/10x-toolkit/pull/31
2026-09-13 12:49:29 +02:00
przeprogramowani b0c789af70 feat: enable v4 course selection and protected first-week sync (#38)
* docs(10xdevs4-cli-access): record membership gates and bootstrap context (p1)

Add canonical access plan, accepted decisions and supporting context.
Record phase 1 verification, Toolkit revision and remaining evidence gaps.

* docs(10xdevs4-cli-access): record course access gates and scoped review (p2)

Update canonical Progress, change status, evidence and implementation review.
Record Toolkit revisions, inherited typecheck limitation and phase 3 prerequisites.

* docs(10xdevs4-cli-access): persist reviewed revisions and phase 3 boundary

Record final reviewed Toolkit and CLI context revisions.
Persist Progress attribution and unresolved W04/W05/W08 prerequisites.
Keep phases 3–6, phase 7 and Manual criteria open.

* docs(10xdevs4-cli-access): record squash-safe source prerequisite

Record PR #30, verified gates, permanent-pin lessons and the remaining merge dependency.
Keep phase 3 and all manual rollout criteria pending.

* docs(10xdevs4-cli-access): record source prerequisite review

Record independent review of PR #30 and verified CI evidence.
Keep the master pin and delivery phase completion pending.

* docs(10xdevs4-cli-access): distinguish candidate checks from final master pins

Record passing pre-merge v4 checks and defer workflow suspension.
Keep the final v3 maintenance pin dependent on the resulting master SHA.

* feat: prepare v4 course delivery and protected project sync

Capture the reviewed implementation and manual rehearsal for draft PR review. Master source prerequisites, full clean verification and coordinated Windows CI remain open; production rollout is separate.

* fix: keep paid CI evidence private and converge cumulative sync

* docs: record merged source prerequisite and passing clean gate

* fix: preserve generated API type line endings on Windows

---------

Co-authored-by: Claude <noreply@anthropic.com>
2026-09-13 09:24:16 +02:00
github-actions[bot] f89f19506c chore(release): v1.20.0 v1.20.0 2026-08-20 08:22:03 +00:00
psmyrdek cc80394e16 docs(bench-kit): update post-init guidance 2026-08-20 10:21:18 +02:00
psmyrdek 8a6a32aca1 feat(tool-profiles): replace Windsurf with Devin Desktop 2026-08-20 10:21:18 +02:00
github-actions[bot] 503a9cb179 chore(release): v1.19.1 v1.19.1 2026-08-17 08:36:22 +00: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
github-actions[bot] cfb3c088f0 chore(release): v1.19.0 v1.19.0 2026-08-16 21:25:56 +00: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
github-actions[bot] b63d26e92f chore(release): v1.18.0 v1.18.0 2026-08-16 21:25:00 +00: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
github-actions[bot] 88b08e9812 chore(release): v1.17.0 v1.17.0 2026-08-16 17:43:36 +00: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
github-actions[bot] 4b0e0ab236 chore(release): v1.16.0 v1.16.0 2026-08-14 21:00:26 +00: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
github-actions[bot] 7787353da5 chore(release): v1.15.0 v1.15.0 2026-08-14 10:44:25 +00: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
github-actions[bot] cea2845bc5 chore(release): v1.14.0 v1.14.0 2026-08-14 10:41:25 +00: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
github-actions[bot] c15c274e75 chore(release): v1.13.0 v1.13.0 2026-08-13 19:13:22 +00:00
Przemek Smyrdek 846d9b45b3 Fix/lazy yaml import (#29)
* fix: lazy-load yaml so CLI startup stays within budget

The top-level 'yaml' import in bench-kit.ts is pulled in by index.ts,
so every CLI start paid for loading the YAML parser and the binary
smoke test's 50ms startup budget blew on CI (~58ms). Import yaml
dynamically inside registerBaseRepo — the only code path that needs
it.

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

* test: raise unix startup budget to 60ms

Local measurements show bench-kit added no startup cost (~38ms avg at
pre-bench-kit, merged, and lazy-import refs alike) — the 50ms budget
was simply too tight for shared CI runners, which hover just above it.

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

---------

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
2026-08-13 21:12:44 +02:00
Przemek Smyrdek 0f5c2b5858 fix: lazy-load yaml so CLI startup stays within budget (#28)
The top-level 'yaml' import in bench-kit.ts is pulled in by index.ts,
so every CLI start paid for loading the YAML parser and the binary
smoke test's 50ms startup budget blew on CI (~58ms). Import yaml
dynamically inside registerBaseRepo — the only code path that needs
it.

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
2026-08-13 21:02:27 +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
github-actions[bot] bf798bbe72 chore(release): v1.12.0 v1.12.0 2026-08-13 18:37:27 +00: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
psmyrdek 9842323d56 docs: document '10x bench' in README and usage guide skill
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-29 11:13:39 +02:00
github-actions[bot] 80ab7ffa57 chore(release): v1.11.0 v1.11.0 2026-07-29 09:09:34 +00:00
psmyrdek 8006da8efb feat(bench): add '10x bench' live leaderboard from 10xbench.ai
New public command (no auth) that fetches the preprocessed top-10
leaderboard from https://10xbench.ai/api/leaderboard.json and renders
color-coded score bars on stderr, or the standard JSON envelope when
piped. The bench client is deliberately separate from api-client.ts:
its own strict BENCH_BASE_URL allowlist, and non-JSON 200 responses
(the static site's catch-all) surface as bench_unavailable. Colors are
hand-rolled ANSI gated on stderr TTY + NO_COLOR; remote strings are
sanitized before printing.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-29 11:08:43 +02:00
“mkczarkowski” a4d56ca945 docs: refresh security policy and ignore Claude artifacts 2026-07-27 13:25:40 +02:00
github-actions[bot] 6c3bf48122 chore(release): v1.10.0 v1.10.0 2026-06-28 08:01:31 +00:00
Marcin Czarkowski b000e7bbdf feat(lesson-ref): accept lesson 0 for the m0l0 General Toolkit (#4)
Allow lesson numbers >= 0 so general, non-lesson-bound artifacts can be
fetched via m0l0 (e.g. `10x get m0l0`). Update the parser doc comment
and tests; lesson 0 is now valid, negatives still rejected by the regex.

Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-28 10:00:53 +02:00
github-actions[bot] 267f2fdd72 chore(release): v1.9.0 v1.9.0 2026-06-20 13:04:22 +00:00
“mkczarkowski” 5c1f03d491 chore(bulk-sync-update): impl-review report + status impl_reviewed
Save the full implementation review (F1–F4, all resolved) and bump
change.md status to impl_reviewed.
2026-06-20 12:35:58 +02:00
“mkczarkowski” d0d3795b73 fix(bulk-sync-update): atomic manifest write + SIGINT abort (impl-review F2/F3)
F2: writeManifest now writes to a sibling .tmp then renameSync into
place (matching saveAuth), so an interrupt mid-sweep can't truncate the
manifest into an unreadable state that drops all per-lesson tracking.

F3: the sync sweep's AbortController was inert (signal threaded but
abort never called). Wire process.once("SIGINT") to controller.abort()
so Ctrl-C cancels the in-flight fetch and stops the sweep at the next
lesson boundary; handler removed in finally.
2026-06-20 12:35:11 +02:00
“mkczarkowski” d2733fd2a3 chore(bulk-sync-update): close out plan (epilogue)
Final SHA write-back into Progress (phase 4 rows) + change.md → implemented.
2026-06-20 11:42:16 +02:00
“mkczarkowski” 26d70d513a docs(bulk-sync-update): document 10x sync (p4)
- README.md: 10x sync section (flags, report, remediation, exit codes, skills/prompts scope)
- CHANGELOG.md: Unreleased entry for sync + catalog contentHash + planBundle
- CLAUDE.md: sync & change-detection notes (cheap-skip digest, planBundle parity)
- plan.md: flip Progress rows 3.x SHA write-back + 4.1-4.3
2026-06-20 11:41:53 +02:00
“mkczarkowski” ec8a2a644d feat(bulk-sync-update): 10x sync command (p3)
- commands/sync.ts: new `10x sync` — enumerate, cheap-skip via catalog digest,
  fetch+apply, actionable report (per-resource remediation), worst-outcome exit
- index.ts: register sync command
- manifest.ts: LessonFilesEntry.catalogContentHash (digest-vs-digest skip), tolerant read
- writer.ts: applyBundle persists catalogContentHash (carried forward on plain get)
- tests/sync-command.test.ts: --all, default/--module, cheap-skip, changed, dry-run,
  conflict+remediation, --force, partial-failure exit 1, locked exclusion, digest round-trip
2026-06-20 11:37:51 +02:00
“mkczarkowski” ca4d0bf247 refactor(bulk-sync-update): planBundle() writer refactor + catalog contentHash type (p2)
- writer.ts: export pure planBundle() + WritePlan types; applyBundle now consumes
  it (shared computeFileAction/planRules) so classification and application can't drift
- api-content.ts: optional contentHash on LessonSummary (always-fetch fallback when absent)
- generated/api-types.ts: regenerated from local API — catalog lesson type carries contentHash
- tests/writer-plan.test.ts: planBundle/applyBundle parity (created/unchanged/clean/conflict)
2026-06-20 11:22:32 +02:00
“mkczarkowski” 061390acf8 chore(bulk-sync-update): record change context + phase 1 progress (p1)
Cross-repo change: the Phase 1 backend code landed in 10x-toolkit (52446dd).
This repo holds the change folder + plan; flips Progress rows 1.1-1.4.

- context/changes/bulk-sync-update/{change.md,plan.md,plan-brief.md,research.md}
2026-06-20 11:14:18 +02:00
github-actions[bot] b52b1be6cc chore(release): v1.8.0 v1.8.0 2026-06-02 07:31:25 +00:00
“mkczarkowski” 197db6b527 chore(archive): close disable-course-rules
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-02 09:30:43 +02:00
“mkczarkowski” 2993481628 fix(disable-course-rules): address impl-review F1/F2
F1: updateToolConfig now throws when the merged config has no `tool`
instead of silently persisting an invalid object a later read rejects
wholesale (dropping lang/acknowledgedOrphans).

F2: add command-level course-rules tests — strip-after-apply with
surrounding-content preservation, the human [removed] rules render
line, and the positive --course-rules CAC parse guard.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-02 09:30:43 +02:00
“mkczarkowski” d77e2250d1 docs(disable-course-rules): refine --no-course-rules example wording
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-02 09:30:43 +02:00
“mkczarkowski” ecb9a58ebd chore(disable-course-rules): close out plan (epilogue)
Land trailing edits: phase 3 SHA write-back into Progress, all manual
verification rows checked (verified live against ~/code/10xCards), and
change.md status → implemented.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-02 09:30:43 +02:00
“mkczarkowski” 6fb6ed6890 feat(disable-course-rules): command wiring, resolution & output (p3)
- src/commands/get.ts: register --no-course-rules, add tri-state
  resolveCourseRulesFlag (argv peek), merge-safe persistence via
  updateToolConfig (folds --lang persist, skips under --dry-run),
  explicit --type rules override, output (counts.rules 0 + [removed] line)
- tests/get-command.test.ts: resolver unit + opt-out/override/persist/dry-run
  integration; runGet mirrors process.argv
- README.md, CLAUDE.md: document the flag, persistence & override precedence

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-02 09:30:43 +02:00