Back to article list

Daily Fixes or Real System Evolution?

3 min read

Background

Three main changes this week:

  1. Vite proxy fix - Added /api/otel proxy for local dev, fixing the OTel Collector 404 issue
  2. Scheduler decoupling design spec - Documented plan to eliminate .call(this, ...) anti-pattern in TaskScheduler
  3. CI workflow paradigm shift - Replaced Gemini CLI with local LM Studio, claimed as "de-clouding"

On surface, three independent technical fixes. But put them together, something interesting emerges.


Reflection: Patchwork or Self-Indulgence?

1. OTel proxy fix - Late but right

"POST /api/otel/v1/traces was not proxied in local dev — it fell through to the catch-all /api proxy"

Translation: In local dev, all requests to OTel Collector returned 404. Nobody noticed.

Interesting: production nginx had this configured forever, only local dev suffered. What does this mean?

  • Either nobody tested OTel locally
  • Or they tested but missed the missing data
  • Or they noticed but kept kicking the can

That said, the fix is correct. Adding VITE_OTEL_COLLECTOR_URL env var is reasonable. But the real improvement is in observability.ts logging. Previous logs were probably garbage—you'd have no idea what went wrong.

2. Scheduler decoupling - Another spec

Commit 847101ab: docs: add scheduler god class decoupling design spec.

Docs again. Spec again. Another "plan to eliminate" .call(this, ...) — this anti-pattern that makes TypeScript type checking meaningless. The excessive dependency on this context turns what should be decoupled components into a Gordian knot—no one except the spec author dares to touch it.

How many times now?

From FSM to scheduler to execution gate,管理层 has an obsession with "writing specs." The questions:

  • Spec written, then what?
  • When does actual work start?
  • Will it follow the spec or drift again like before?

Four-phase decoupling sounds nice, but given the "spec→refactor→revert→re-refactor" loops from before, hard not to be skeptical.

3. CI paradigm shift - Really "de-clouded"?

Replacing Gemini CLI with LM Studio, commit says "replace Gemini CLI with local LLM".

But look at the details:

  • LM Studio needs local installation and running
  • Requires GPU or at least decent CPU
  • You need to download models yourself

Called "de-clouding"? That's cost shifting to runner. Plus, local LM Studio brings Runner environment inconsistency—different GPU power = potential timeouts. That's CI's invisible killer.

Also interesting: this change touched three workflows at once (per git log), not incremental migration. Means previous design never considered "LLM swap capability"—hardcoded everywhere.


Technical Debt Self-Diagnosis

Connect these three changes and a pattern emerges:

Change Root Cause Delay Reason
OTel proxy Incomplete local dev Nobody tested observability locally
Scheduler decoupling Architectural decay Prefer specs over refactoring
CI LLM replacement Vendor lock-in Never designed for swapability

All are classic "didn't think it through at design time, patch later" cases.


Conclusion

This week's changes are mixed:

  • ✅ OTel proxy fix is real problem solving, though it exposes previous neglect of local dev quality
  • ⚠️ Scheduler decoupling is yet another spec, need to see execution
  • ❌ CI shift feels more like cost transfer, not real architectural improvement

If this is "system evolution," direction might need re-examination.


AI-generated but human-edited. Removing AI flavor is the goal.

Found this helpful? Buy me a coffee

If this article was helpful, consider supporting continued content creation.

WeChat
WeChat
Alipay
Alipay

评论