Chinh (lelouvincx) / Weekly Report - 2026-W23

Created Mon, 08 Jun 2026 00:00:00 +0000 Modified Mon, 08 Jun 2026 02:24:31 +0000
3030 Words

Weekly Report — Jun 1 – Jun 7, 2026 (friday mode)

W23 full week (Mon Jun 1 – Sun Jun 7). Heavy presales + tooling week, internal again light. Power BI → Holistics migration shipped end-to-end: 6-scene Remotion video (1.15x/1.25x cuts on CDN), 2 docs pages (conceptual mapping + migrating-to-Holistics), internal announcement. 3 customer touches: Bicycle Transit onboarding call 1 + debrief (#P1), Basata onboarding call 4 + prep (#P1), Prusa extend-dataset + default-filter feedback (#P1/#P2). 5 small ships: docs Markdown content-negotiation PR (merged), search_docs param fix PR (merged), markdown-not-found fix, Claude-Design AML-vs-YAML polish, Impeccable thumbnail test. GoalsMapper churn-status mismatch diagnosed (#P2 [[Internal]]). DAT-576 MRR exchange rate — 8th-week NO-FIRE, zero movement. H1 self-reflection + CV (5w) and Spark roadmap (4w) slipped again — no weekend journal evidence. Tooling: tried oh-my-pi (worse than Pi), Helium browser note, Remotion learning. Ideas captured: agentic semantic layer (anh Thanh + Simon Spaeti), Impeccable-style AI-as-product for data.

Work

Presales

  • DONE — Prep onboarding call w/ [[Bicycle Transit]] (#P1, [[Presales]]) — Jun 1. Customer ask: “a fairly simple dashboard showing trip activity sliced different ways, filterable by week-to-date, month-to-date, year-to-date, with prior-year comparisons.” Assessed as not hard — typical metric + date dimension + period comparison; other requested features all already covered. Refs: Slack.
  • DONE — [[Bicycle Transit]] onboarding call 1 (#P1, [[Presales]]) — Jun 2 (debrief Jun 4, #P2). Attendees Ajjit Narayanan + Peter Safonov; intro’d by Nam Tran (sales), account owner Chukwudi. Evaluation context (per transcript): actively comparing Holistics against 4–5 other BI tools — recreating one sample trip-activity dashboard (from Tableau) in each, putting in front of beta testers, picking on feature-parity + trust-in-numbers. Coming from Tableau, similar mental model to Looker. Use dbt with clean wide marts → want minimal joins in Holistics (dataset ≈ one MART). Walked them through models→relationships→datasets→dashboards, Param Field for WTD/MTD/YTD dimension toggle, relative_period prior-year KPI, date-drill control, period-comparison control, and Local Agentic Development (skills + CLI + MCP two-way sync). Core unresolved ask: mid-period MTD/YTD comparison — this month/this year works, but in the middle of a month (e.g. Jun 1–2 2026 vs Jun 1–2 2025) breaks (solid current line shows only elapsed days, dashed prior-year line spans full month; KPI slightly off). I committed to study their use case + reply on Slack; the debrief found this month to today (vs this month) correctly clips both KPIs and line charts. Product gaps surfaced: restrict time-grain on date-drill (hide hour/quarter) — not supported (slack); period comparison inside pivot cells — not supported, only dynamic-markdown+CSS workaround (slack); lost filter context switching viz types (slack); KPI sparklines — line-chart or dynamic-content-block only; Azure DevOps Git backend — not yet, engineering will add if they commit. Stack: MotherDuck for MVP (connects to more for now), enterprise decision MotherDuck-vs-Microsoft Fabric in 2–3 months — Fabric Warehouse confirmed supported (~1-month implementation). Next: customer iterates ~1 week, then books a 30-min technical follow-up. Refs: local transcript ~/Developer/holistics/duty-support/bicycle-transit/onboarding_call_1.txt, ReadAI, Ampcode debrief, Slack.
  • DONE — [[Basata]] onboarding call 4 + prep (#P1, [[Presales]]) — prep Jun 4, call/debrief Jun 5. Led by Huy Nguyen, I supported. New owner Stephanie Wu (Tableau background; predecessor Taha left). Opened by debugging a duplicate-metric-name error on her V2 embed dashboard (a monthly-avg % human confirmed metric — fixed sum vs count + where confirmed_at is not null numerator/denominator; taken offline to fully verify against her schema). Core need: single master dashboard for 20 clients via embed portal, filtered per org by organization_name (RLP via embed permission payload — demoed the sandbox embed editor + role-based-permission JSON; back-end dev just swaps in the dynamic org id). Hide-empty-modules: native tab-hiding not supported → two paths — (a) split into separate dashboards + host app renders tabs via an API record-count call; (b) proposed to product: hide a block when it returns zero/no data (more feasible, routed to product team). KPI grain toggle (avg monthly/weekly/daily): date-drill control shown but doesn’t fully fit → needs a control-button + variable passing, to replicate later. Model cleanup: AML code search-replace shortened model name to fact_task (61 replacements across 3 files) + manual file rename. Impersonation on only during the session. Product feedback: date-drill needs a proper date/datetime field not the string year-month + sticky/buggy dropdowns (slack); legend repeats “name task count” → blank custom-label workaround (slack); legend scroll/size (slack); KPI styling weaker than Tableau (viz revamp coming); theme doesn’t change chart/bar colors — color-palette-in-theme shipping in ~couple weeks. Complementary design resource offered for her theme. Prep included Tableau→Holistics research + recovering Basata AMQL from aml_compiled_caches. Next session ~1 week. Refs: local transcript ~/Developer/holistics/duty-support/basata/basata_onboarding_call_4.txt, Ampcode (debrief), Ampcode (Tableau research), external msg Slack.
  • DONE — Help [[Prusa]] w/ extend dataset (#P1, [[Presales]]) — Jun 2. Tried Holistics extend() to DRY two parallel datasets (sales_analytics full grain vs sales_analytics_clean Overview-filtered). Failed: AQL metric definitions reference models by literal name (fact_orders vs fact_orders_clean); extend() can’t rewrite those refs, so duplication persists. Workaround: consolidate into one sales_analytics dataset with both fact families, define all 14 metrics twice (bare + _clean suffix), then a view { } block groups them into business-friendly folders (“All Orders” / “Successful Sales”) — hides the _clean suffix from users, one maintainable file. Use case (default-filter) still valid. Refs: Ampcode, Ampcode, Slack.
  • DONE — Feedback default filter from [[Prusa]] (#P2, [[Presales]]) — Jun 5. Jan Lupač (Prusa3D) wants a dataset-level default filter so business users start from a trusted pre-filtered scope (exclude canceled/unpaid/refunded), toggleable off for raw data. Holistics lacks it → Prusa forced to maintain rough+clean datasets w/ duplicated metrics. Conclusion: “filter preset” already backlogged but not prioritized → raise to product again; short-term workaround = extend() + Custom Dataset Views (same pattern as above). Refs: Ampcode, Slack.
  • DONE — Power BI to Holistics — narrative and video (#P2 → shipped) — completed Jun 3. Carried since W21 (3 weeks), closed end-to-end. Pairs the new migration AI skill with Local Agentic Development: drop a PBI folder next to a Holistics project, run one command, agent writes AML, translates DAX→AQL, rebuilds dashboards, syncs to Cloud — weeks → hours. Three deliverables landed:
    • Video — edited with [[Remotion]]: 6 narrated scenes (intro + S1–S5.2), talking-head face PiP, sentence-level SRT captions, “agent still running” terminal PiP (pre-stretched offline via FFmpeg setpts*=1.357 to match 52.9s scene 1:1), 12-frame slide transitions landing in narration silences, face-only crossfade across the S5.1→S5.2 hard cut. Rendered 1080p H.264; sped-up cuts via setpts+atempo (pitch-preserving). Output: 1.15x (2:29), 1.25x (2:17). PR holistics-remotion#13 (open, +1033/-5). Ampcode.
    • DocsConceptual Mapping + Migrating to Holistics (Ampcode). Aligns w/ W21 lesson: conceptual diagram > long video. Recording approach (per Notion: Demo PBI migration) = 4 composited layers (Power BI Desktop / Holistics / Terminal-agent / VS Code). Differentiators showcased: semantic layer built BEFORE measures (correct dependency order for DAX translation), live cloud sync via holistics sync-code, role-playing date relationships → with_relationships(), CALCULATE + USERELATIONSHIP → clean AQL, parity validation w/ actual value comparison.
    • Announcement — internal team post Jun 3 (Slack, 19 reactions, video attached). Framed around lost winnable deals to migration inertia: Maya Appliances, Verto. Huy Nguyen asked to (a) add to docs + agentic-BI landing page, (b) repurpose the video verbatim for social. Khai To (co-author, special thanks) confirmed the abrupt ending → outro needed (logged as TODO Jun 8).
    • Reference signal: Tableau→Sigma post — long videos lose viewers, missing conceptual diagram.

Internal

  • DONE — Check status mismatch of [[GoalsMapper]] (#P2, [[Internal]]) — Jun 5. Flagged via the customer-identity-monitoring alert (“paid customers not paying but still using Holistics”). Tenant still active in app DB while mapped Zoho subscription was cancelled — Arden Condrillon (Growth) cancelled the Zoho subscription (overdue invoice, churned) but missed updating tenant status → set it to trial.expired. Conclusion: trial.expired is fine only after truly churned+cancelled in Zoho (dbt then corrects to cancelled/paid + churned). Do not use trial.expired for unpaid-but-not-yet-cancelled customers — it acts as a premature cancellation signal (dbt falls back to status_updated_at for churn date) → marks churn too early → skews churn metrics. Keep unpaid/dunning/cancelling until Zoho cancels. Could expand into a customer-status-lifecycle review project. Refs: Ampcode, Slack.
  • DONE — Product Office Hours (P1 + P2) (#P2, [[Internal]]) — Jun 4. LEARNING from anh Thanh: the gap between unstructured and structured data for AI productivity. NOTE: watch the founders’ strategy sync if time — STRA-103 Agent analytics infrastructure positioning (ReadAI).
  • TODO (in-progress) — DAT-524 exclude internal testing Zoho accounts (#P2, [[Internal]]) — Linear state “Coding/In Progress” (Cycle 78, Low, updated Jun 2). Decoupled from DAT-576. Two tracks: short-term Thuan executes (review on my side); long-term I plan first. Scope per Linear: Phase 1 = exclude the manually-audited internal list from dom_zoho__events/fct_subscription_events via existing exclusion pattern (not another hardcoded filter); Phase 2 = root-cause + push upstream Zoho flagging (ownership belongs to Growth, Data consumes the signal). Long-term plan doc not yet written this week. Linear DAT-524.
  • NOT STARTED — DAT-576 MRR exchange rate (#P1, [[Internal]]) — Linear state still “Analyzing problem” (Cycle 78, Medium, last updated 2026-05-07 — confirms a full month of no movement; part of DAT-177 MRR-flow). 8-week carry-over (W16 → W23), zero movement, not even mentioned in this week’s journals. The Mon-AM “decision-in-writing call” planned for W23 did not happen. Forcing-function rule ([[Priority Rules]] §3) breached a 3rd consecutive week. This is unambiguously a prioritization signal, not a scheduling one — see Career & Personal Consulting. Scope (Linear): ingest live FX rates, replace static rate in fct_mrr, pin historical months to month-end rate, validate vs Zoho Billing. Linear DAT-576.

Docs

  • DONE — Add Markdown content negotiation (#P2, [[Docs]]) — Jun 3. PR holistics/docs#1665 (merged, +66/-40). nginx now serves Markdown when clients request Accept: text/markdown/text/x-markdown/text/plain or are known LLM agents (Claude-User, opencode); HTML unchanged for browsers; Vary: Accept added. Makes docs LLM-friendly. Ampcode.
  • DONE — Fix markdown docs not found in docs.h (#P2, [[Docs]]) — Jun 1. Carried from W21/W22 (.md-suffix broken-link surface). Refs: Slack, Ampcode.
  • DONE — Use Claude Design to polish AML vs YAML docs (#P3, [[Docs]]) — Jun 1. Claude Design.

AI

  • DONE — Improve Holistics skills: search_docs param question not query (#P3, [[AI]]) — Jun 4. PR holistics/skills#18 (merged, +45/-8). Agents kept calling search_docs '{"query":...}' → HTTP 400 (schema requires question only, additionalProperties: false). Skill didn’t name the param/show a CLI payload → model fell back to industry-default query. Bumped holistics-development 0.5.1→0.5.2, holistics-reporting 0.1.0→0.1.1. Refs: Slack, Ampcode.
  • DONE — Test [[Impeccable Skill]] to design thumbnail for local agentic dev (#P3, [[AI]]) — Jun 2. Live polling mechanism impressive — re-applicable to Holistics CLI for local dashboard/theme editing use cases. Ampcode.

Personal / Tooling

  • [[Remotion]] — open-source React-component video editor; unlocks AI-driven video editing. Used it to ship the PBI migration video this week (see Presales). Sample: PowerBiMigrationVideo.
  • [[oh-my-pi]] (omp.sh) — Jun 6. Tried it; harder to use than [[Pi Coding Agent]], UI lags. Sticking with Pi.
  • [[Helium Browser]] — Jun 2. Vs Arc: smoother, faster UI response.
  • [[ktx]] (docs) — Jun 7, queued to try. Backlog NOTE: depending on Holistics positioning, ktx is complementary (Holistics as the BI source they ingest) or competitive (both claim the “context for agents” layer).
  • Good working place / good vibe ([[Personal]], Jun 2):
    • working place

Learning & Notes

  • LEARNING AML vs YAML — YAML lacks a strong typed system: no schema validation, no autocomplete/inline docs. Same argument as “why TypeScript, just use JavaScript?”. Reinforces the AML-as-code thesis.
  • LEARNING [[Impeccable Skill]] — has a polling mechanism for live UI editing (very cool); the project (impeccable.style) is a model of AI-as-a-product: ships a CLI + Chrome extension that helps AI agents style better.
  • IDEA — AI skills for data engineering + an Impeccable-style site — data team and design team are both supporting functions that help the company make better visual/decision output; an Impeccable-equivalent for data could work the same way.
  • NOTE — Agentic semantic layer (Jun 5) — anh Thanh raised the idea; independently echoed by Simon Spaeti (data KOL) tweet. Also: dbt + Holistics monorepo thought. Now backed by an internal strategy docSTRA-103 positions a new Holistics product as “agentic analytics infrastructure”: a semantic runtime (CLI + MCP + SDK + package system + control plane) that makes AI agents work through governed AMQL instead of raw warehouse schemas — explicitly not a viz product or a plain semantic layer. The framing is the dbt analogy: dbt won not by a better BI UI but by defining a code-native, high-centrality workflow layer during the cloud-warehouse shift. Holistics aims to be that layer for agentic analytics. Ties directly to ktx positioning + my IDEA above.
  • NOTE — Gap between unstructured and structured data for AI productivity — from anh Thanh, Product Office Hours.
  • NOTE — read [[Lean Analytics]] (Jun 4, random thought; queue under [[Read]]).
  • NOTE I finally understand why people miss Vietnam after leaving — memorable personal read.

Next Week (W24: Jun 8 – Jun 14)

Pulled from [[Backlog]] + this week’s open threads, ordered P0 > P1 > P2 > P3 ([[Priority Rules]]).

  • P1 — Must Do
    • [[Internal]] — DAT-576 MRR exchange rate (DAT-576) — 8-week carry-over, forcing-function breached 3x. No longer schedulable as deep-work. Action: a written 3-option ask (re-scope / hand-off / de-prioritize) in Linear + raise in next 1-on-1 as a prioritization question. Do not re-baseline silently ([[Weekly Planning Rules]] §1, §4).
    • [[Teaching]] — Soạn roadmap Spark cho Yênslipped 4 weeks. Forcing function: book a fixed Sat 4h block OR hand back to Yên to drive. Decide explicitly.
    • [[Personal]] — H1 self-reflection + CV refreshslipped 5 weeks, PR cycle imminent. Per [[Priority Rules]] 3+ week rule: either lock an immovable weekend block, or demote out of P1 + accept reduced prep. Don’t carry silently a 6th time.
  • P2 — Should Do
    • [[Presales]] — Power BI to Holistics: add outro (not to be abrupt) — already logged TODO Jun 8 (Slack). Quick close on the shipped video.
    • [[Internal]] — DAT-524 long-term plan doc — write the long-term plan; Thuan owns short-term execution (review on my side).
    • [[Presales]] — PBI agent: ask for data source before implementing ([[Backlog]] #P2) — tighten holistics-migrate-power-bi skill to prompt for source DB before generating AML.
    • [[Presales]] — PBI field-name override pattern ([[Backlog]] #P2) — codify snake_case-AML / mixed-case-warehouse override (definition: @sql {{ #SOURCE."OriginalColumn" }}).
    • [[Internal]] — Handle multi-currency exchange rates for MRR ([DAT-576] related, #P2) / Upgrade dbt-core to match prefect — long backlog; scope when DAT-576 direction lands.
  • P3 — Nice to Have
    • [[Internal]] — Try ktx (Slack) — positioning note above.
    • [[Logseq]] — RFC-0005 agent-session extraction first slice; Hugo Google auth.
    • [[Docs]] — auto-export dashboard PNG feedback to Khai To (draft in [[Backlog]]).
    • [[Teaching]] — set-based vs row-based thinking; viz resources; pudding.cool.
  • Monitor (no action — external signal)
    • [[Wamly]] onboarding — #holistics-wamly-external, 6+ weeks WAITING → formal Backlog move overdue.
    • [[Predictive Index]] / [[Enhance Fitness]] — sales (Nam/Chukwudi) following up; wait for trial-start.
    • [[Bicycle Transit]] — customer iterating 1–2 weeks, will book 30-min follow-up. [[Basata]] — Stephanie building master dashboard.
    • [[TerryWhite Chemmart]] — dynamic financial date pattern (POC done W22); reuse for FY-aware customers.

Career & Personal Consulting

Honest read of this week, Start/Stop/Keep:

  • KEEP — Presales execution is genuinely strong. Three customer touches handled cleanly (Bicycle Transit, Basata, Prusa), each with product feedback captured at the same time as the answer — exactly the “support reply → engineering backlog flywheel” the planning rules call for. The PBI migration shipped end-to-end (video + docs + announcement), a reusable artifact, not throwaway work.
  • KEEP — “decisions become product data debts” discipline. GoalsMapper, Prusa default-filter, and the Bicycle Transit/Basata feedback all landed as concrete product signals with Slack/Linear pointers. This is the highest-leverage habit you have.
  • STOP — The DAT-576 silent re-baseline. 8 weeks, 3 breached forcing-functions, and this week it wasn’t even written down. The pattern is now unambiguous: sales-led presales + tooling consistently out-compete internal MRR work for your attention. That may be the correct prioritization — but it’s an implicit decision being made by drift, not by you. The fix is not another Monday slot; it’s a one-paragraph upward message: “MRR exchange-rate work keeps losing to presales/tooling. Is that the right call, or should it be re-scoped / handed off?” Make the call explicit so it stops costing weekly planning energy.
  • STOP — Carrying personal deep-work (H1 reflection 5w, Spark roadmap 4w, CV) as P1 without protecting it. Weekends keep getting consumed (moving house W22, light journals W23). Either treat them as immovable calendar meetings, or be honest and demote them. Pretending they’re P1 while they slip erodes trust in your own plan.
  • START — Capitalize on the agentic-semantic-layer convergence. Three independent signals this week (anh Thanh, Simon Spaeti, ktx, STRA-103 founders’ positioning) point at the same theme. You’re sitting at the data+presales+AI intersection where this matters. A short written POV — even a Slack note — would compound: it’s lane-intentionality ([[Weekly Planning Rules]]) in action, and it’s the kind of strategic visibility that internal MRR tickets don’t give you.
  • Lane observation: this week was ~70% presales/solutions, ~20% tooling/AI, ~10% internal data. That’s the third week in a row leaning presales. Decide explicitly each cycle whether to lean in (you’re clearly good at it and it’s valued) or rebalance toward the IC/data-platform work that builds different muscles. Drifting unintentionally is the worst outcome.

Tied to this week’s work (Remotion video, agentic semantic layer, AML-as-code, customer period-comparison patterns):

  • Agentic / semantic layerSimon Spaeti’s blog (ssp.sh) on data engineering + AI; dbt Semantic Layer docs; keyword search: “semantic layer for AI agents”, “MCP semantic layer”, ktx vs Cube vs Holistics positioning.
  • Lean Analytics (Alistair Croll & Ben Yoskovitz) — already queued; pairs well with the customer-metrics work (WTD/MTD/YTD, churn lifecycle).
  • Period comparison / time-intelligence modelingHolistics relative_period & period comparison docs; reusable for Bicycle Transit / FY-aware customers. Reinforce the W22 anchor-metric POC pattern.
  • RemotionRemotion docs + transitions for sharper marketing cuts; FFmpeg setpts/atempo for pitch-preserving speed (already applied).
  • AML-as-code / typed config — the TS-vs-JS analogy generalizes; skim why typed schemas win and the broader “configuration as a typed language” discourse (CUE, Pkl, Dhall) for the next docs-polish round.
  • AI-as-a-product patterns — study impeccable.style (CLI + extension that makes agents better at a domain) as a template for an eventual data-engineering skill product.