Commit Graph

31 Commits

Author SHA1 Message Date
Claude a27e2c428c docs(plan): referral license sales — 3 links/user, 500 zł/license (checkpoint 7)
Add context/changes/referral-licenses (change.md + plan.md, status: planned).
Members hand out 3 referral links; invitee gets an automatic discount into a short
purchase funnel for a 500 zł license, referrer earns a kickback; non-buyers route
to lead magnets and the 10xDevs 4.0 hub via the existing leads-10xdevs-4 gate.

Plan covers the CLI-owned slice (10x referral command over a new lib module through
the api-client seam, per the examples catalog shapes) in 3 phases with the repo's
standard gates, pins cross-repo contracts (delivery API endpoints in 10x-toolkit,
funnel + lead gate in edu-platform) as explicit blocking dependencies, and lists
open pricing/expiry/host questions for the morning review. No implementation.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01GpGAGRG6UpHpCzxzgqXgMt
2026-07-27 23:30:08 +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