Skip to main content

Deep research: making the Tech Leaders Brief an advisory asset

Date: 2026-09-11 Scope: /Users/dwayne/Projects/ai-hub, the Tech Leaders Brief pipeline that publishes to dwaynehelena.com.

The problem, stated precisely

The brief was not failing to find news. It was failing to say anything about the news. Every edition rendered as a list of observed headlines with the same two caveats attached to each one:

Headline-level evidence only. Article findings and local implications have not been independently assessed.

That is honest, and it is why the page could be trusted. But it means the brief had no thesis, no mechanism, and no consequence. A CTO reading it learned what was published. They did not learn what it meant, what it committed the vendor to, or what it obliged them to decide. An advisor who only restates the press release is not worth retaining, and the page was doing exactly that.

Root cause

The generator had a full LLM insight path built and never called it.

generate-brief-artifact.py contains synthesize_dynamic_headline(), three model backends (codex, claude CLI, local Ollama), a JSON schema, a prompt builder, and citation whitelisting. In main() the whole thing was short circuited by one line:

dynamic = None

Commit 3bbbc51 ("bind headlines to evidence and expose incomplete coverage") introduced that line deliberately. Before it, the dynamic pass was overwriting section headings positionally against the model's calls list and rewriting cited URLs, which detached headlines from their sources. Disabling the pass was the correct emergency response to a real integrity bug. The side effect was that the brief lost its only analytical layer, and the pipeline reported "dynamic_headline": false on every run, which nobody was reading as a defect.

The lesson worth keeping: a safety fix that silently removes a capability needs a follow-up ticket, not just a commit message. This one sat in production turning every edition into a headline list.

What the corpus already contained

The intellectual property to fix this was already published on the site. The docs/ corpus is not generic AI commentary; it contains named frameworks with real proof points behind them. The strongest:

  • The learning loop (token capital)docs/future-of-firm-ai-learning-loop.md. Human capital and token capital; the moat is the loop, not the model; "you can offload a task, maybe even a whole job, but you cannot offload your learning." Backed by McKinsey 2025, the OpenAI enterprise report, and the MIT NANDA GenAI Divide finding that most pilots fail for organisational reasons.
  • Measurement before claimsdocs/dora-metrics.md. Before a shared definition exists, every team's number is unfalsifiable; standardise the definition, instrument the pipeline, and performance becomes comparable. The Tier-1 bank story (six months to data-driven decisions) is the proof.
  • Platform engineering as cognitive-load reductiondocs/fast-flow.md. Infrastructure overhead fell from ~35% of team capacity to under 10%, deployment frequency tripled, lead time dropped ~70%. Rests on Skelton and Pais and on Reinertsen's flow-efficiency ratio.
  • Memory as production statedocs/architecture.md. Four governed memory classes, each entry carrying provenance, timestamp, owner, and supersession rules.
  • Trajectory evidence for autonomous actiondocs/architecture.md. Prompts, files read, commands run, tool outputs, model selected, fallback activation, final action. Reviewability as the precondition for widening autonomy.
  • Constraint-driven architecturedocs/architecture.md. Modest hardware forced cost-aware routing, a stateless gateway, incremental processing, and a degradation priority order.
  • A published evaluation is a claim; a changed default is a commitmentdocs/devsecops-engineering.md.
  • The defensible asset is the surface, not the modeldocs/intelligence-suite.md and the distribution argument.
  • The harness is the durable asset, not the modeldocs/ai-powered-sdlc-claude-anthropic.md.

None of this was reaching the brief. The brief was reading RSS titles and ignoring the author's own published thinking.

What was built

scripts/tech-leaders-pipeline/advisor_lens.py — a new module holding ten frameworks, each with the exact published name, the non-obvious mechanism, the applied question, the proof point, the external authorities, the source page it traces to, and its topic affinity. Every framework points at a real file in docs/, and a test asserts that, so the library cannot drift from what is actually published.

The generator now applies those frameworks to the day's evidence. On a fresh day it selects the frameworks that match the firing themes, hands them to the model as named lenses, and requires an advisory array in the response: each entry names one framework, gives three to five sentences of mechanism-level analysis, and closes with the single decision the evidence forces on a CTO next quarter.

Three whitelists keep it honest. Framework names must match the published library exactly, so a hallucinated framework cannot be attributed to the author. arXiv IDs must match the real mirror. Section headings and citations are never touched by the dynamic pass, so the integrity invariant from 3bbbc51 is preserved and now has a stronger test.

Verified

  • 32 unit tests pass (python3 -m unittest discover -s scripts/tech-leaders-pipeline/tests -p 'test_*.py'), up from 18. New coverage: framework library integrity, topic-key validity against the editorial taxonomy, deterministic selection, the restatement strip, and the heading/citation binding invariant.
  • A real pipeline run produced "dynamic_headline": true for the first time, with three advisory entries, a synthesised masthead, and the disclosure line rendering correctly.
  • Rendered output inspected visually: framework headings, body analysis, and the "Decision it forces" callouts all render cleanly.
  • The two upstream stage failures (feed-ingester.py transient timeout, dom-extractor.py x.ai HTTP 403) were confirmed pre-existing by running the pipeline with my changes stashed. Not a regression.

Remaining work, in priority order

  1. The masthead is still model-generated and unverified. That is labelled on the page, but a headline carries more implicit authority than a disclosure line can offset. Worth considering whether the masthead should be constrained to the author's own framing.
  2. dom-extractor.py x.ai 403 is a real coverage gap. xAI is silently absent from every brief. The code detects it honestly, but the brief is weaker for it.
  3. Frontier research is under-used. arXiv evidence is available (8 papers today) but the model correctly declined to force a connection. A dedicated "what the research says that the news does not" pass, decoupled from the news items, would use that asset better.
  4. The advisory layer does not yet build a visible body of work over time. Each day's frameworks are selected fresh. A rolling index of "frameworks applied this month" would make the author's intellectual contribution legible to a reader who arrives on any single day, which is the thing that compounds an advisory reputation.
  5. No distribution beyond the site. The brief is published to dwaynehelena.com and announced to Telegram. If the ambition is global advisory leadership, the brief needs a syndication path (LinkedIn, newsletter) with the advisory section as the hook, not the headline list.