Chinh (lelouvincx) / Weekly Report - 2026-W20

Created Mon, 25 May 2026 00:00:00 +0000 Modified Mon, 25 May 2026 06:02:25 +0000
3355 Words

Weekly Report — May 11 – May 17, 2026 (friday mode)

Steady throughput week. Big wins: CircleCI PR review marathon finished (rounds 2–4, prefect#400 + dbt#858 closed), [[BuyCo]] custom theme rolled out on Volumes dashboard, Power BI playbook draft started for BuyCo onboarding (Tue May 19). Khai To’s 2-way sync CLI shipped — unblocks the local-dev demo video (4-week WAITING cleared). MRR exchange rate (DAT-576) still NOT STARTED — now 5-week carry-over: Mon AM recovery slot lost again to CircleCI close-out, week absorbed by BuyCo theme + Datacubed dashboard fix + Power BI prep. Honest call: needs hard escalation in next 1-on-1. Tooling: rg/grep + rtk fix, personal finance app rental-affordability simulation. Weekend = VCT Pacific watching + travel (no H1 self-reflection done — sliding W21).

  • Work

  • Internal

  • DONE — Review CircleCI PRs for anh Dong (#P1, 3-week carry-over since W18) — closed May 12. Rounds 2, 3, 4 done.

  • DONE — Alias unnamed columns for store_failures views (dbt#867, #P2) — closed May 12.

    • Trigger: commit 0c3c494e (May 5) enabled +store_failures as a view in CI to let the PR comment summarizer link to BigQuery failures. BigQuery requires every view column to be named — broke 7 tests with “CREATE VIEW columns must be named, but column has no name” on unnamed count(*), concat(...), select 1 expressions. Dev runs passed (target: dev, store_failures disabled).
    • Fix: aliased outermost SELECTs — count(*) as pr_count, select 1 as failure, {{ column_name }} as unique_field/not_null_field. Affected tests: assert_github_holistics_pr_over_4000, unique_map_timezones_concat_*, unique_map_exchange_rates_concat_*, 3× max_date_sync_*, dom_holistics__aml_compiled_caches.
    • Impact: restored CI + restored “See test failures” links in PR audit summarizer.
    • Trigger: Slack. Refs: Ampcode.
  • NOT STARTED — MRR exchange rate (DAT-576, #P1, manager priority, Cycle 74). 5-week carry-over (W16 → W17 → W18 → W19 → W20).

    • W20 Mon-AM recovery slot consumed by CircleCI round 2–4 closeout + Country Breakdown fix for BuyCo. Rest of week absorbed by BuyCo theme + Datacubed dashboard fix + Power BI playbook draft.
    • Honest assessment: this is no longer a “scheduling” problem. The restart cost is non-trivial (Hieu left, context recovery alone is half-a-day), and every week I show up with a non-emergency that crowds it out. Forcing function for W21: raise in 1-on-1 with anh Triet — formally re-scope to a smaller deliverable, or hand off.
  • NOTE — Lead Funnel by Sales Motion wrap-up ([[Lead Funnel by Sales Motion]]) — added “wrap up the project” TODO. DAT-560/561/562/563/564 all closed last week; remaining = write project retro doc.

  • Presales

  • DONE — Fix BuyCo Country Breakdown dashboard dynamic markdown (#P2, customer [[BuyCo]]) — closed May 11.

    • Bug: dynamic markdown block v_14o4 in _1_country_breakdown.page.aml displayed only the first country because template hardcoded {{ rows[0].\Country Name` }}. Fix: wrap with {% map(rows) %}loop + droprows[0]` prefix inside the loop, per Holistics dynamic-markdown docs.
    • Refs: Slack, Ampcode.
  • DONE — Apply theme for BuyCo Volumes dashboard (#P1, customer [[BuyCo]]) — closed May 13.

    • Migrated dashboard from test path (@amql/pbi_test/pbi_volumes.page.aml) to production (@amql/dashboards/volumes.page.aml). Theme: buyco_light + buyco_header_light. TextBlock styled as all-white cards (#FFFFFF bg, #E5E7EB border, sm shadow) to match VizBlock. Canvas 1300px, default_zoom 0.8. Owner set to [email protected]. Dropped the “Xairo messing up” tab (VGM Status gauge); preserved ~150 hard-coded carrier color mappings on the PieChart (v_w046); renamed filter blocks to drop _copy suffixes.
    • Dataset reused: pbi_report_test (models develop_bronze_cs_shipment, develop_silver_bc_current_booking_legs).
    • Refs: Slack, Ampcode.
  • DONE — Sync to prepare BuyCo onboarding call (#P1, customer [[BuyCo]]) — closed May 14.

    • Internal sync aligning Presales + me on the May 19 agenda. Attendees confirmed: Xairo (PM, data team — decision driver, UX polish + data-culture focus), Luc (Head of Data — architecture + AQL learnability + dbt migration cost), Ahlam (Sr DE — dbt core + MotherDuck integration, perf/caching), Vadi (BI Analyst — day-to-day building pains: formatting, AI chart quality, table column widths), Rodolphe (Analyst — external reports, ex-PowerBI: wants bookmarks, action buttons, drill-throughs), + product designer (TBD, evaluating UI/themes).
    • Refs: Slack.
  • IN-PROGRESS — Power BI playbook for BuyCo call (#P1, customer [[BuyCo]]) — started May 15, ongoing.

    • Drafted so far: conceptual-differences.md (core artifact mapping table + engine comparison: VertiPaq vs SQL push-down; DAX vs AQL with YoY example), migration-overview.md (8-step migration workflow + project-structure comparison + automation guide). Both added to docs sidebar under “Coming From Other BI Tools > Power BI”.
    • Artifact map (canonical, for the call):
      • Power Query (M) → Query model (.model.aml) — M materializes in VertiPaq; query model compiles SQL at runtime.
      • Table → Holistics model — PBI tables hold imported data; Holistics models are logical only.
      • Semantic Model → Dataset (.dataset.aml) — PBI semantic model is workspace-scoped; Holistics datasets reuse models freely.
      • Relationship → Dataset relationship — PBI active/inactive flags vs Holistics path resolution from selected fields.
      • Measure (DAX) → Metric (AQL/SQL) — filter context vs explicit dimension scope.
      • Calculated column → Dimension (definition: @sql / @aql) — materialized in VertiPaq vs compiled inline.
      • Report → Canvas Dashboard — PBI binds 1 report ↔ 1 semantic model; Holistics dashboards span multiple datasets.
      • Workspace → Module (deployment + sharing split into modules + perms).
      • .pbip folder (TMDL + JSON) → AMQL repo (one uniform AMQL syntax).
    • Migration workflow (8 steps): Prep (.pbix → .pbip for TMDL text) → ETL migration (heavy logic to SQL/dbt, light to Query Models) → Model conversion (TMDL → .model.aml, #SOURCE not ${TABLE}) → Measure conversion (DAX → AQL/SQL; simple aggs use aggregation_type) → Relationship conversion → Access control (RLS in UI) → Dashboard rebuild → Validation (parallel SQL between PBI + Holistics).
    • AI/automation framing: deterministic mappings (Tables→Models, Relationships→Datasets) = high-automation; M→SQL + DAX→AQL = partial; permissions = low. Agentic loop: read TMDL/JSON → search_docs → generate AML → validate_aql / CLI validate → self-correct.
    • Pending: sibling pages dashboard-migration.md, model-migration.md, index.md intro; custom convert-tmdl-to-aml agent skill; refine period_over_period vs relative_period AQL syntax. Review owners: anh Khai To + anh Huy.
    • Lesson reinforced (from Tableau → Sigma cortex skill): conceptual diagram > long demo video.
    • Sources: Power BI projects/report, Power BI projects/dataset.
    • Refs: Notion: BuyCo Call Prep, Notion: PBI↔Holistics Conceptual Differences, Ampcode.
  • NOTE — [[BuyCo]] Luc did some tests with embedding (May 15). Customer-side technical exploration — track for the onboarding call follow-ups.

  • Duty Support

  • DONE — Support ticket — [[PatientsKnowBest]] (#P2, carry-over from W19 WAITING) — closed May 15.

  • DONE — Correct [Datacubed] Query Runs Monitoring dashboard (dashboard, #P1, customer [[Datacubed]]) — closed May 15.

    • Root cause: dashboard + dataset used calendar-month bounds (DATE_TRUNC('month', CURRENT_DATE), @(this month)) but Datacubed’s billing cycle starts on the 20th of each month → MTD usage, daily avg, projected end-of-month all wrong. Customer could not predict if they’d exceed plan limits.
    • Fix:
      • (1) SQL model (datacubed_query_runs_in_current_month_copy.model.aml): rewrote cycle window dynamically from public_tenant_subscriptions.start_cycle_at for tenant_id = 2199023281061 + status = 'active'. Computes n_periods (full months elapsed since scheduled_start) → derives cycle_start + cycle_end.
      • (2) Dataset metrics (datacubed_query_run_usage_monitoring_copy.dataset.aml): Cycle-to-Date Query Runs = max(model.cycle_to_date_query_runs); Projected End-of-Cycle = CTD + (avg_daily_usage × days_remaining_in_cycle). Kept old metric names as hidden aliases for backward compat — no breakage on existing dashboard references.
      • (3) Dashboard UI: converted block v9 to dynamic MarkdownViz showing cycle range + “Day 25 of 30” progress. Relabeled “Month” → “Cycle” across the dashboard. Removed hardcoded this month filter on Area Chart v18 (model now natively cycle-scoped).
    • Internal raise from Slack; customer-side message Slack.
    • Refs: Ampcode (fix billing cycle), Ampcode (customer message).
  • Docs

  • UNBLOCKED — Add demo video for local development docs (#P1, Backlog, 4-week WAITING).

    • Khai To’s 2-way sync tool in holistics CLI shipped this week (holistics sync-code . — bidirectional, no git commit/push needed for preview during dev). WAITING cleared.
    • Doc updates already shipped in 2 PRs on docusaurus/docs/docs/development/local-development-workflow.md:
      • PR #1593: refactored into playbook-style with a 5-command quickstart block + simplified Mermaid (dropped holistics sync-code as separate actor, removed redundant git-setup steps to focus on the active loop).
      • PR #1594: polished Tooling section (CLI/API validation, VS Code extension w/ preview image, MCP server for AI agents, AI skills via holistics/skills marketplace, lineage preview holistics aml lineage, Publish API submit_publish curl example). Added Tabs-based region picker (APAC/US/EU/Custom) in the auth step.
      • 6-step playbook structure: enable Git Workflow → set up local project → auth CLI + start sync → ship to prod → review + merge → publish.
      • Visuals added: Local-dev-experience.mp4 demo video + sync GIF.
    • Next: record additional demo video + walk-through scenario for the embedded video slot (the one currently in docs is the official 2-way sync demo from squad modeling; mine should be a presales-flavored “build a dashboard in minutes” scenario).
    • Refs: Ampcode (doc update).
  • Personal / Tooling

  • DONE — Auto-format execute_aql JSON → markdown amp plugin (#P3, [[AI]], [[Personal]]). Plugin shipped — reduces token cost of MCP result blocks during AQL exploration. Closes one of the two IDEAs queued from W19.

  • DONE (won’t-do) — Daily Slack ingest cronjob POC (#P3, [[Personal]]). Investigated slack-cli activity — native CLI does not expose the surface needed (thread bodies, mention payloads). Closing as not-feasible with current tooling. Revisit if/when Slack ships richer CLI primitives, or if a userToken-based webhook approach becomes attractive.

  • DONE — Fix rg/grep problem when hooked by RTK (#P3, [[Personal]]) — closed May 12.

    • RTK rewrite hook installed in W19 was breaking rg/grep invocations. Patched. Refs: Ampcode.
  • DONE — Personal Finance Manager App: rental-affordability simulation (RFC-0002, #P1, [[Personal Finance Manager App]]) — closed May 11.

    • Question: if I add a fixed monthly expense X (e.g. house rent 4M VND, +2.5M from current 1.5M), what does projected monthly expense + savings rate look like?
    • Goal frame: survive on company salary alone, treat teaching income as direct savings.
    • Pivot decision: superseded the broader Phase 1 plan (RFC-0001 — Dagster + MotherDuck + multi-source intelligence) with a minimal vertical-slice MVP (RFC-0002) to get an answer today. RFC-0001 moved to long-term reference.
    • Stack (intentionally minimal): Money Manager SQLite backup (.mmbak) → dbt-duckdb with sqlite extension attaching the backup file directly → 4 models (stg_transactions filters IS_DEL != 1, isolates DO_TYPE 0/1 = income/expense, ignores transfers; stg_categories; agg_monthly_expense; agg_monthly_income excluding “disbursements” advanced for others) → projection_rental_affordability.sql analysis comparing 6-month baseline vs synthetic scenario via dbt vars.
    • Result (journal narrative): small net-saving reduction; survivable on salary alone if I trim giving / cafe / cloud services / game. Decision is safe today. Watch: in ~1.5 years when teaching income drops −16M VND/mo, the picture tightens — but not actionable now.
    • Out-of-scope (deferred): Dagster orchestration, MotherDuck cloud warehouse, multi-currency normalization, transfer pairing, AI chat interface.
    • Refs: Ampcode.
  • DONE — Smartclass UXUI release v0.4.6 (#P1, [[Smartclass]]) — closed May 11.

  • NOTE — Local development workflow with Holistics (captured May 13). Step sequence: enable Git Workflow → clone → install CLI (auth, 2-way sync, AML validation) → optional MCP → optional skills → holistics code-sync .. CLI feedback captured: needs holistics whoami command + --version should indicate latest-or-not.

  • NOTE — Image illustrating BI development workflow (May 15) — bookmarked for future docs/presentations.

  • Learning & Notes

  • LEARNING —   = non-breaking space in markdown. Useful in Holistics dynamic markdown to render a blank text block for presentation/spacing without collapsing.

  • NOTE — “Be loyal to your network, not the company” (r/theprimeagen). Brutal job market mental model. Worth re-reading next time I draft my CV / think about external network investment.

  • NOTE — Conceptual mapping > long video. Lesson from the Tableau → Sigma cortex skill review: when migrating between BI tools, a clear one-page conceptual diagram lands better than a long demo video. Apply directly to the Power BI playbook for BuyCo.

  • NOTE — VCT Pacific 2026 Stage 1 moments (May 16). Good mental-health break — valorant is the one esport I genuinely follow. Captured photos/videos. Healthy weekend pattern: physical event > screen-only entertainment.

  • NOTE — Electricity estimate ~800K VND/month (May 17). Personal-finance input for the rental-affordability model.

  • Next Week

  • P1 — Must Do

    • Presales — BuyCo onboarding call (Tue May 19) (customer [[BuyCo]]). Power BI playbook review-ready by Mon EOD so anh Khai To + anh Huy can comment Mon evening → publish to docs Tue AM → present in the call.
      • 3 call goals: (1) PBI → Holistics migration demo (4–7 min curated video, Claude Code translating PBI assets to AML), (2) AI strengths demo (English → AQL, SQL → AQL, dataset modeling), (3) walk through Xairo’s 16-feature evaluation matrix and close the “Hide confidential data” unknown.
      • Critical demo: row-level permissions (@auth filters) + column-level masking for the “Hide confidential data” item — this is the explicit unknown to close.
      • Other matrix items to nail: self-service exploration (catalog/lineage/freshness badges), perf (MotherDuck push-down + aggregate awareness), custom columns (date-diff in GUI — Xairo-specific ask), drill-downs (drill-through + view-underlying-data).
      • UX fixes to address from prior feedback: “Select all columns” in Explore, multi-column conditional formatting, auto-fit column widths, AI chart quality.
      • Asks to drive (commitment forward, not just demo): (a) POC extension scope + end-date; (b) 2–3 deep-dive sessions with Holistics PMs; (c) clear milestone or written commitment to evaluate Holistics as primary BI by a specific date; (d) trial access for BuyCo product designer.
      • Refs: Ampcode (call prep), Notion: BuyCo Call Prep.
    • Presales — Finish Power BI playbook draft ([[Presales]]). Diagrams: (1) PBI↔Holistics conceptual mapping, (2) migration workflow. Apply the “conceptual diagram > long video” lesson.
    • Internal — MRR exchange rate (DAT-576) — 5-week carry-over. Per [[Priority Rules]] 3+ week forcing-function rule: raise in next 1-on-1 to either formally re-scope or hand off — do not commit a “Mon AM hard block” again without addressing why it keeps failing. Stop pattern: do not blindly re-baseline.
    • Docs — Demo video for local development docs — WAITING cleared (Khai To 2-way sync CLI shipped May 14). Update documentation first (Ampcode), then record demo. Aim: draft scenario + 1 doc PR by Fri May 22.
    • Teaching — Soạn roadmap Spark cho Yên ([[Teaching]]). New, captured May 17. Block Sat morning.
  • P2 — Should Do

    • Personal — H1 self-reflection draft + CV refresh for 2026 H1 performance review. 2-week slip already (planned W19 + W20 weekends, both consumed). PR cycle is approaching — block Sat May 23 + Sun May 24 non-negotiable, no Smartclass / VCT compromise.
    • Presales — Learn Descript (learn.descript.com, [[Presales]]) — for demo-video production. Pairs with the local-dev demo-video deliverable.
    • Presales — Onboarding call with Wamly — still WAITING on Chukwudi re-engagement (3-week carry-over from W18). If no movement by Wed, move to formal backlog.
    • Internal — Continue Cross-Model Calculation (DAT-504, Backlog).
    • Internal — Upgrade dbt-core of repo dbt to match prefect.
    • Docs — Send the auto-export dashboard PNG feedback to Khai To (currently draft in Backlog). 2-way sync CLI shipped → now is the right window to send.
  • P3 — Nice to Have

    • Personal — Migrate other notes from Obsidian (in-progress).
    • Teaching — set-based vs row-based thinking exploration; visualization resources research.
  • Backlog (deprioritized)

    • Internal — DAT-524 exclude internal Zoho test accounts — 14-week carry-over. Per [[Priority Rules]]: raise in next 1-on-1 to formally drop or assign owner. Same conversation slot as MRR exchange rate.
  • Approaching due dates

    • Tue May 19 — BuyCo onboarding call.
  • Carry-over watch (3+ weeks)

    • DAT-576 MRR exchange rate — 5 weeks, restart-bound for 4 weeks straight. Raise in 1-on-1.
    • DAT-524 Zoho test accounts — 14 weeks. Raise in 1-on-1.
    • Add demo video for local dev docs — 5 weeks (was WAITING on CLI). Now actionable → ship next week.
    • H1 self-reflection + CV — 2-week slip. Lock Sat May 23 + Sun May 24.
  • Career & Personal Consulting

  • Progress Review — Start / Stop / Keep

    • Keep — close-out discipline on multi-round PR reviews. CircleCI rounds 2–4 in two days, with concrete review-link references. Same standard as the W19 Lead Funnel close — when something is “almost done,” push the last 20% rather than holding.
    • Keep — picking the conceptual-diagram angle for migration sells. Power BI playbook framing came from a real signal (Tableau→Sigma skill review) and a real customer ask (BuyCo). The “conceptual diagram > long video” lesson is reusable for Looker, Tableau, Metabase migrations — bank this as a Presales pattern.
    • Keep — applying personal frameworks to personal decisions. Rental affordability simulation, electricity estimate, “salary alone covers basics” rule — bringing the same data-driven posture from work to personal finance is a good compounding habit.
    • Start — having the hard 1-on-1 about MRR exchange rate. Five consecutive weeks of “Mon AM block consumed by something else” is not about effort or discipline — it is about prioritization. Presales (BuyCo onboarding, Bicycle Transit, Showbie, Datacubed) genuinely outranks DAT-576 in week-to-week customer impact, and that pattern won’t change as long as presales pipeline is hot. The honest conversation is: given current presales volume, DAT-576 needs to either be re-scoped to a presales-compatible size, handed off to someone whose week isn’t presales-loaded, or formally de-prioritized until presales calms down. Three options ready for the 1-on-1.
    • Start — defending weekend deep-work slots like meetings. Two consecutive weekends slid (W19 → W20) on H1 reflection because no “meeting” defends the slot. Block them in calendar with the same weight as a customer call.
    • Stop — treating Sat as overflow for the week. This week’s Sat was VCT + recovery (correct call mentally), but the week didn’t earn it — H1 reflection was already owed. Either earn the rest day by closing the owed deliverable Fri evening, or pre-commit Sat to the deliverable.
  • Workload balance: Presales-heavy (5 items, BuyCo-dominant) + Internal-medium (3 items) + light Duty Support (2 items, both closed). Healthy mix. Customer concentration risk: 5 of 10 work items touch BuyCo — fine in onboarding sprint, but rotate next week.

  • Skill development opportunity: The Power BI playbook is the first “migration playbook” I’m authoring — the structure (artifact mapping table + 8-step workflow + automation framing) is reusable as a template for the next migration (Tableau, Looker, Metabase, Sigma → Holistics). Keep it as an on-demand template, not a committed deliverable — formalizing it into a “6-month playbook series” right now would be premature: ROI isn’t proven until at least one more migration request comes in. Let demand pull the template.

  • Recurring theme: tooling is doing the work I used to do manually (CircleCI close-out with Ampcode, BuyCo theme/dashboard fixes with Ampcode, Datacubed billing-cycle fix with Ampcode, rental simulation with RFC + Ampcode). Time saved this week is real — but every Ampcode handoff is a chance to learn or just to ship. Keep one weekly slot for “no Ampcode” deliberate practice.

  • Watch — 5+ week carry-over on a manager-priority item is its own signal. Each week, presales work legitimately outranks DAT-576 in customer impact (BuyCo onboarding, Bicycle Transit prep, Datacubed fix, Showbie close-out — all real, all timely). The lesson is not “try harder Monday” — it is make the prioritization explicit: DAT-576 is internal-priority but week-to-week is dominated by presales-priority. That’s a manager decision to make, not a personal-discipline problem to solve.

  • Power BI to Sigma migration patterns — direct inspiration for the BuyCo playbook. Study the cortex skill structure (concept mapping table, migration sequence, agent skill prompts) and adapt to Holistics.

  • Power BI Developer Mode (PBIP) — PBI’s “as-code” surface. The closest cognitive bridge for PBI users → AML/AQL: report.json + dataset.tmdl is the file-level analog of .dataset.aml + .model.aml. Use this in the conceptual diagram.

  • TMDL (Tabular Model Definition Language) — PBI’s modeling DSL. Compare side-by-side with AML model syntax for the BuyCo “conceptual mapping” page.

  • Descript — Learn Descript — for the local-dev demo video. Captioning + auto-transcript = faster doc-quality video without manual editing overhead.

  • Multi-currency reporting in dbt — Brooklyn Data Co. + dbt discourse FX threads — keep on the reading list for when DAT-576 gets a real slot.

  • The Mom Test — Rob Fitzpatrick — re-recommended from W19. Apply to the BuyCo onboarding call: ask about specifics (“which PBI workflow takes the longest today?”), avoid leading questions about pain points.

  • Wait But Why — taming the mammoth / Eisenhower — pairs with the MRR exchange rate honesty check. The discomfort of escalating is mostly social-mammoth fear, not strategic risk.

  • VCT Pacific 2026 — keep on the leisure roster. The Sat detachment was good signal that mental-recovery weekends are protective, not lazy.