2026-04-21strategymorning — BYG Marta v2 warm reply staged as Outlook draft
- **did**: Staged warm reply to Marta Fernandez (BYG, `martafernandez@byg.com`) as a draft in Adrian's Outlook, CC `b.szalkowski@sieruta.com`. Threaded to her 2026-04-17 "SMOPYC BYG" message via Graph `/createReply` + PATCH. Not sent — Adrian reviews in Outlook and presses Send.
- **finalized body changes vs earlier v2 draft**:
- Personal note filled: booth hospitality over the weekend visits (Adrian + Bartek came back a couple of times, did not find Marta on those later rounds).
- BYGonline sentence rewritten from forward-looking ("will set up today") to factual ("set the account up on Sunday").
- Sender locked: Adrian. CC: Bartek (override of earlier Adrian-solo plan — Marta's email addressed both of us).
- **learned**: email-sdk's `triage.stage_draft_response` uses `drafts.create` which emits `toRecipients` only; `ccRecipients` is silently dropped on the Exchange provider. Workaround: use email-sdk for auth, then Graph `/createReply` + PATCH direct. Graph inbox `$search` requires `ConsistencyLevel: eventual` header.
- **next**: Adrian sends → flip `v1.8-p143-byg-marta-v2-send` closed. Then v3 pitch pre-read triggers on Marta's call-slot confirmation. `ONE-PAGER.md`, `CALL-SCRIPT.md`, LinkedIn pre-read on Marta still owed before the call.2026-04-21strategymorning — Marta v2 humanization + font fix
- **did**: Rewrote the v2 body after user flagged AI-tells and grey unformatted rendering. Removed all em dashes (classic AI writing signal) and replaced with periods/commas/colons. Dropped "genuinely"+"genuinely" stacking. Simplified the signature (plain commas instead of middot separators). Swapped en-dash "Sieruta–BYG" to "Sieruta and BYG". Register matched to Marta's ("really nice"/"re-start"/"authorised"). Re-patched the Outlook draft; canonical `.md` updated to match live draft.
- **learned**: Two lessons for future Graph draft work. (1) Em dashes are a strong AI-writing signal for this user — use sentence breaks, commas, colons instead. Lock into any future outreach template. (2) When PATCHing draft body via Graph `/createReply`, bare `<p>` tags inherit grey styling from the reply-thread wrapper and collapse paragraph spacing. Wrap new content in `<div style="font-family: Calibri, sans-serif; font-size: 11pt; color: #000000;">` with explicit `margin:0 0 12px 0` on paragraphs. Template codified in `OUTREACH-DRAFT-v2-marta-reply.md` HTML-styling note.
- **next**: User refreshes Outlook Drafts, reviews, presses Send. Then flip `v1.8-p143-byg-marta-v2-send` closed.2026-04-21strategymorning — Marta v2 sig trim (footer duplication fix)
- **did**: Rewrote the draft body one more time after user added an Outlook account signature/footer. My previous body already included a title+phone+website sig block that would have duplicated the auto-appended footer on Send. New body ends on "Warm regards, Adrian" and lets Outlook's signature fill in identity + contact lines. Pre-patch safety: verified `lastModifiedDateTime` unchanged since my last patch before overwriting, so no user edits were clobbered.
- **learned**: When the user has an Outlook auto-footer configured (common for business accounts), drafts shouldn't embed full sig blocks in the body. First-name-only close ("Warm regards, Adrian") reads correctly whether the auto-footer fires or not. Codified in the canonical draft .md as a "signature handling" rule for all P143 outreach — applies equally to v3 pitch and all other partner drafts.
- **next**: User refreshes Outlook Drafts → reviews final body + auto-footer together → presses Send. Then `v1.8-p143-byg-marta-v2-send` closes.2026-04-21strategymorning — Marta v2 voice + font rewrite
- **did**: User flagged readability and font. The draft was reading corporate-exec rather than 37-yo Polish founder, and I had forced Calibri 11pt instead of his Aptos 12pt compose default. Rewrote the body: shorter sentences, dropped corporate vocab ("concretely", "build on that", "pre-read", "authorised distribution partnership"), mirrored Marta's register ("really nice", "somehow kept missing you"), mixed first-person "I" (personal asks) and plural "we" (company actions). Font stack switched to `Aptos, 'Aptos Display', 'Segoe UI', Calibri, sans-serif` at 12pt. Canonical `.md` synchronized to match live Outlook draft.
- **learned**: Lock voice guidance early. Codified a full voice profile in `memory/feedback_adrian_voice_profile.md` covering sentence length, vocabulary to avoid/prefer, pronoun mix, register calibration (mirror counterparty), close conventions, length targets, and Aptos 12pt styling. This applies to all other P143 partner outreach (Malaguti, Formiko, HKS, Daemo, Mantovanibenne, Trevi Benne, Promove, Eckart, Indeco, Dehaco, Konrad, Soosan, TMK, Hultdins, NPK, Baltrotors) and v3 pitch. Also: the first draft tried to do too much — sales pitch in paragraph 4 was a 40-word sentence. Warm reply should stay relationship-focused and save the depth for v3. Body length dropped from 170w to 135w, and it reads better.
- **next**: Adrian reviews in Outlook with his auto-footer, sends. Flip `v1.8-p143-byg-marta-v2-send` closed.2026-04-21strategymorning — Marta v2 sent + footer-color structural lesson
- **did**: Adrian sent the v2 warm reply. Reported that my PATCH had forced his auto-appended footer from its configured grey into black; he manually re-greyed before send. Closed `v1.8-p143-byg-marta-v2-send` → moved to Recently closed.
- **learned (structural, applies to all future P143/P148/pitch drafts)**:
1. **Root cause of the grey-to-black footer**: my draft body wrapped content in `<div style="... color: #000000; ...">`. On Send, either Outlook's signature-injection placed the auto-signature inside my wrapper div, or its HTML sanitizer propagated my wrapper's explicit color into the signature zone. Leaf elements of the signature that didn't carry their own `color` inline inherited black. Adrian's corporate grey was overridden.
2. **Structural fix — primary path**: for prose-heavy drafts, use Graph `/createReply` with a `comment` plain-text body + `message.ccRecipients` for CC. Outlook generates HTML natively using the user's compose defaults — Aptos 12pt body, grey auto-signature, correct threading. Zero CSS from our side, zero style collision. One API call, no PATCH. This is what should have been used from the start.
3. **Fallback — secondary path**: when rich HTML is truly needed (tables, inline bold, structured lists), put ALL styling inline on leaf elements — never `color` on a wrapping div. Each `<p>` carries its own font-family/size/color. Wrapper divs only for structural grouping, no style declarations.
4. **Decision tree**: 99% of partner outreach is prose → path 1. Only v3-style structured pitches with bold/lists might warrant path 2, and even those are usually fine as plain text.
- **memorialized**: `memory/feedback_outlook_graph_draft_styling.md` fully rewritten with the decision tree + worked examples for both paths. `memory/feedback_adrian_voice_profile.md` cross-links.
- **next**: v3 distributor pitch pre-read — will use path 1 (plain text via `comment`). Triggers when Marta confirms a call slot. Before the call: `ONE-PAGER.md`, `CALL-SCRIPT.md`, Marta LinkedIn 5-min pre-read.
2026-04-21strategyevening — P160 Turn B: deploy pipeline wired + multi-project pivot
- **did**: Turn B landed. `dashboard/Dockerfile` (node:22-alpine multi-stage, pnpm via corepack, standalone output, non-root 1001), `.github/workflows/dashboard.yml` (multi-arch buildx, gha cache, GHCR push on `dashboard/**` + `.planning/**` changes), `dashboard/helm/` chart (Chart + values + 5 templates: Deployment/Service/Ingress/PVC/SA + helpers). `helm template` renders 5 kinds clean; `kubectl apply --dry-run=client` green. k8s namespace `strategy-dashboard` created on cluster; Kyverno auto-cloned `ghcr-creds` pull secret from the `argocd` namespace via existing `clone-ghcr-creds` policy (zero manual step). Cross-repo ArgoCD Application YAML written to `asem89/infra:argocd/apps/strategy-dashboard.yaml` (sync+prune+selfHeal automated, CreateNamespace=true). Ready to commit + push.
- **design pivot (before code)**: Dropped the original GitHub-Issues capture design. User flagged "do we need a GH PAT at all?" — correct. We don't. Rewrote capture as JSONL-to-PVC (`/data/<project>/inbox.jsonl`), added `/inbox` view + `/api/inbox/archive` move-to-archive route, and made the whole capture flow multi-project from day 1: POST `/api/capture` accepts `{project}` (default `sieruta-strategy`), validated by slug regex `^[a-z0-9][a-z0-9-]{0,48}[a-z0-9]$`. Smoke verified: sieruta-strategy + linkedin-ops captures land in separate dirs, `/inbox?project=linkedin-ops` correctly filters, archive round-trip green. Removed `@octokit/rest` + `lib/github.ts` entirely.
- **learned**: Three things. (1) **Kyverno does the pull-secret cloning for us.** New namespaces get `ghcr-creds` auto-copied from `argocd` ns via ClusterPolicy `clone-ghcr-creds`; no manual `kubectl get secret | sed | apply` dance. Codify for future app-deploys. (2) **rtk filter truncates large stdout when redirected to disk.** `helm template ... > /tmp/render.yaml` gave a 41-line file that clipped mid-Service block. Bypass via `rtk proxy helm template ...` for full 163-line render. Already captured in rtk-bypass skill; applied it here. (3) **The strategy dashboard is multi-project by design going forward.** Saved to `memory/project_dashboard_multi_project_intent.md`: linkedin-ops + consulting-strategy + others drop in via adapters in v1.1; capture endpoint is multi-project TODAY; read views (open-loops / partners / journal / activity) stay sieruta-strategy-flavored for v1. URL `strategy.*` may migrate to `ops.*` later.
- **decisions**: (a) Keep URL `strategy.dev.piadda.pl` and Helm release `strategy-dashboard` for ship-today scope; rename tracked as v1.1 open loop `rename-ops-scope`. (b) Image tag strategy `:latest` with `imagePullPolicy: Always` + `strategy.type: Recreate` (RWO PVC rules out rolling). Deployment-level restart on new image via `argocd-image-updater` is v1.1 `image-updater`. (c) PVC storageClass `local-path` (k3s default); backup policy tracked as v1.1 `inbox-pvc-backup`.
- **blocked**: Nothing for this session. After push: CI builds image (~12-18 min multi-arch), ArgoCD syncs chart, cert-manager issues TLS, external-dns creates A record. Turn C (CF Access + handoff test) is next and requires Adrian's browser for the CF Zero Trust Application setup.
- **next**: (1) commit + push sieruta-strategy main → CI triggers. (2) commit + push infra main → ArgoCD registers app and syncs. (3) watch CI, verify image in GHCR. (4) verify ArgoCD Synced + Healthy, pod Running, cert Ready. (5) brief public-reachable window at `https://strategy.dev.piadda.pl` (X-Robots-Tag: noindex already set) — acceptable while Turn C lands same session. (6) Turn C: CF Access Application (Adrian, ~5 min browser) + handoff test from phone.
---2026-04-21strategyafternoon — P160 Turn A: dashboard views + capture endpoint live locally
- **did**: Turn A of P160 executed. Added 4 parsers (`parsePartners`, `parseJournal`, `parseActions`, `github`) + 4 pages (`/partners`, `/journal`, `/activity`, `/capture`) + POST `/api/capture` to the `dashboard/` Next.js app. Smoke (`pnpm tsx scripts/smoke.ts`) returns 67 loops / 48 partners / 18 journal entries / 23 actions from live `.planning/**`. `pnpm build` green. `next start` on :3100 serves HTTP 200 on all 5 routes. `/api/capture` fail-closes correctly on each of: missing CF Access header (401), missing `ALLOWED_EMAILS` env (500), email not on allowlist (401), malformed JSON (400), invalid `type` (400), missing GH token (500).
- **learned**: Two things. (1) **Tailwind 4.0.0 ships with a broken oxide scanner binding** (`Missing field 'negated' on ScannerOptions.sources` at build time); bumping both `tailwindcss` and `@tailwindcss/postcss` to 4.1.11 fixes it. Lock 4.1.x as the minimum for any Tailwind v4 project on this VPS. (2) Port 3000 on this VPS is already occupied by another Next.js dev server (likely sieruta.com) — use `PORT=3100` for any local dashboard smoke test to avoid EADDRINUSE and misleading 307 redirects. Default in README should reflect 3100 until we audit the other occupant.
- **decisions**: `/api/capture` now fails closed (500) when `ALLOWED_EMAILS` env is unset, rather than the plan's original fallback of "pass if allowlist empty". Defense-in-depth: CF Access is the primary gate, origin allowlist is the belt-and-suspenders, and an empty allowlist at origin must never be a silent bypass. The Helm `values.yaml` in Turn B hardcodes the 3 emails so production is safe by default.
- **blocked**: Nothing for Turn B. GitHub fine-grained PAT (scoped Issues: Read/write on `asem89/sieruta-strategy`) is the one-time browser action owed before first deploy; `manage-secrets` skill handles the disk write.
- **next**: Turn B — Dockerfile (multi-stage, node:22-alpine, `COPY .planning`), `.github/workflows/dashboard.yml` (multi-arch GHCR push on `dashboard/**` + `.planning/**` changes), `dashboard/helm/` chart (mirror `piadda-com-website`), namespace + secrets on k3s, cross-repo ArgoCD Application YAML in `asem89/infra`, `inbox` label on GitHub repo. One session.
2026-04-21v1.8morning — BYG Marta v2 warm reply staged (P143)
- **did**: v2 warm reply to Marta Fernandez (BYG) staged as Outlook draft via email-sdk + Graph `/createReply` + PATCH (workaround for SDK dropping CC). Threaded to her 2026-04-17 "SMOPYC BYG" message; To `martafernandez@byg.com`, CC `b.szalkowski@sieruta.com`, Subject `RE: SMOPYC BYG`. Body finalized with booth-hospitality personal note and Sunday-activation confirmation.
- **learned**: BYG internal domain is `byg.com` (Marta's address). Thread subject at BYG side: "SMOPYC BYG ". One-day target slip (planned Mon 2026-04-20, staged Tue 2026-04-21) still within the 48h warmth window from her 2026-04-17 email.
- **blocked**: Nothing on our side; Adrian reviews and presses Send in Outlook.
- **next**: On send → close `v1.8-p143-byg-marta-v2-send`. Parallel open loops still active: ONE-PAGER, CALL-SCRIPT, Marta LinkedIn pre-read, v3 pitch pre-read.
---
2026-04-21v1.8morning — v2 SENT + footer-color lesson
- **did**: Adrian sent the warm reply to Marta (BYG). Footer-color issue caught manually by Adrian before send (grey → black cascade from my wrapper div).
- **learned**: For future drafts in v1.8 (v3 pitch + all P143 partner outreach), default path is Graph `/createReply` + `comment` plain text. Outlook handles font/color/signature natively. Only use HTML PATCH when rich formatting is necessary, and even then put styles on leaf elements only. Full lesson in strategy journal 2026-04-21 stanza and `memory/feedback_outlook_graph_draft_styling.md`.
- **next**: v3 pitch triggers on Marta's call-slot reply. ONE-PAGER, CALL-SCRIPT, LinkedIn pre-read still owed before the call.
---
2026-04-21v1.8afternoon — P160 Turn A: dashboard views + capture endpoint
- **did**: Landed 4 markdown/JSONL parsers (`parsePartners.ts`, `parseJournal.ts`, `parseActions.ts`, `github.ts` helper) + 4 pages (`/partners`, `/journal`, `/activity`, `/capture`) + POST `/api/capture` Node-runtime route in `dashboard/`. Smoke tooling `scripts/smoke.ts` runs all 4 parsers and reports counts. Build green, local smoke green on :3100. Closed 6 P160 sub-loops (md-parser + 5 views). Bumped Tailwind `4.0.0 → 4.1.11` to fix oxide scanner binding mismatch.
- **learned**: `/api/capture` fail-closes on every error axis (missing CF header, unset `ALLOWED_EMAILS`, email not on allowlist, bad JSON, bad `type`, missing GH token). Origin-side allowlist treats unset env as misconfiguration (500), never as silent bypass.
- **blocked**: Turn B needs GitHub fine-grained PAT (Issues: read/write on `asem89/sieruta-strategy`, 90d) — single one-time browser action by Adrian before first deploy; stored via `manage-secrets`.
- **next**: Turn B — Dockerfile + CI workflow + Helm chart + ArgoCD Application YAML + namespace/secrets + `inbox` label. Target: deployed at `https://strategy.dev.piadda.pl` (briefly unauthenticated between deploy and Turn C; `X-Robots-Tag: noindex` already live). Turn C: CF Access Application + handoff test.
---
2026-04-21v1.8evening — P160 Turn B: deploy pipeline + multi-project pivot
- **did**: Dockerfile (node:22-alpine multi-stage, pnpm, non-root), GHCR CI workflow (multi-arch on `dashboard/**` + `.planning/**`), Helm chart (deployment/service/ingress/pvc/sa + helpers), k8s namespace + pull secret (Kyverno auto-cloned), cross-repo ArgoCD Application YAML in `asem89/infra`. `helm template` and `kubectl dry-run` green.
- **pivot**: Dropped GitHub-Issues capture + `@octokit/rest` dep. Rewrote capture as PVC-backed JSONL at `/data/<project>/inbox.jsonl`; added `/inbox` view + `/api/inbox/archive`. Multi-project by default (POST accepts `{project}`, validated by slug). Smoke: sieruta-strategy + linkedin-ops captures → separate dirs, archive round-trip green.
- **learned**: (a) Kyverno `clone-ghcr-creds` ClusterPolicy auto-populates `ghcr-creds` in any new namespace — skip the manual secret-copy step for future deploys. (b) rtk output filter truncates stdout redirected to disk; use `rtk proxy helm template ...` for full render.
- **closed**: 5 P160 loops (scaffold-app, helm-chart, github-actions, dns-ingress, argocd-app) + `inbox-label` (obsolete). **Opened 8 v1.1 loops**: linkedin-ops-adapter, project-selector-ui, rename-ops-scope, runtime-read-mode, image-updater, capture-ratelimit, jwt-middleware, inbox-pvc-backup.
- **blocked**: Nothing. After push: CI builds image, ArgoCD syncs, cert-manager issues TLS. Turn C (CF Access + handoff test) requires Adrian's browser.
- **next**: push sieruta-strategy + infra → watch CI + ArgoCD sync → Turn C (CF Access, same session ideally).2026-04-19strategyv1.8 Distributor Readiness milestone opened
- **Action:** `/gsd:new-milestone v1.8 Distributor Readiness` — prep milestone, 12 phases (141–152), non-code artifacts only.
- **Scope:** Produce decisions/specs/drafts/roadmap needed to operate sieruta.com as both a manufacturer (Sieruta Originals) AND distributor of partner brands (BYG, Malaguti, demolition attachments, etc.). Outputs seed v1.9 "Multi-Brand Platform" implementation milestone.
- **Artifacts written:** PROJECT.md (Current Milestone section added), STATE.md (reset), REQUIREMENTS.md (36 reqs across TDN/ADR/PTR/DM/IA/CMP/LGL/QTE/SEO/COP/INT), ROADMAP.md (v1.8 section appended with 12 phases + exit gate), INDEX.md (active milestone → v1.8), v1.8/V1.8-TRACKER.md, v1.8/JOURNAL.md, scaffolded subdirs teardowns/brand-kits/legal-drafts, .planning/decisions/ (new top-level dir for ADRs).
- **Why this split:** User asked to separate prep (research/decisions/partner-kit acquisition/legal) from implementation. v1.8 absorbs all strategy-blocking work; v1.9 executes against frozen specs. External gates (partner brand-kit intake, lawyer review) run in parallel from day 1.
- **Reference brief:** prior conversation produced deep research on Aaker/Kapferer brand-architecture models, IA patterns (Kinshofer, Molson, Würth, Finning, Engcon), data-model schema, compliance isolation, SEO strategy, common failure modes. That brief seeded the phase structure directly.
- **Lesson:** when the user's request is a multi-milestone arc, milestone-splitting by "code vs. no-code" gives cleanest gates — each tier has different DoD and verification cadence, and external-dependency items don't sit on the critical path of the code.
- **Open loops:** +12 new (`v1.8-p141..p152`).
- **Next action:** `/gsd:plan-phase 141` (Competitive Teardowns). External-gated 143/144/148 should also start in parallel day 1.
---
2026-04-19strategyv1.8 evening session (BYG intelligence cycle + T0 ledger hygiene)
- **Mode:** long manual session covering P141 teardowns, P143 partner outreach intelligence, P147 raw compliance pass; closed with T0 ledger hygiene per open-loops continuation plan.
- **Milestone:** v1.8 Distributor Readiness — prep milestone, non-code.
- **Artifacts landed:** `.planning/v1.8/teardowns/{kinshofer,molson,wurth,rototilt,engcon}.md` + `SUMMARY.md` + `BRIDGE-FOLLOWUP.md` + 15 screenshots; `.planning/v1.8/polish-distribution-gap.md`; `.planning/v1.8/partner-inventory.md` (6-brand shortlist); `.planning/v1.8/ASSUMPTIONS.md` (A1–A11); `.planning/v1.8/compliance-audit-raw.md` (1,546 matches); `.planning/v1.8/brand-kits/byg/` — `OUTREACH-DRAFT.md` (v1), `OUTREACH-DRAFT-v0/v2/v3`, `REQUESTED.md`, `portal-recon/FINDINGS.md` + 6 screenshots, `byg-category-strength.md`.
- **Open loops:** +13 new (BYG-call-prep, partner-verifications, draft fan-out, URL corrections), −5 closed. Total v1.8 open = ~24; ledger audit drift 0 pre-commit.
- **Why this split:** BYG tactical window (Mon-Thu 2026-04-20/24) runs parallel to v1.8 12-phase velocity; plan tiers work so BYG-close and v1.8-spec work don't starve each other.
- **Explicit stops:** no further BYGonline portal interaction (Impersonate-customer used once, documented, not repeated); no written mention of cmetech (verbal only); no src/** changes in v1.8.
- **Next action:** T1 Monday — scaffold `brand-kits/STATUS.md`, draft P142 ADR, write BYG CALL-SCRIPT, dispatch verification + cmetech-footprint subagents; Adrian sends v2 reply Warsaw AM.
---2026-04-19strategynight — v1.8 P143 deep-research expansion (T0.5)
- **Mode:** autonomous 7-block research (R0–R7); 4 checkpoint commits.
- **Milestone:** v1.8 Distributor Readiness — P143 Partner Outreach intelligence.
- **Artifacts landed:** `sieruta-supply-baseline.md`, `brand-kits/cmetech-portfolio.md`, `p143-verifications.md`, `polish-distribution-gap.md` (+7 sections), `partner-inventory.md` (Tier A/B/C/D rewrite), `ASSUMPTIONS.md` (A12–A17).
- **Highlights:** cmetech portfolio = 2-brand reality (A12 narrowed, Indeco is sole poach target); Finland-cluster scope corrected (A13 — pure tilt engines NOT FI-dense; Eckart GmbH (DE) is R2 winner); production-services ladder A16 + beachhead A17 + one-stop-shop A15 elevated to primary partnership frames; 10 Tier-B confirmed, 6 probables, 1 Tier-C Indeco-special, 19+ Tier-D excluded.
- **Open loops:** +13, −4. v1.8 open count ~32.
- **Explicit stops honored:** no portal touches, no drafts written, no src/**, no cmetech naming.
- **Next action:** T2 Mon 2026-04-20 dealer-locator sweep + Adrian interview + BYG v2 send.
---
2026-04-19strategynight (R8) — P143 post-ultrathink gap-closure
- Defects fixed: Eckart demoted (industrial focus not attachment); HKS promoted to B-tilt-top (category leader + weakest PL channel); Baltrotors DECLINE→DEFER.
- Coverage extensions: 3 new Tier-B (Dehaco NL multi-cat, Konrad AT harvester heads, Soosan KR utility breaker).
- 4 probables collapsed COVERED: FRD→FRD Polska, FAE→UTECH, SP Maskiner→Fortechserwis, MTG→PL-dropdown.
- A13 refinement logged (IT/reputation alone not a gap signal).
- +9 loops opened, 1 closed, 1 partial-close.
---
2026-04-19strategynight (R9) — rotator-BOM reframe + one-stop own-production expansion
- User signal: rotator is BOM component for own SG production, not just distribution partner; SG + thumbs + compactors in own-production scope.
- A18 added: rotator OEM = dual-role (BOM IN + distribution OUT); saturation of retail doesn't apply upstream.
- Tier P0 new category: Baltrotors + Formiko dual-source BOM supply (Wave 0).
- One-stop credibility: 6 own + 5-6 partner categories = full PL contractor kit.
- +6 loops opened.
---
2026-04-19strategynight — migration from sieruta.com
- **Action:** strategy artifacts (partner-inventory, polish-distribution-gap, ASSUMPTIONS, sieruta-supply-baseline, p143-verifications, compliance-audit-raw, v1.8 JOURNAL, V1.8-TRACKER, brand-kits/**, teardowns/**, legal-drafts/) moved from `sieruta.com` to this repo via `git filter-repo` (history-preserving).
- **Source SHA:** `2f90bf72c8aa7a8f25ede68127dc60b5b4092cb7`
- **Ledger:** 16 v1.8 strategy entries copied with `_migrated_from` annotation; originals retained in sieruta.com as historical record.
- **Why:** confidentiality-in-depth, cadence mismatch, scope bloat on the code side.
- **Next action:** resume P143 R10 / P144 external gate / P148 lawyer gate from this repo.
---
- did: Opened milestone v1.8 "Distributor Readiness" via `/gsd:new-milestone`. Scaffolded `.planning/v1.8/` with subdirs (teardowns/, brand-kits/, legal-drafts/). Wrote V1.8-TRACKER.md, JOURNAL.md (this file). Updated PROJECT.md with Current Milestone section. Reset STATE.md. Wrote REQUIREMENTS.md (36 requirements across 12 phases 141–152). Appended v1.8 section to ROADMAP.md with phase details + success criteria + dependency graph + exit gate.
- learned: v1.8 is a prep milestone — its outputs ARE the research. No `src/**` changes. Prior conversation already delivered the industry survey (Aaker/Kapferer, Kinshofer/Molson/Würth/Finning/Engcon) that seeded the 12-phase structure.
- blocked: external gates on partner brand kits (PTR-03) and lawyer review (LGL-01..03) — must launch day 1 to unblock timeline.
- next: Open-loops append, INDEX.md update, ledger entries, commit. Then `/gsd:plan-phase 141` (Competitive Teardowns).
2026-04-19v1.8(evening session close)
- did: P141 teardowns TDN-01..05 + SUMMARY + BRIDGE-FOLLOWUP + 15 screenshots landed. P143 partner inventory + polish-distribution-gap.md (annotated with Adrian's qualifications). BYG portal recon (FINDINGS + 6 screenshots), BYG category-strength report, BYG outreach drafts v0/v1/v2/v3 + REQUESTED. ASSUMPTIONS A1–A11 captured. P147 raw compliance-audit pass (1,546 matches). Session-end: appended 8 JSONL entries, flipped 5 closed loops, added 13 new loops (BYG-call-prep + partner-verification + draft fan-out + URL corrections).
- learned: BYG-call tactical window is Mon 2026-04-20 → Thu 2026-04-24; cmetech channel opening is the trigger. v2 warm reply goes Monday AM; v3 pitch pre-read once Marta confirms a time. v0 impersonation-disclosure is deferred fallback (A11). Do NOT name cmetech in written emails (A7) — verbal only.
- blocked: P145 data-model work blocked until P142 ADR accepted. Partner drafts for DAEMO/Baltrotors blocked on verification subagent output.
- next: T1 (Mon 2026-04-20) — scaffold `brand-kits/STATUS.md` (P144), draft P142 ADR, write BYG CALL-SCRIPT.md, dispatch consolidated verification subagent (DAEMO/Baltrotors/HKS-alts) + cmetech-footprint subagent.
---
2026-04-19v1.8night — v1.8 P143 deep-research expansion (T0.5)
- **Mode:** autonomous 7-block research sweep (R0→R7) per user plan; 4 checkpoint commits.
- **Artifacts written:** `sieruta-supply-baseline.md` (R0), `brand-kits/cmetech-portfolio.md` (R1), `p143-verifications.md` (R2), extended `polish-distribution-gap.md` with §§ 2a/2b/3a/5/5a/1-ext/2-ext/6/7/8 (R3+R4+R5), rewrote `partner-inventory.md` into Tier A/B/C/D (R6), ASSUMPTIONS.md A12–A17 (R7).
- **Key findings:**
- **cmetech portfolio = 2 brands only** (BYG split + Indeco sole-held). A12 hypothesis narrowed from "portfolio-wide" to single-candidate Indeco; strategic payoff preserved.
- **Finland cluster scope corrected (A13):** dense for forestry/rotators/tiltrotators/screening, NOT for pure tilt engines. R2 found Eckart GmbH (DE) as strongest pure-peer replacing HKS priority.
- **Saturation pattern confirmed:** Baltrotors (6 resellers) and Indexator (5 resellers) both declined — same retail/forestry saturation, Sieruta adds no value.
- **Production-services ladder (A16) elevated to primary thesis:** Model B (PL-cast component supply) is cmetech differentiator. A17 beachhead strategy: cold-OEM first contact leads with Model B, not Model A.
- **One-stop-shop (A15) as hard-no filter:** dropped 6 pure-QC OEMs (Miller/OilQuick/Lehnhoff/CanginiBenne/CWS/Eurofit) — Sieruta owns QC category.
- **Tier B confirmed (10 candidates):** Mantovanibenne, Trevi Benne, Promove, NPK, Eckart, TMK, Hultdins, Malaguti, Formiko, HKS.
- **Tier B probable (6 pending T2 dealer-locator):** MTG, Furukawa/FRD, FAE, Seppi M, ALLU, Dynaset.
- **Tier C (A12 poach):** Indeco only — Model-B beachhead template (A17), NO naming of cmetech (A7).
- **Tier D excluded (19+):** VTN, Xcentric, Kesla, Indexator, Baltrotors, MB Crusher, Parker Helac, Rammer, Trasteel, Montabert, Epiroc, Cohidrex, etc.
- **Open loops:** +13 (drafts Wave 1/2, T2 dealer-locator sweep, R0 Adrian interview, bucket-scope confirm, outreach-template variants, daemo-rerecheck, indeco-dealer-verify, cmetech-oem-sourcing-probe); −4 closed (cmetech-footprint, verify-daemo, verify-baltrotors, scope-tilt-alts).
- **Explicit stops honored:** no BYGonline touch, no drafts written, no src/** commits, no cmetech naming, <30 new brands scanned, no plan-check pauses.
- **Next action:** T2 Monday — T2 dealer-locator sweep + R0 Adrian interview + Eckart dealer-recheck. BYG v2 warm reply dispatch by Adrian (Warsaw AM). T3 produces two outreach-template variants + Wave 1 drafts.
2026-04-19v1.8night — P143 R8 (post-ultrathink gap-closure sweep)
- **Mode:** 2-wave gap-closure after user ultrathink pushback identified defects in R2 findings + missing coverage areas.
- **Defects fixed:**
- **Eckart demoted.** Fetched eckart-hydraulics.com — applications = mining/tunnelling/power-gen/industrial-automation/agriculture/vehicle/rail; "boom rotation" is the ONLY excavator-adjacent use-case. R2's "strongest pure-peer fit" was wrong. HKS (product leader, weakest PL channel) rebumped to B-tilt-top.
- **Baltrotors DECLINE→DEFER.** baltrotors.com/en/distributors 404; saturation-count may overstate (Rotatory.pl appears on Baltrotors + Formiko + Indexator). Chrome-bridge reverify open-loop.
- **Coverage extensions (4 new Tier-B adds):**
- **Dehaco B.V.** (NL Aalsmeer) — multi-category demolition (breakers + grabs + crushers + compactors + dust-control); 40+ country network; no PL surfaced; {A+B+C} max; Wave 1.
- **Konrad Forsttechnik** (AT Preitenegg) — harvester-head market leader (rope-crane segment, 6% R&D); 30+ country network; no PL surfaced; Wave 2.
- **Soosan Heavy** (KR) — utility-tier breaker; no PL authorised; fills price-segment gap vs premium Indeco + mid Promove; Wave 2. Hanwoo MSB + Okada Aiyon held as fallbacks.
- **HKS promoted** to B-tilt-top (see Eckart demotion above).
- **Probables collapsed (4 false gaps found covered):**
- **Furukawa/FRD** → FRD Polska (frdpolska.pl exclusive). Tier D.
- **FAE Group** → UTECH Opole (Jarosław Koenig). Tier D.
- **SP Maskiner** → Fortechserwis Andrespol. Tier D.
- **MTG Metalogenia** → dealer-dropdown includes Poland (identity chrome-bridge-gated). Probable-covered.
- **Probables surviving (6 brands):** Seppi M, ALLU, Dynaset, AFM Forest, Log Max, Naarva — need OEM-direct email.
- **A13 refinement:** IT/large-OEM-reputation alone is NOT a gap signal; PL-presence must be scan-confirmed via OEM's own dealer finder. 4 probables collapsing to covered is strong signal of this bias.
- **A15 confirmed:** tiltrotators are QC-substitutes; channel conflict stands.
- **Negative results:** IT rotary-actuator sweep (no excavator-attachment peers); tiltrotator re-examination (A15 principle holds); compactor/thumb/sorting-grapple category (Dehaco covers multi-line sufficiently).
- **Artifacts updated:** `polish-distribution-gap.md` (Round 2 section — Eckart demotion + Baltrotors DEFER + 4 covered + 3 new Tier-B + 6 surviving probables); `partner-inventory.md` (Tier B rewrite with B5–B15 including round-2 adds and tilt-engine rerank); `ASSUMPTIONS.md` (A13 + A15 refinements in change log); `open-loops.md` (+9 opened, 1 partial-close).
- **Commits:** four R0-R7 checkpoints earlier; round-2 R8 adds one more commit.
- **Drift check pending:** run `scripts/ledger-audit.sh` before final commit.2026-04-19v1.8night — P143 R9 (round-3 — user signal on rotator-BOM + own-production expansion)
- **User signal:** "we only need access to rotation units to do proper sorting grapples" + "let's also do compactor / thumb / sorting-grapple" + "one-stop solution."
- **Strategic reframe:** rotator OEMs reclassified from pure-distribution-partner to **dual-role BOM-supply + optional distribution** (A18 new). Saturation of retail channel doesn't apply upstream; Baltrotors' "6 resellers" blocker evaporates at BOM layer.
- **Own-production expansion (new §1a in sieruta-supply-baseline.md):**
- SG (sorting grapples) — blocked on rotator BOM. Wave 0 partnership unlocks this.
- Thumbs — likely bucket-configurator extension, Adrian confirm.
- Compactors — own-make (castings + hydraulics competence) OR partner via Dehaco/NPK, Adrian decision.
- **New Tier P0 — category-gating BOM partnership (partner-inventory.md):**
- P0.1 Baltrotors — vane + piston + manifolds + swing dampers = one-stop BOM supplier.
- P0.2 Formiko — piston specialist; Baltic affinity; dual-source-with-Baltrotors for pricing leverage + supply resilience.
- Fallback: Indexator (premium); Black Bruin (wrong tech class, not first fit).
- **Wave 0 inserted at head of sequencing:** Baltrotors + Formiko BOM pitches on Monday (T2), before Tier-B distribution fan-out, after Adrian interview to quantify volume ask.
- **One-stop thesis credibility:** with §1a own-expansion (bucket + QC + SG + thumb + forestry-mulch) + Tier A BYG (wear parts) + Tier B/C Dehaco/Indeco/Mantovanibenne/HKS/Hultdins (breaker + shear + tilt + grapple) + Tier P0 rotator-BOM, PL contractor can source full kit from Sieruta alone. **Minimum-viable one-stop = 6 own + 5-6 partner categories.**
- **Downstream impact:** P145 data model grows: `ProductVariant.bom` must distinguish own-with-embedded-partner vs pure-own vs pure-partner; rotator-variant selector on SG SKUs; partner co-branding metadata ("Sieruta SG-600, rotator by Baltrotors"); extends P142 ADR to allow component-co-branding within own-sovereign product.
- **Open loops:** +6 (P0 Adrian interview, 2 P0 BOM drafts, SG/thumb/compactor specs), 0 closed.
- **Artifacts updated:** sieruta-supply-baseline.md (§1a), ASSUMPTIONS.md (A18), partner-inventory.md (Tier P0 new + Wave 0 sequencing), open-loops.md (+6 loops).
- **Still not closed (honest list):** chrome-bridge verifications (Baltrotors retail-saturation, MTG identity), probables OEM-direct email (6), Eckart attachment-mix recheck, Adrian interview (7 production-services items + 4 own-expansion items), all drafts.
- **Next action:** Adrian interview batch (P0 rotator spec + thumbs/compactors decisions + R0 §3 production-services) — this is the biggest blocker to Wave 0 quantitative BOM pitch.
---