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.
- prefect#400 round 2 — closed May 11.
- dbt#858 round 3 — closed May 11.
- dbt#858 round 4 — closed May 12.
- Refs: Notion: Data-model issue uncovered during implementation, Ampcode.
DONE — Alias unnamed columns for
store_failuresviews (dbt#867, #P2) — closed May 12.- Trigger: commit
0c3c494e(May 5) enabled+store_failuresas aviewin 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 unnamedcount(*),concat(...),select 1expressions. 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.
- Trigger: commit
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 Breakdowndashboard dynamic markdown (#P2, customer [[BuyCo]]) — closed May 11.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.TextBlockstyled as all-white cards (#FFFFFFbg,#E5E7EBborder,smshadow) to matchVizBlock. 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 thePieChart(v_w046); renamed filter blocks to drop_copysuffixes. - Dataset reused:
pbi_report_test(modelsdevelop_bronze_cs_shipment,develop_silver_bc_current_booking_legs). - Refs: Slack, Ampcode.
- Migrated dashboard from test path (
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).
.pbipfolder (TMDL + JSON) → AMQL repo (one uniform AMQL syntax).
- Power Query (M) → Query model (
- Migration workflow (8 steps): Prep (
.pbix → .pbipfor TMDL text) → ETL migration (heavy logic to SQL/dbt, light to Query Models) → Model conversion (TMDL →.model.aml,#SOURCEnot${TABLE}) → Measure conversion (DAX → AQL/SQL; simple aggs useaggregation_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.mdintro; customconvert-tmdl-to-amlagent skill; refineperiod_over_periodvsrelative_periodAQL 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.
- Drafted so far:
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 frompublic_tenant_subscriptions.start_cycle_atfortenant_id = 2199023281061+status = 'active'. Computesn_periods(full months elapsed sincescheduled_start) → derivescycle_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
v9to dynamicMarkdownVizshowing cycle range + “Day 25 of 30” progress. Relabeled “Month” → “Cycle” across the dashboard. Removed hardcodedthis monthfilter on Area Chartv18(model now natively cycle-scoped).
- (1) SQL model (
- Internal raise from Slack; customer-side message Slack.
- Refs: Ampcode (fix billing cycle), Ampcode (customer message).
- Root cause: dashboard + dataset used calendar-month bounds (
Docs
UNBLOCKED — Add demo video for local development docs (#P1, Backlog, 4-week WAITING).
- Khai To’s 2-way sync tool in
holisticsCLI shipped this week (holistics sync-code .— bidirectional, nogit commit/pushneeded 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-codeas 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/skillsmarketplace, lineage previewholistics aml lineage, Publish APIsubmit_publishcurl 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.mp4demo video + sync GIF.
- PR #1593: refactored into playbook-style with a 5-command quickstart block + simplified Mermaid (dropped
- 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).
- Khai To’s 2-way sync tool in
Personal / Tooling
DONE — Auto-format
execute_aqlJSON → 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/grepproblem when hooked by RTK (#P3, [[Personal]]) — closed May 12.- RTK rewrite hook installed in W19 was breaking
rg/grepinvocations. Patched. Refs: Ampcode.
- RTK rewrite hook installed in W19 was breaking
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-duckdbwith sqlite extension attaching the backup file directly → 4 models (stg_transactionsfiltersIS_DEL != 1, isolatesDO_TYPE0/1 = income/expense, ignores transfers;stg_categories;agg_monthly_expense;agg_monthly_incomeexcluding “disbursements” advanced for others) →projection_rental_affordability.sqlanalysis 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: needsholistics whoamicommand +--versionshould 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 (
@authfilters) + 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.
- 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.
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-coreof repo dbt to match prefect. - Docs — Send the auto-export dashboard PNG feedback to Khai To (currently
draftin 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.
Recommended resources to learn
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.