35 Commits

Author SHA1 Message Date
przeprogramowani 2525f86d88 chore(quality): integrate shared offline CLI gate (#47)
* chore(quality): integrate shared offline CLI gate

* chore(release): prepare v1.22.1

* docs(quality): record complete local gate and source provenance

---------

Co-authored-by: Claude <noreply@anthropic.com>
2026-09-17 10:57:35 +02:00
przeprogramowani a704a86311 feat(cli): install bundled helpers into an explicit project target (#45)
Co-authored-by: Claude <noreply@anthropic.com>
2026-09-14 13:24:36 +02:00
przeprogramowani 38dc7066b2 feat(auth): Circle message login (--method circle) 2026-09-14 06:28:48 +02:00
przeprogramowani b2150bae85 fix(release): preserve exact commit evidence through squash and publication 2026-09-13 20:57:09 +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
“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” 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
“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” 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
“mkczarkowski” 29ee156819 feat(disable-course-rules): writer opt-out & strip (p2)
- src/lib/writer.ts: add applyCourseRules?: boolean to ApplyOptions
  (default true); when false, skip writing the course block and strip an
  existing one via removeRulesBlockWithMarkers (rules.action "removed",
  honors dryRun)
- tests/writer.test.ts: opt-out strip / no-op / dry-run / default-idempotent

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-02 09:30:43 +02:00
“mkczarkowski” d8fab8c559 feat(disable-course-rules): config schema & merge-safe persistence (p1)
- src/lib/config.ts: add courseRules?: boolean to ToolConfig, drop
  non-boolean courseRules in readToolConfig, add merge-safe
  updateToolConfig(patch) (fixes latent lang/acknowledgedOrphans clobber)
- tests/config.test.ts: courseRules shape validation + updateToolConfig merge
- context/changes/disable-course-rules: change folder (change.md, plan.md, plan-brief.md)

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-02 09:30:43 +02:00
“mkczarkowski” 4d2db4bf9d chore(archive): close content-overwrite, cumulative-manifest, user-edit-protection, e2e
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-05-27 21:22:19 +02:00
“mkczarkowski” 796896ca26 chore(content-overwrite): track research change folder
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-05-27 21:18:04 +02:00
“mkczarkowski” 201d779bad chore(cumulative-manifest): close out plan + document cumulative manifest (epilogue)
Final SHA write-back into plan progress rows, change.md → implemented.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-05-27 20:55:08 +02:00
“mkczarkowski” c37f96f5c3 feat(cumulative-manifest): cumulative writer logic + scoped removal (p2)
Rewrite computeRemovals() for lesson-scoped removal with protected set.
Update manifest building to merge lesson entries, rebuild union files,
and seed from v2/v3-without-lessons manifests. Update existing cleanup
and removal tests for cumulative semantics. Add 8 new behavior tests
covering multi-lesson accumulation, protected-set, upgrade seeding.
Update CLAUDE.md with cumulative manifest documentation.

Files: src/lib/writer.ts, tests/writer.test.ts,
       tests/writer-profiles.test.ts, CLAUDE.md

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-05-27 20:54:41 +02:00
“mkczarkowski” 7c80b292f9 feat(cumulative-manifest): manifest schema extension (p1)
Add LessonFilesEntry type, lessons? field on CliManifest, isManifest()
validation for lessons, and buildUnionFiles() helper. Includes frame
brief, plan, and plan-brief for the change.

Files: src/lib/manifest.ts, tests/manifest.test.ts,
       context/changes/cumulative-manifest/{change,frame,plan,plan-brief}.md

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-05-27 20:49:19 +02:00
“mkczarkowski” 632a946c93 chore(cumulative-manifest): add research for folding into v3
Analysis of how cumulative per-lesson tracking integrates with
user-edit-protection's v3 manifest, proposed schema shape, upgrade
paths, computeRemovals() rewrite strategy, and interaction matrix.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-05-27 19:06:53 +02:00
“mkczarkowski” 134388a637 docs(user-edit-protection): close out plan + document writer conflict detection (epilogue)
- Update CLAUDE.md with conflict detection, manifest v3, and removal tracking docs
- Set change.md status to implemented
- Write final SHA references into plan progress section

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-05-27 18:29:47 +02:00
“mkczarkowski” e0b122c8a2 test(user-edit-protection): comprehensive behavior tests (p4)
- Conflict detection: clean update, user edit, matching edit, each resolution
- v2 manifest upgrade: false positive on diff, clean match, v3 upgrade, 3-way after upgrade
- Removal tracking: skill/prompt removals, empty on fresh, dry-run populates
- Hash persistence: stored after apply, preserved on skip, updated on overwrite/save_user
- Non-TTY conflict resolver: always skips without prompting
- Update get-command test types for new counts.removals field

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-05-27 18:28:52 +02:00
“mkczarkowski” 802ea46a63 feat(user-edit-protection): interactive prompts + output rendering (p3)
- Create conflict-prompt.ts with TTY/non-TTY conflict resolver factory
- Wire createConflictResolver and showUpgradeNotice into get command
- Add v2 manifest upgrade detection before applyBundle
- Render [removed] lines for skill/prompt/config removals
- Render conflict-specific action labels (conflict: overwritten/saved .user/skipped)
- Add removals to JSON output envelope with counts.removals
- Update get-command test for new counts shape

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-05-27 18:23:59 +02:00
“mkczarkowski” 536ccf6728 feat(user-edit-protection): writer three-way detection + removal tracking (p2)
- Make applyBundle() async with ConflictResolver callback injection
- Three-way conflict detection via stored content hashes in manifest
- Conflict resolutions: overwrite, save-as-.user.<ext>, skip
- Track removals in WriteResult.removals for downstream rendering
- Store per-file contentHashes and promptHashes in v3 manifest
- Update all tests for async applyBundle (writer + writer-profiles)
- Await applyBundle in get.ts command

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-05-27 18:21:22 +02:00
“mkczarkowski” ed64a987e1 feat(user-edit-protection): manifest v3 schema + contentHash utility (p1)
- Bump MANIFEST_VERSION to 3 with optional contentHashes/promptHashes fields
- Add contentHash() SHA-256 utility in manifest.ts
- isManifest() accepts both v2 and v3 for backward compat
- Update test assertions for v3 manifest version

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-05-27 18:16:40 +02:00
“mkczarkowski” 06d841f27a fix(e2e): review fixes — kill timer, fetch check, temp cleanup, earlyExit race
- cli.ts: add 60s kill timer to spawnCli, export cleanupTempDirs()
- auth-flow.test.ts: add earlyExit Promise.race + callback response check
- auth-setup.ts: check callback response status
- doctor.test.ts: use getE2EEnv().testEmail instead of hardcoded string
- all test files: add afterAll(cleanupTempDirs) hooks
- reviews/impl-review.md: save full review report

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-05-10 15:31:42 +02:00
“mkczarkowski” 3ce2819345 chore(e2e): close out plan (epilogue)
- plan.md: write SHA e95e9a0 to phase 5 progress rows
- change.md: status → implemented

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-05-10 15:18:04 +02:00
“mkczarkowski” e95e9a0c78 feat(e2e): CI workflow — e2e jobs and Windows smoke tests (p5)
- .github/workflows/ci.yml: add e2e + e2e-windows jobs with Resend secrets,
  extend check-windows with build:binary + smoke tests
- docs/reference/platform-support.md: update CI testing table to match reality
- context/changes/e2e/plan.md: mark phase 5 automated steps complete

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-05-10 15:16:12 +02:00
“mkczarkowski” b12e8ff572 feat(e2e): authenticated command tests — doctor, list, get (p4)
Files: tests/e2e/doctor.test.ts, tests/e2e/list.test.ts,
tests/e2e/get.test.ts, tests/e2e/support/auth-setup.ts,
context/changes/e2e/plan.md

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-05-10 15:08:27 +02:00
“mkczarkowski” d97ed75678 feat(e2e): auth flow e2e test with Resend magic-link verification (p3)
Files: tests/e2e/auth-flow.test.ts, tests/e2e/support/auth-setup.ts,
context/changes/e2e/plan.md

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-05-10 14:49:37 +02:00
“mkczarkowski” 9ec3798294 feat(e2e): auth-free e2e tests — global flags and unauthenticated auth (p2)
Files: tests/e2e/global-flags.test.ts, tests/e2e/auth-no-credentials.test.ts,
context/changes/e2e/plan.md

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-05-10 14:36:09 +02:00
“mkczarkowski” 40454c4eca feat(e2e): e2e infrastructure — spawn helper, Resend utility, env config (p1)
Files: tests/e2e/support/cli.ts, tests/e2e/support/env.ts,
tests/e2e/support/resend-magic-links.ts, tests/e2e/.env.test.example,
.gitignore, context/changes/e2e/{change,research,plan}.md

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-05-10 14:33:13 +02:00