bchanot

bchanot a împins spre master la bchanot/bchanot-cv

50 minute în urmă

bchanot a împins spre master la bchanot/bchanot-cv

  • aa52153b2c docs(memory): BLK-001 favicon 404 in prod — Dockerfile COPY whitelist Root cause + fix logged. New repo assets must be added to Dockerfile COPY whitelist explicitly; future option = glob pattern if asset count grows. Journal updated. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
  • f1e4392c65 fix(docker): COPY favicon assets into image + cache header Dockerfile selectively COPYs files into /usr/share/nginx/html. Favicon assets (favicon.svg, favicon-32.png, favicon.ico, apple-touch-icon.png) were added to the repo in ef31fb3 but never wired into the Dockerfile, so a rebuilt container served 404 for /favicon.svg and friends — broken favicon in prod even after `docker compose up -d --build`. nginx.conf gets a matching long-cache rule for icon/image assets (30 days, immutable, access_log off) — they rarely change and the file name is the cache key anyway. Deploy: on the VPS, `docker compose up -d --build`. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
  • Vizualizați comparația pentru aceste 2 consemnări »

1 oră în urmă

bchanot a împins spre master la bchanot/bchanot-cv

1 oră în urmă

bchanot a împins spre master la bchanot/bchanot-cv

  • 86d4c729ed docs(memory): capitalize BDR-005 favicon strategy + LRN-002 PIL icon recipe - BDR-005: SVG primary + PIL-generated PNG/ICO fallback for favicon set; alternatives (rsvg-convert/inkscape, SVG-only, online generator) rejected with reasons; CV mirror deferred to user finalization. - LRN-002: PIL supersample x8 + Lanczos downscale produces clean small-format icon antialiasing without rsvg-convert/inkscape/ImageMagick. - journal: 2026-05-17 entry — extended-vitrine refactor (1369d27) + favicon set (ef31fb3); CV files left untouched (user WIP). Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
  • ef31fb3059 feat(landing): add favicon set — SVG primary + PNG/ICO fallback Brand pulse-dot translated to favicon: dark rounded square (#0d1b12) + inner green dot (#6ab98a) + faint outer ring (#2d7a4f @60%). Identical visual language to .brand::before in the nav. Assets: - favicon.svg — vector primary (modern browsers, scales) - favicon-32.png — PNG hint - favicon.ico — legacy multi-size (16/24/32/48) - apple-touch-icon.png — iOS home-screen 180x180 PIL-generated PNG/ICO at 8x supersample + Lanczos downscale for clean antialiasing. No external dependency added (PIL already on system). index.html: 4 <link> tags wired in <head> (SVG, PNG 32, ICO alternate, apple-touch). CV HTML left untouched; browser auto-fetches /favicon.ico from root as fallback — TODO logged to mirror the link block when the user finalizes CV edits. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
  • 1369d27b5b feat(landing): extended-vitrine refactor — CV-aligned, +Projets, +Méthode Landing now says more than the CV instead of duplicating it. - meta/title: synced with new positioning (kernel, AOSP, cloud gaming, GPU) - nav: added #projets and #methode anchors - hero: subtitle "Développeur Systèmes · Embarqué · Backend", tech banner Backend·Cloud - about: senior wording + 3 new paragraphs (philosophy, target context, what I'm not chasing) - stack: 6 → 8 cards - dropped VMware, Gitflow, Agile - added cgroups, namespaces, SELinux, GitHub Actions - new Cloud/Infra card (AWS EC2, g4dn bare-metal, IAM, S3, CloudWatch, Scaleway VPS, OVH/Hetzner, Nginx, Apache, Let's Encrypt) - new IA/Outils card (Claude Code agents/skills, N8N, automation) - Familier avec: C++ sub-row in Langages - parcours: removed lone-wolf wording (seul / responsable unique); CareGame / ZenQuality / Deewee rewritten as intro + technical bullets + per-experience stack pills; Deewee dates corrected to fév.-nov. 2017 with Stage 42 + CDD contract line - new Projets section between Parcours and Formation: Git auto-hébergé (git.bchanot.fr) and Homelab - new Méthode section between Formation and Contact: 5 habits - contact email: chanot.bastien@gmail.com → bastien@bchanot.fr - CSS: extensions only (.timeline-bullets, .timeline-stack, .timeline-intro, .timeline-contract, .projects-grid, .project-card*, .methode-list, .methode-item, .methode-num, .stack-note, .pill-context), all reusing existing design tokens TODO.md tracks the refactor milestone. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
  • Vizualizați comparația pentru aceste 3 consemnări »

1 oră în urmă

bchanot a împins spre master la bchanot/claude

  • a8c0bde367 memory: capitalize 2026-05-15 — BDR-016 + LRN-019 (doc-syncer rework) BDR-016: doc-syncer makes README AUTO+unconditional (no skip at validation gate, only yes/edit) and DEPLOY.md prod-only with a 14-section VPS-deploy template. Mixed dev/prod DEPLOY.md flagged as drift; dev quick-start lives only in README. LRN-019: deployable-project doc split by audience — README = dev + features, DEPLOY = ops + SRE. 14-section template mirrors real VPS-deploy shape (topology, env, provisioning, two-layer firewall, Docker tuning, persistence, backups, TLS, observability, hardening, rollback, runbook). Drop sections that don't apply. journal: 2026-05-15 heading covering the /commit-change run. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
  • 59ff561c55 memory: capitalize 2026-05-15 — BDR-016 + LRN-019 (doc-syncer rework) BDR-016: doc-syncer makes README AUTO+unconditional (no skip at validation gate, only yes/edit) and DEPLOY.md prod-only with a 14-section VPS-deploy template. Mixed dev/prod DEPLOY.md flagged as drift; dev quick-start lives only in README. LRN-019: deployable-project doc split by audience — README = dev + features, DEPLOY = ops + SRE. 14-section template mirrors real VPS-deploy shape (topology, env, provisioning, two-layer firewall, Docker tuning, persistence, backups, TLS, observability, hardening, rollback, runbook). Drop sections that don't apply. journal: 2026-05-15 heading covering the /commit-change run. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
  • f57a7f2524 chore(settings): enable ui-ux-pro-max skill Toggle ui-ux-pro-max@ui-ux-pro-max-skill false → true so design-review, design-consultation, and feat/hotfix design gate can route through it. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
  • b0d129be27 chore(settings): enable ui-ux-pro-max skill Toggle ui-ux-pro-max@ui-ux-pro-max-skill false → true so design-review, design-consultation, and feat/hotfix design gate can route through it. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
  • 7ee9b42203 feat(doc-syncer): README mandatory + 14-section prod-only DEPLOY.md README.md creation becomes AUTO and unconditional — strikes through any "no README" opt-out in CLAUDE.md. Enriched template: Stack, Quick start (dev), Verifying a change, Build & deploy sections, all rendered from real project data (manifest, .env.example, scripts). DEPLOY.md becomes prod-only, expanded into a 14-section VPS-deploy structure (topology, env, provisioning, two-layer firewall, Docker tuning, first-time setup, routine deploys, persistence, backups, TLS, observability, hardening, rollback, runbook). Dev quick-start lives in README only — mixed dev/prod DEPLOY.md is flagged as drift. AUTO MODE: missing README surfaced as SIGNIFICANT in STEP A4 with rendered draft for one-shot end-of-session approval. Validation gate (STEP 8) now distinguishes AUTO patches / HUMAN items / CREATE items, and README CREATE has no "no" — only yes/edit. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
  • Vizualizați comparația pentru aceste 348 consemnări »

1 zi în urmă

bchanot a împins spre master la bchanot/claude

  • a8c0bde367 memory: capitalize 2026-05-15 — BDR-016 + LRN-019 (doc-syncer rework) BDR-016: doc-syncer makes README AUTO+unconditional (no skip at validation gate, only yes/edit) and DEPLOY.md prod-only with a 14-section VPS-deploy template. Mixed dev/prod DEPLOY.md flagged as drift; dev quick-start lives only in README. LRN-019: deployable-project doc split by audience — README = dev + features, DEPLOY = ops + SRE. 14-section template mirrors real VPS-deploy shape (topology, env, provisioning, two-layer firewall, Docker tuning, persistence, backups, TLS, observability, hardening, rollback, runbook). Drop sections that don't apply. journal: 2026-05-15 heading covering the /commit-change run. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
  • f57a7f2524 chore(settings): enable ui-ux-pro-max skill Toggle ui-ux-pro-max@ui-ux-pro-max-skill false → true so design-review, design-consultation, and feat/hotfix design gate can route through it. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
  • 7ee9b42203 feat(doc-syncer): README mandatory + 14-section prod-only DEPLOY.md README.md creation becomes AUTO and unconditional — strikes through any "no README" opt-out in CLAUDE.md. Enriched template: Stack, Quick start (dev), Verifying a change, Build & deploy sections, all rendered from real project data (manifest, .env.example, scripts). DEPLOY.md becomes prod-only, expanded into a 14-section VPS-deploy structure (topology, env, provisioning, two-layer firewall, Docker tuning, first-time setup, routine deploys, persistence, backups, TLS, observability, hardening, rollback, runbook). Dev quick-start lives in README only — mixed dev/prod DEPLOY.md is flagged as drift. AUTO MODE: missing README surfaced as SIGNIFICANT in STEP A4 with rendered draft for one-shot end-of-session approval. Validation gate (STEP 8) now distinguishes AUTO patches / HUMAN items / CREATE items, and README CREATE has no "no" — only yes/edit. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
  • 1bf02eaa61 memory: capitalize darwin 2026-05-12 — LRN-017/018 + BLK-003 + BDR-015 LRN-017: thin-dispatcher SKILL.md round-1 invariant = fallback + triggers. LRN-018: darwin eval subagents drift on total math (factor-10, D8 weight). BLK-003: scripts/screenshot.mjs hardcoded macOS path blocks PNG cards on Linux. BDR-015: exclude broken gstack symlinks from /darwin-skill scope. journal: 2026-05-12 session entry. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
  • fa768cb2ef merge darwin: bottom-5 skill optimization round 1 Avg score 58.0 → 78.2 across status, refactor, plugin-check, skills-perso, commit-change. See .claude/audits/DARWIN-SKILL-2026-05-12.md. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
  • Vizualizați comparația pentru aceste 11 consemnări »

1 zi în urmă

bchanot a împins spre master la bchanot/bchanot-cv

1 zi în urmă

bchanot a împins spre master la bchanot/config

1 zi în urmă

bchanot a împins spre master la bchanot/config

1 zi în urmă

bchanot a împins spre master la bchanot/config

1 zi în urmă

bchanot a împins spre master la bchanot/bchanot-cv

  • 08220bd024 docs(memory): journal entry for formation copy fix Co-Authored-By: Claude <noreply@anthropic.com>
  • e1d75d8b1e fix(formation): correct copy and remove inaccurate CareGame line - Section title now anchors the "bas niveau" thread across both schools. - Section intro: drop <em> for consistency with other section-intro blocks. - École 42 description rewritten to surface kernel/memory/shell/security focus. - TSRIT: remove false claim about stage transformed into CDI at CareGame (CareGame internship dates from 2018-2019 during 42, not 2015 TSRIT). Co-Authored-By: Claude <noreply@anthropic.com>
  • Vizualizați comparația pentru aceste 2 consemnări »

1 zi în urmă

bchanot a împins spre master la bchanot/bchanot-cv

  • c2e1dd30a8 docs(memory): backfill registries for docker, certbot, formation decisions.md — log BDR-004 (containerize site with nginx:alpine behind reverse proxy): rationale, hardening flags (read_only, cap_drop, no-new-privileges, tmpfs), alternatives rejected (bare nginx, Caddy/Traefik). Reference commits: 7957b04. learnings.md — log LRN-001 (certbot --nginx matches `server_name`, not filename): root cause was leftover `server_name autreprojet.fr` in `sites-available/bchanot.fr`. Future check: `grep -n "server_name" /etc/nginx/sites-enabled/*` before any certbot install on a multi-site VPS. journal.md — 5 lines covering docker setup, git init + remote + push, certbot diagnose + fix, prior commit batch, and today's feat(formation) section work (commit 1d5fbfa). Co-Authored-By: Claude <noreply@anthropic.com>
  • 1d5fbfa148 feat(formation): add dedicated Formation section + nav link, remove Formation aside from Contact - New <section id="formation"> between Parcours and Contact, reusing timeline + card visual components from the existing system (palette, typos, animations). - École 42 (2015–2019): 3 theme cards (Systèmes & Kernel · Bas niveau & Outils système · Sécurité & Algorithmie) with project list + concise technical proof for each entry (no scolarisms). - TSRIT — Next Formation (2013–2015): BTS + "Félicitations du jury" badge, réseau/TCP-IP/admin Linux fundamentals, stage transformed into CareGame CDI. - Nav: "Formation" link inserted between Parcours and Contact. - Contact: removed the old <aside class="contact-side"> Formation block and the now-unused .contact-side / .education / 2-col contact-grid CSS; .contact-list becomes 2-col on >=768px to fill the freed space. Co-Authored-By: Claude <noreply@anthropic.com>
  • Vizualizați comparația pentru aceste 2 consemnări »

1 zi în urmă

bchanot a împins spre master la bchanot/bchanot-cv

1 zi în urmă

bchanot a împins spre master la bchanot/bchanot-cv

  • 7957b04de0 feat(docker): containerize site with configurable host port Add Dockerfile (nginx:1.27-alpine), nginx.conf (gzip, cache, CSP and security headers, no HSTS — left to outer proxy), and docker-compose service `bchanot-web`. Host port is configurable via PORT env var (default 8080) and bound to 127.0.0.1 so the container sits behind a reverse proxy. Container hardened with read_only fs, cap_drop ALL, no-new-privileges, and tmpfs for nginx runtime dirs. Healthcheck via wget on /. Also adds .dockerignore and .env.example, and ignores .env. Usage: cp .env.example .env docker compose up -d --build Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
  • 54e830016c chore: initial commit — landing page + CV + Claude config Single-page static site at bchanot.fr: landing (index.html) and CV (HTML + PDF), pure HTML/CSS/JS, no build step. Includes project conventions (CLAUDE.md), README, and .claude/ memory/tasks/audits scaffolding. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

1 zi în urmă

bchanot a creat o ramură nouă master la bchanot/bchanot-cv

1 zi în urmă

bchanot a creat un repozitoriu bchanot/bchanot-cv

1 zi în urmă

bchanot a împins spre master la bchanot/claude

  • cff445651f fix(prune-memory): STEP 4 verify — prefix mapping bug (TDD RED→GREEN) First end-to-end run of /prune-memory on real .claude/memory/ surfaced a broken verify script: Old: `prefix=$(basename "$f" .md | tr a-z A-Z | cut -c1-3)` derived the prefix from the filename's first 3 letters → produced DEC / LEA / BLO. Actual prefixes are BDR / LRN / BLK. The grep then matched zero entries, no MISSING/ORPHAN was ever reported, and the script printed its "OK if blank" footer regardless of real state. False clean signal. Fixed: hard-mapped filename → prefix via `declare -A PREFIX_MAP`. Verified against current registries — 14 BDR + 16 LRN + 2 BLK + 1 EVAL entries all index-consistent, no false negatives. Added EVAL prefix to the map (evals.md was missing from the loop in v1). Footer line clarified to `(blank above = OK)`. `wc -l` excludes `.original.md` backups from the output. Note: caveat in skill body said "v1 ships without baseline TDD test — STEP 2 approval gate is the safety net". First real test caught a verify bug that bypassed STEP 2 entirely. Lesson: STEP 4 is its own safety net and needs its own test. Co-Authored-By: Claude <noreply@anthropic.com>
  • c85c1f742b fix(memory): BDR-011 body status — superseded by BDR-013 /prune-memory first run flagged body↔Index drift on BDR-011: - Index row (since 2026-05-11): `superseded by BDR-013` - Body line 201 (since 2026-05-07): `Status: accepted` BDR-013 explicitly supersedes BDR-011's 4-chapter doc structure with 6-chapter restructure (scores+NAP promoted). Body now consistent with Index. Co-Authored-By: Claude <noreply@anthropic.com>
  • 4e6ef5a329 feat(skills): add /prune-memory — curate .claude/memory/ registries New personal skill to maintain memory registry hygiene. Gap identified between existing tools: - /caveman:compress — text-compresses one file, no curation - /close — appends new entries end-of-session, doesn't prune - /prune-memory (new) — audits, classifies, applies user-approved cleanup Operations: - Mark obsolete entries `status: superseded by <ID>` or `status: deprecated` (no hard delete — append-only per CLAUDE.md memory rule). - Merge similar entries (new ID, sources marked superseded). - Caveman-compress bloated prose-heavy entries inline. - Repair Index drift (missing rows, orphaned rows). Workflow: STEP 0 precheck (refuses dirty working tree, git = backup) → STEP 1 audit (A obsolete / B similar / C bloated / D drift) → STEP 2 plan + mandatory user approval → STEP 3 apply safe→destructive → STEP 4 verify Index sanity + line-count report. Follows superpowers:writing-skills CSO conventions: "Use when..." trigger description (under 1024-char spec), Quick Reference table, Common Mistakes table, Failure Paths table. v1 ships without baseline TDD test (noted in skill body); STEP 2 approval gate is the safety net. Co-Authored-By: Claude <noreply@anthropic.com>
  • Vizualizați comparația pentru aceste 3 consemnări »

5 zile în urmă

bchanot a împins spre master la bchanot/claude

  • 3756391f7d docs(memory): BDR-013 + BDR-014 + LRN-014..016 + 2026-05-11 journal append decisions.md: - BDR-013: client-handover 6-chapter doc — promote scores §2 + NAP §4 (supersedes BDR-011 4-chapter structure). - BDR-014: personal SKILL.md descriptions follow "Use when [triggers]…" pattern + 1024-char frontmatter spec limit. - Backfilled missing BDR-012 Index row (entry existed in body, Index skipped in prior session). learnings.md: - LRN-014: pandoc base gfm strips header id attrs — need `gfm+gfm_auto_identifiers` for internal anchor links. - LRN-015: BrightLocal Free Tools retired 2026 — Moz Local Citation Checker is current free NAP-audit replacement. - LRN-016: pandoc GFM checkbox markup breaks adjacent-sibling CSS — target `li > input[type="checkbox"]` directly, not `+ *` siblings. - Backfilled missing LRN-013 Index row. journal.md: - 2026-05-11 session: orchestrator audit + writing-skills CSO fixes + client-handover 6-chapter restructure + 4 atomic commits b15b275..1da6a31. Co-Authored-By: Claude <noreply@anthropic.com>
  • 1da6a3183e refactor(skills): compress 8 SKILL.md descriptions per writing-skills spec Two issues fixed across personal skills: 1. Five skills had frontmatter > 1024 chars (spec limit per agentskills.io): - client-handover: 1920 → 924 - doc: 1390 → 734 - seo: 1378 → 885 - geo: 1189 → 734 - validate: 1050 → 742 All now compliant. 2. Three orchestrators had workflow-summary descriptions that create "shortcut" risk per writing-skills CSO (Claude may follow the description instead of reading the full skill body, skipping steps): - ship-feature: "design → plan → implement (TDD) → review → finish" → "Use when shipping a feature end-to-end — needs… (9-step pipeline)" - init-project: "interview → design → scaffold → implement (TDD)" → "Use when initializing a brand-new project from scratch — needs…" - onboard: "detect archetype, install claude-config, run full audit…" → "Use when bringing an existing repo into the framework — needs…" Descriptions now follow "Use when [triggers]…" pattern. Workflow detail preserved in skill body where it belongs. Triggers consolidated and trimmed of duplicates. Co-Authored-By: Claude <noreply@anthropic.com>
  • 465fe9ec82 fix(client-handover): CSS — kill checkbox overlap with adjacent inline elements Old rule `li input[type="checkbox"] + *` absolutely-positioned the first element sibling after the checkbox (typically <a>, <code>, <strong>), yanking links and code spans out of flow and overlapping adjacent content in the rendered PDF. Replace with a targeted rule that styles the native disabled checkbox inline (small green box) and leaves siblings untouched. Pandoc GFM emits `<li><input disabled type="checkbox"> text…</li>` with no wrapper class, so we target `li > input[type="checkbox"]` directly. Co-Authored-By: Claude <noreply@anthropic.com>
  • abd2612541 fix(client-handover): NAP table — add description + swap BrightLocal→Moz Local NAP table now includes a "Description courte" / "Short description" field (1-2 sentences, lifted from hero/meta description, pasted identically across Google Business, Bing Places, Apple Maps, directories). Same field client was already typing 10 different ways across platforms — now it's the single source of truth. BrightLocal Free Tools page was retired in 2026 (service now paid-only). Replaced with Moz Local Citation Checker (free 60s audit across 50+ directories, no credit card). Both FR and EN versions updated. Co-Authored-By: Claude <noreply@anthropic.com>
  • b15b2759f9 feat(client-handover): 6-chapter doc — promote scores + NAP chapters Restructure deliverable from 4 to 6 chapters: - §2 (new): score table promoted from technical annex to top of doc for immediate visual proof of impact (tested with local-business clients — converts "what did I pay for?" doubt within 30 seconds). - §4 (new): NAP table promoted from §7 annex so client reads identity values (name, address, phone, hours, categories, short description) BEFORE attacking §5 todo list. Prevents 10-different-description drift across external platforms that degrades Google's NAP-consistency signal. - §5 (todo) and §6 (tech details) renumbered; §7/§8 annexes still optional. Pandoc bumped to gfm+gfm_auto_identifiers so internal anchor links like [§4](nap) resolve in the rendered HTML/PDF. Co-Authored-By: Claude <noreply@anthropic.com>
  • Vizualizați comparația pentru aceste 5 consemnări »

5 zile în urmă

bchanot a împins spre master la bchanot/claude

  • 054f1d7923 fix(client-handover): kill PDF text superposition (URL dupe + list page-break) Two distinct render bugs producing overlapping text on multi-page PDFs: 1. Bare-URL duplication. The print stylesheet injects `(href)` after every external link via `a[href^="http"]::after`. When pandoc/marked auto-links a bare URL or renders `[X](X)`, the visible text already equals the href, so the pseudo-element produces "URL (URL)" and the trailing duplicate wraps onto the next line, colliding with the following block (e.g. "https://pagespeed.web.dev/ (https://...)" then "• Ouvrir, taper l'URL..."). Fix: post-process the body HTML in handover-to-pdf.sh; tag every `<a href="X">X</a>` (text == href, ignoring trailing slash + case) with `class="bare-url"`, and exclude `a.bare-url::after` from the URL-injection rule. Named links still get `(URL)` for print legibility. Belt-and-braces: add `white-space: nowrap` and `break-inside: avoid` on the remaining `::after` so future long URLs cannot wrap across page boundaries either. 2. List item splitting across page boundary. `li` had only `orphans/widows: 3` and no `break-inside`, so a long item could put its bullet on page N and its text on page N+1, overlapping unrelated content. Heading-to-first-block adjacency was also unprotected, so "heading at bottom of page A / intro paragraph or first bullet at top of page B" could produce visual overlap during reflow. Fix: add `li { page-break-inside: avoid; break-inside: avoid; }` and `h{1..4} + p|ul|ol { break-before: avoid; }` so list items stay intact and intros stay glued to their heading. Verified end-to-end: rendered sample md with bare URL + named link + heading-followed-by-list straddling a page break; pdftotext shows each URL once, no orphaned bullets, no `::after` warning from weasyprint. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

1 săptămână în urmă