<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"><channel><title>Ascendy Engineering</title><description>Ascendy Engineering blog — decisions and tradeoffs from backend/frontend/infra work.</description><link>https://blog.ascendy.ai/</link><item><title>Does AI&apos;s rise make humans obsolete? — from AlphaGo to Shin Jinseo</title><link>https://blog.ascendy.ai/en/blog/from-alphago-to-shin-jinseo-en/</link><guid isPermaLink="true">https://blog.ascendy.ai/en/blog/from-alphago-to-shin-jinseo-en/</guid><description>I got into coding when AlphaGo beat Lee Sedol — it read as &apos;humans lost.&apos; This week Shin Jinseo won a 2-stone handicap game against a stronger AI. Humans didn&apos;t catch up; through AI&apos;s lens, they evolved. Developers too.</description><pubDate>Mon, 20 Jul 2026 00:00:00 GMT</pubDate><category>ai</category><category>go</category><category>future-of-work</category><category>career</category><category>evolution</category><category>opinion</category></item><item><title>I thought it was a simple task — why it took 12 rounds of adversarial review</title><link>https://blog.ascendy.ai/en/blog/why-a-simple-change-took-12-rounds-en/</link><guid isPermaLink="true">https://blog.ascendy.ai/en/blog/why-a-simple-change-took-12-rounds-en/</guid><description>It looked simple: replicate an existing pattern into another mode. But cross-provider review found subtler flaws over 12 rounds. Lesson: &apos;already in the default path&apos; is a dangerous free pass; safety must be proven.</description><pubDate>Mon, 20 Jul 2026 00:00:00 GMT</pubDate><category>ai</category><category>code-review</category><category>adversarial-review</category><category>agent-pair</category><category>cross-provider</category><category>opinion</category></item><item><title>The deployment succeeded and deployed nothing — a mutable tag swallowed the rollout</title><link>https://blog.ascendy.ai/en/blog/deploy-that-deployed-nothing-en/</link><guid isPermaLink="true">https://blog.ascendy.ai/en/blog/deploy-that-deployed-nothing-en/</guid><description>The deploy said success, rollout said complete, the safety net went green — yet production didn&apos;t change. Mutable tag (latest): same name, new content, so Kubernetes saw &apos;no change,&apos; and the safety net passed vacuously.</description><pubDate>Sun, 19 Jul 2026 00:00:00 GMT</pubDate><category>infra</category><category>kubernetes</category><category>helm</category><category>ci-cd</category><category>mutable-tags</category><category>postmortem</category></item><item><title>The people left out of AI — I was unemployed once too</title><link>https://blog.ascendy.ai/en/blog/left-out-of-ai-en/</link><guid isPermaLink="true">https://blog.ascendy.ai/en/blog/left-out-of-ai-en/</guid><description>Some won&apos;t use AI even for free — the barrier isn&apos;t money but having no reason to use it. AI can widen the gap by will, not just money. You can subsidize access, not drive; but you can make sparks and on-ramps.</description><pubDate>Mon, 13 Jul 2026 00:00:00 GMT</pubDate><category>ai</category><category>inequality</category><category>career</category><category>society</category><category>opinion</category><category>future-of-work</category></item><item><title>You get 5 hours a day. AI uses the other 19.</title><link>https://blog.ascendy.ai/en/blog/you-get-5-hours-a-day-en/</link><guid isPermaLink="true">https://blog.ascendy.ai/en/blog/you-get-5-hours-a-day-en/</guid><description>A working person gets about 5 usable hours a day; the other 19 are wasted. AI uses those 19 — for cents an hour. But it pays off only if you first build a fulcrum: verification. Without it, it&apos;s negative leverage.</description><pubDate>Sun, 12 Jul 2026 00:00:00 GMT</pubDate><category>ai</category><category>leverage</category><category>productivity</category><category>agents</category><category>career</category><category>opinion</category></item><item><title>Autonomy and fail-closed don&apos;t conflict — my harness started running itself</title><link>https://blog.ascendy.ai/en/blog/autonomy-and-fail-closed-en/</link><guid isPermaLink="true">https://blog.ascendy.ai/en/blog/autonomy-and-fail-closed-en/</guid><description>I made my harness autonomous — give it one goal and it runs to completion, and it even cut its own release. But autonomy didn&apos;t mean removing review; I added a layer. Adversarial layers still caught real bugs mid-run.</description><pubDate>Sat, 11 Jul 2026 00:00:00 GMT</pubDate><category>ai</category><category>agents</category><category>code-review</category><category>autonomy</category><category>fail-closed</category><category>opinion</category></item><item><title>Hey, have you even tried it? — the fastest way to get good at AI</title><link>https://blog.ascendy.ai/en/blog/have-you-even-tried-it-en/</link><guid isPermaLink="true">https://blog.ascendy.ai/en/blog/have-you-even-tried-it-en/</guid><description>The fastest way to get good at AI? Use it a lot — but build, don&apos;t just search and ask. Playing AlphaGo vs building it changes your questions, and the builder handles AI better. Process, not result, is the asset.</description><pubDate>Thu, 09 Jul 2026 00:00:00 GMT</pubDate><category>ai</category><category>learning</category><category>career</category><category>building</category><category>opinion</category></item><item><title>The product and the tool grow each other — the virtuous loop in how I work</title><link>https://blog.ascendy.ai/en/blog/product-and-tool-grow-each-other-en/</link><guid isPermaLink="true">https://blog.ascendy.ai/en/blog/product-and-tool-grow-each-other-en/</guid><description>I built a tool to build a product. Then the agents building it hit friction — which becomes an issue, improves the tool, improves the product. Not the loop inside the harness, but one level up: an org I designed.</description><pubDate>Wed, 08 Jul 2026 00:00:00 GMT</pubDate><category>ai</category><category>agents</category><category>workflow</category><category>dogfooding</category><category>multi-agent</category><category>opinion</category></item><item><title>I ran every stage on the top model, then moved implementation to a cheap one — here&apos;s why I won&apos;t go back</title><link>https://blog.ascendy.ai/en/blog/where-to-put-the-best-model-en/</link><guid isPermaLink="true">https://blog.ascendy.ai/en/blog/where-to-put-the-best-model-en/</guid><description>Everyone mixes models, but which one goes on plan, implement, and review differs. I started with the top model everywhere, hit token limits, and cheaped out on implementation. Constraints, not taste, decide the layout.</description><pubDate>Tue, 07 Jul 2026 00:00:00 GMT</pubDate><category>ai</category><category>agents</category><category>llm</category><category>cost</category><category>workflow</category><category>opinion</category></item><item><title>Multi-agent isn&apos;t always the answer — so I asked an AI directly</title><link>https://blog.ascendy.ai/en/blog/multi-agent-not-always-the-answer-en/</link><guid isPermaLink="true">https://blog.ascendy.ai/en/blog/multi-agent-not-always-the-answer-en/</guid><description>Does adding more agents help? I asked an AI. It splits on one question — can parallel pieces succeed without knowing each other&apos;s decisions? Yes for reading and exploring; for writing one coherent thing, it backfires.</description><pubDate>Sun, 05 Jul 2026 00:00:00 GMT</pubDate><category>ai</category><category>agents</category><category>multi-agent</category><category>architecture</category><category>opinion</category><category>loop-engineering</category></item><item><title>What should you study in the age of AI? I don&apos;t have the answer either — so I thought it through</title><link>https://blog.ascendy.ai/en/blog/what-should-students-study-en/</link><guid isPermaLink="true">https://blog.ascendy.ai/en/blog/what-should-students-study-en/</guid><description>New-grad hiring is shrinking. What should a student study? I&apos;m not sure either — the floor is Python and vibe coding (the new Word and Excel); the ceiling isn&apos;t credentials but solving a real problem with AI.</description><pubDate>Thu, 02 Jul 2026 00:00:00 GMT</pubDate><category>ai</category><category>education</category><category>career</category><category>future-of-work</category><category>students</category><category>opinion</category></item><item><title>Stop writing reports — put it in the knowledge base. Bureaucracy in the age of AI</title><link>https://blog.ascendy.ai/en/blog/bureaucracy-push-vs-pull-en/</link><guid isPermaLink="true">https://blog.ascendy.ai/en/blog/bureaucracy-push-vs-pull-en/</guid><description>Reporting for the sake of reporting should die. A report is push — inefficient sharing. Have humans drop in raw data and an agent process it; readers pull what they need. Big companies thin to their strengths.</description><pubDate>Tue, 30 Jun 2026 00:00:00 GMT</pubDate><category>ai</category><category>future-of-work</category><category>organization</category><category>bureaucracy</category><category>knowledge-management</category><category>opinion</category></item><item><title>I didn&apos;t design it — I delegated it</title><link>https://blog.ascendy.ai/en/blog/i-didnt-design-it-i-delegated-en/</link><guid isPermaLink="true">https://blog.ascendy.ai/en/blog/i-didnt-design-it-i-delegated-en/</guid><description>Someone asked how I designed the git branching for parallel agents. I didn&apos;t — I delegated it. The developer instinct &apos;how do I solve this&apos; has to shift to &apos;how do I delegate this, and make the result trustworthy.&apos;</description><pubDate>Tue, 30 Jun 2026 00:00:00 GMT</pubDate><category>ai</category><category>agents</category><category>delegation</category><category>loop-engineering</category><category>redteam</category><category>opinion</category></item><item><title>The real cost of coordination files wasn&apos;t disk — it was agent context pollution</title><link>https://blog.ascendy.ai/en/blog/coordination-context-pollution-en/</link><guid isPermaLink="true">https://blog.ascendy.ai/en/blog/coordination-context-pollution-en/</guid><description>We moved cross-repo coordination from files to GitHub Issues. Disk wasn&apos;t the problem. The real cost: every grep/ls pulled those files into the agent context window and burned tokens — a tax an agent pays every turn.</description><pubDate>Sun, 28 Jun 2026 00:00:00 GMT</pubDate><category>multi-agent</category><category>developer-workflow</category><category>github-issues</category><category>context-window</category><category>governance</category><category>war-story</category><category>adversarial-review</category></item><item><title>I set helm upgrade --timeout 10m — so why did it hang for 25 minutes?</title><link>https://blog.ascendy.ai/en/blog/helm-timeout-apiserver-hang-en/</link><guid isPermaLink="true">https://blog.ascendy.ai/en/blog/helm-timeout-apiserver-hang-en/</guid><description>A CI helm deploy hung 25 minutes and locked the release. Why didn’t --timeout 10m kill it? helm’s --timeout bounds only the wait/hook phase, not the apiserver hang before it. The real backstop was a CI job timeout.</description><pubDate>Sun, 28 Jun 2026 00:00:00 GMT</pubDate><category>kubernetes</category><category>helm</category><category>ci-cd</category><category>github-actions</category><category>self-healing</category><category>timeout</category><category>incident</category><category>war-story</category></item><item><title>My review tool could approve nothing — then it caught me</title><link>https://blog.ascendy.ai/en/blog/review-tool-caught-the-author-en/</link><guid isPermaLink="true">https://blog.ascendy.ai/en/blog/review-tool-caught-the-author-en/</guid><description>redteam&apos;s one-off review could never return APPROVED — a dead gate. After I fixed it, the tool caught a flaw I&apos;d just defended as an &apos;improvement.&apos; An author&apos;s certainty can&apos;t cross another provider&apos;s review.</description><pubDate>Sun, 28 Jun 2026 00:00:00 GMT</pubDate><category>adversarial-review</category><category>dogfooding</category><category>redteam</category><category>cross-provider</category><category>agent-pair</category></item><item><title>Build in studying — learning while you build, how non-engineers make vertical AI</title><link>https://blog.ascendy.ai/en/blog/build-in-studying-en/</link><guid isPermaLink="true">https://blog.ascendy.ai/en/blog/build-in-studying-en/</guid><description>Vertical AI shrank the distance from idea to shipping, not skill acquisition. Build with AI and even domain learning speeds up — a non-traditional career becomes raw material, though not everyone makes it.</description><pubDate>Sat, 27 Jun 2026 00:00:00 GMT</pubDate><category>ai</category><category>vertical-ai</category><category>vibe-coding</category><category>learning</category><category>career</category><category>opinion</category></item><item><title>Spend fewer tokens, spend more — both companies are half right</title><link>https://blog.ascendy.ai/en/blog/token-usage-not-productivity-en/</link><guid isPermaLink="true">https://blog.ascendy.ai/en/blog/token-usage-not-productivity-en/</guid><description>&apos;Token efficiency&apos; and &apos;tokenmaxxing&apos; look opposite, but both measure token volume — the AI era&apos;s overtime hours. The real axis is productivity on the bottleneck: set a generous cap, then judge results, not token count.</description><pubDate>Fri, 26 Jun 2026 00:00:00 GMT</pubDate><category>ai</category><category>productivity</category><category>token-economy</category><category>measurement</category><category>opinion</category></item><item><title>The model I trusted most led me into a dead end</title><link>https://blog.ascendy.ai/en/blog/trusted-model-dead-end-en/</link><guid isPermaLink="true">https://blog.ascendy.ai/en/blog/trusted-model-dead-end-en/</guid><description>Four stages of migrating a photo-preprocessing pipeline. The model I trusted most recommended a dead end; the answer was in none of the models but in moving between them. Automating that cross-check became redteam.</description><pubDate>Wed, 24 Jun 2026 00:00:00 GMT</pubDate><category>multi-model</category><category>redteam</category><category>ai-infra</category><category>cross-review</category><category>build-in-public</category></item><item><title>The heart of loop engineering is verification — and the verifier must be a different model</title><link>https://blog.ascendy.ai/en/blog/loop-engineering-verifier-en/</link><guid isPermaLink="true">https://blog.ascendy.ai/en/blog/loop-engineering-verifier-en/</guid><description>Prompt → context → harness → loop engineering. The 2026 axis is the loop; its core is the verifier. A model judges its own work poorly — verify with a different agent (canon); this post argues for a different provider.</description><pubDate>Mon, 22 Jun 2026 00:00:00 GMT</pubDate><category>loop-engineering</category><category>agents</category><category>adversarial-review</category><category>redteam</category><category>oss</category></item><item><title>Who does AI replace? Job levels are dead — what&apos;s left is the filter</title><link>https://blog.ascendy.ai/en/blog/who-does-ai-replace-en/</link><guid isPermaLink="true">https://blog.ascendy.ai/en/blog/who-does-ai-replace-en/</guid><description>&apos;AI cuts juniors first&apos; is the wrong axis. Survival isn&apos;t a level — it&apos;s knowing what, how, and why to ask AI, and seeing when its easy answer is wrong for your problem. And AI tends to just agree with you.</description><pubDate>Mon, 22 Jun 2026 00:00:00 GMT</pubDate><category>ai</category><category>future-of-work</category><category>career</category><category>opinion</category><category>epistemics</category></item><item><title>How to reject a feature — an AI pair cut its own roadmap, on the record</title><link>https://blog.ascendy.ai/en/blog/how-to-reject-a-feature-en/</link><guid isPermaLink="true">https://blog.ascendy.ai/en/blog/how-to-reject-a-feature-en/</guid><description>Deciding not to build a feature is engineering too. redteam shipped 1 of #37&apos;s 3 steps and rejected 2 by design — kept as a decision record with guardrails and revival conditions, not silently dropped.</description><pubDate>Sun, 21 Jun 2026 00:00:00 GMT</pubDate><category>decision-record</category><category>oss</category><category>agent-pair</category><category>yagni</category><category>trust</category></item><item><title>Using AI to write your résumé isn&apos;t cheating — so what do you read instead?</title><link>https://blog.ascendy.ai/en/blog/stop-reading-resumes-en/</link><guid isPermaLink="true">https://blog.ascendy.ai/en/blog/stop-reading-resumes-en/</guid><description>Is using AI to write your résumé cheating? People have always padded theirs. A single résumé is forgeable no matter who wrote it — so don&apos;t judge by it alone; read the timestamped record instead, and hire by that.</description><pubDate>Sun, 21 Jun 2026 00:00:00 GMT</pubDate><category>ai</category><category>hiring</category><category>career</category><category>opinion</category><category>future-of-work</category></item><item><title>It said &apos;Sync complete&apos; — and uploaded zero. Silent success is the dangerous one</title><link>https://blog.ascendy.ai/en/blog/sync-complete-zero-uploaded-en/</link><guid isPermaLink="true">https://blog.ascendy.ai/en/blog/sync-complete-zero-uploaded-en/</guid><description>Photos wouldn&apos;t sync, yet the app said &apos;complete&apos; — zero uploaded. The frontend ranked 9 hypotheses from code and hit the backend&apos;s answer: a client scan cap. Then a reviewer caught a data-distribution bug in the fix.</description><pubDate>Sun, 21 Jun 2026 00:00:00 GMT</pubDate><category>debugging</category><category>silent-failure</category><category>code-review</category><category>frontend</category><category>data-distribution</category></item><item><title>All tests green — and a validator that did nothing</title><link>https://blog.ascendy.ai/en/blog/pydantic-before-after-false-green-en/</link><guid isPermaLink="true">https://blog.ascendy.ai/en/blog/pydantic-before-after-false-green-en/</guid><description>A Pydantic validator passed six tests but normalized nothing in production: mode=&apos;before&apos; runs before coercion, so the value is still a string — isinstance always missed, and the tests fed datetime objects that hid it.</description><pubDate>Sat, 20 Jun 2026 00:00:00 GMT</pubDate><category>pydantic</category><category>validation</category><category>testing</category><category>false-green</category><category>backend</category></item><item><title>Why you can&apos;t trust an LLM&apos;s score — lock the band, let the model judge only inside it</title><link>https://blog.ascendy.ai/en/blog/hybrid-determinism-grading-en/</link><guid isPermaLink="true">https://blog.ascendy.ai/en/blog/hybrid-determinism-grading-en/</guid><description>LLM scores wobble on the same input. portfolio&apos;s /fit and /rating lock the grade band in deterministic code and let the model judge only inside it — the reproducibility guarantee is the band, not temperature.</description><pubDate>Fri, 19 Jun 2026 00:00:00 GMT</pubDate><category>grounding</category><category>ai</category><category>determinism</category><category>evaluation</category><category>developer-tools</category></item><item><title>Beyond the six stages — the AI organization and its blind spot</title><link>https://blog.ascendy.ai/en/blog/ai-beyond-six-stages-en/</link><guid isPermaLink="true">https://blog.ascendy.ai/en/blog/ai-beyond-six-stages-en/</guid><description>Above the sixth stage is a seventh: configuring and running AI agents like an organization. And above that sits a layer of judgment only humans can do.</description><pubDate>Thu, 18 Jun 2026 00:00:00 GMT</pubDate><category>ai</category><category>organization</category><category>agents</category></item><item><title>The 6 stages of using AI — where are you right now?</title><link>https://blog.ascendy.ai/en/blog/ai-six-stages-en/</link><guid isPermaLink="true">https://blog.ascendy.ai/en/blog/ai-six-stages-en/</guid><description>Split the skill of using AI into stages and your own position comes into focus. Most people stop at Stage 3, and the jump to Stage 4 is the hardest one.</description><pubDate>Thu, 18 Jun 2026 00:00:00 GMT</pubDate><category>ai</category><category>productivity</category><category>workflow</category></item><item><title>I built a portfolio harness to change jobs — and made &apos;don&apos;t make things up&apos; structural</title><link>https://blog.ascendy.ai/en/blog/portfolio-public-launch-en/</link><guid isPermaLink="true">https://blog.ascendy.ai/en/blog/portfolio-public-launch-en/</guid><description>No tool optimized my agent-assisted job switch, so I built and shipped one (portfolio, Apache-2.0). &apos;Don&apos;t make things up&apos; is structural here: pin evidence first, the model writes on top, a gate rejects unbacked claims.</description><pubDate>Wed, 17 Jun 2026 00:00:00 GMT</pubDate><category>grounding</category><category>ai</category><category>portfolio</category><category>developer-tools</category><category>launch</category><category>trust</category></item><item><title>Why you can&apos;t trust an AI-written portfolio — making &apos;never invented&apos; a structural guarantee, not a hope</title><link>https://blog.ascendy.ai/en/blog/portfolio-harness-launch-en/</link><guid isPermaLink="true">https://blog.ascendy.ai/en/blog/portfolio-harness-launch-en/</guid><description>AI résumé generators are easy to build, hard to trust — they exaggerate and hallucinate. portfolio inverts it: pin evidence first via gh, let the model narrate atop it, and a grounding gate rejects untraceable claims.</description><pubDate>Tue, 16 Jun 2026 00:00:00 GMT</pubDate><category>grounding</category><category>ai</category><category>portfolio</category><category>developer-tools</category><category>harness</category><category>trust</category></item><item><title>We let one AI review another AI&apos;s PRs — it caught four HIGH bugs before merge</title><link>https://blog.ascendy.ai/en/blog/redteam-adversarial-review-four-bugs-en/</link><guid isPermaLink="true">https://blog.ascendy.ai/en/blog/redteam-adversarial-review-four-bugs-en/</guid><description>In redteam&apos;s 0.3 cycle, a different-provider model reviewed another AI&apos;s PRs and caught four HIGH defects — all ~95% correct, one security detail missing. The kind self-review rubber-stamps. Not a benchmark, a merge log.</description><pubDate>Tue, 16 Jun 2026 00:00:00 GMT</pubDate><category>adversarial-review</category><category>ai-agents</category><category>code-review</category><category>redteam</category><category>trust</category><category>semver</category></item><item><title>What mattered in self-healing a secret wasn&apos;t the tool — it was where the loop runs</title><link>https://blog.ascendy.ai/en/blog/secret-self-heal-source-location-en/</link><guid isPermaLink="true">https://blog.ascendy.ai/en/blog/secret-self-heal-source-location-en/</guid><description>Self-healing a deletable pull-secret, I almost reached for the heavy &apos;proper&apos; answer. One question — &apos;why not a CI secret?&apos; — flipped it. What mattered wasn&apos;t the tool, but where the source and reconcile engine run.</description><pubDate>Sat, 13 Jun 2026 00:00:00 GMT</pubDate><category>kubernetes</category><category>secrets</category><category>self-healing</category><category>design-decision</category><category>over-engineering</category><category>war-story</category></item><item><title>&apos;A global default OG is safe&apos; is a lie — og:url and canonical have no default</title><link>https://blog.ascendy.ai/en/blog/seo-per-page-canonical-en/</link><guid isPermaLink="true">https://blog.ascendy.ai/en/blog/seo-per-page-canonical-en/</guid><description>The easy trap in a Nuxt SEO baseline: og:url and canonical have no meaningful default. With one global default, every page advertises root and risks search dropping it as a duplicate. Per-page override is mandatory.</description><pubDate>Fri, 12 Jun 2026 00:00:00 GMT</pubDate><category>nuxt</category><category>seo</category><category>open-graph</category><category>canonical</category><category>lessons-from-review</category></item><item><title>Onboarding re-appeared on every login — why the &apos;quick fix&apos; was wrong, and the real cause (a cold-load race)</title><link>https://blog.ascendy.ai/en/blog/onboarding-cold-load-race-en/</link><guid isPermaLink="true">https://blog.ascendy.ai/en/blog/onboarding-cold-load-race-en/</guid><description>Skip onboarding, it returns next login. Wrong guess: the parent never PATCHes — the child already did. Real cause: Pinia doesn&apos;t await $subscribe callbacks, so login hydration is fire-and-forget and races gallery mount.</description><pubDate>Thu, 11 Jun 2026 00:00:00 GMT</pubDate><category>nuxt</category><category>pinia</category><category>race-condition</category><category>settings-hydration</category><category>lessons-from-review</category></item><item><title>Reviewing it line by line was slower than writing it — working with agents calls for a C-level mindset</title><link>https://blog.ascendy.ai/en/blog/from-ic-to-c-level-en/</link><guid isPermaLink="true">https://blog.ascendy.ai/en/blog/from-ic-to-c-level-en/</guid><description>Reviewing AI code line by line took longer than writing it. When models were weak, that was right. Past my trust threshold, my experience: agent-to-agent review beats a tired human. My take: the posture is C-level.</description><pubDate>Wed, 10 Jun 2026 00:00:00 GMT</pubDate><category>ai-agent</category><category>engineering-management</category><category>ai-collaboration</category><category>developer-mindset</category><category>opinion</category></item><item><title>When a reviewer just says &apos;looks good,&apos; what&apos;s the point? — introducing redteam, an adversarial agent-pair harness</title><link>https://blog.ascendy.ai/en/blog/redteam-launch-en/</link><guid isPermaLink="true">https://blog.ascendy.ai/en/blog/redteam-launch-en/</guid><description>Hand review to a second model and you often get &apos;looks good&apos; — a rubber stamp. redteam (open source, v0.1.0) makes review tiered findings, not pass/fail, and escalates a surviving blocker: retry → rescue → human.</description><pubDate>Wed, 10 Jun 2026 00:00:00 GMT</pubDate><category>ai-collaboration</category><category>adversarial-review</category><category>open-source</category><category>developer-tools</category><category>agent-harness</category></item><item><title>We dropped the reranker from vector search — what &apos;find all the baby photos&apos; broke</title><link>https://blog.ascendy.ai/en/blog/dropping-the-reranker-en/</link><guid isPermaLink="true">https://blog.ascendy.ai/en/blog/dropping-the-reranker-en/</guid><description>We dropped the reranker from photo search. &apos;Find all the baby photos&apos; returns thousands — a recall problem, not the precision@k a reranker is for. So we used MRL embeddings: low-dim filter, then high-dim refine.</description><pubDate>Tue, 09 Jun 2026 00:00:00 GMT</pubDate><category>vector-search</category><category>embeddings</category><category>reranker</category><category>matryoshka</category><category>retrieval</category><category>rag</category></item><item><title>Self-improvement loops have arrived — but someone still has to write the correction down</title><link>https://blog.ascendy.ai/en/blog/capture-is-the-bottleneck-en/</link><guid isPermaLink="true">https://blog.ascendy.ai/en/blog/capture-is-the-bottleneck-en/</guid><description>I wished my AI tool would learn from my complaints and fix itself. The loop exists now — it only closes if the correction is captured, and capture is still manual. The hard part was never improve; it&apos;s capture→route.</description><pubDate>Mon, 08 Jun 2026 00:00:00 GMT</pubDate><category>ai-agent</category><category>feedback-loop</category><category>self-improvement</category><category>developer-tools</category><category>process-design</category></item><item><title>Making cancel-and-refund idempotent — put the terminal state transition last</title><link>https://blog.ascendy.ai/en/blog/idempotent-cancel-refund-en/</link><guid isPermaLink="true">https://blog.ascendy.ai/en/blog/idempotent-cancel-refund-en/</guid><description>Cancelling a costly async job and refunding it must survive a crash mid-way. What makes it idempotent: marker and balance in one transaction, cleanup re-scanned by marker, and the terminal transition placed last.</description><pubDate>Sun, 07 Jun 2026 00:00:00 GMT</pubDate><category>idempotency</category><category>distributed-systems</category><category>race-condition</category><category>transactions</category><category>reliability</category></item><item><title>Everything you can click should also be sayable — yet enabling it started with a menu</title><link>https://blog.ascendy.ai/en/blog/conversational-parity-en/</link><guid isPermaLink="true">https://blog.ascendy.ai/en/blog/conversational-parity-en/</guid><description>I asked an AI agent to recall my past conversations. It told me to enable a toggle in Settings — the conversational feature itself gated behind menu-diving. The industry proved parity works, then stopped halfway.</description><pubDate>Sat, 06 Jun 2026 00:00:00 GMT</pubDate><category>ai-agent</category><category>ux</category><category>conversational-ui</category><category>product-design</category><category>opinion</category></item><item><title>Two AIs picked the same answer — the worth was catching the wrong reasoning inside it</title><link>https://blog.ascendy.ai/en/blog/right-answer-wrong-reasoning-en/</link><guid isPermaLink="true">https://blog.ascendy.ai/en/blog/right-answer-wrong-reasoning-en/</guid><description>Claude and Codex independently reached the same decision. Yet the second AI&apos;s worth wasn&apos;t disagreeing with the conclusion — even with the same answer, it caught the wrong reasoning holding that right answer up.</description><pubDate>Fri, 05 Jun 2026 00:00:00 GMT</pubDate><category>ai-collaboration</category><category>adversarial-review</category><category>decision-making</category><category>code-review</category><category>reasoning</category></item><item><title>A report arriving changes nothing — the broken link was &apos;route&apos;, not &apos;measure&apos;</title><link>https://blog.ascendy.ai/en/blog/monitoring-closed-loop-route-en/</link><guid isPermaLink="true">https://blog.ascendy.ai/en/blog/monitoring-closed-loop-route-en/</guid><description>A report that just arrives is worth zero — it only matters in a closed loop. Our broken link wasn&apos;t &apos;measure&apos;, it was &apos;route&apos;: improvements surfaced but evaporated in human-memory relay. The human was the bottleneck.</description><pubDate>Thu, 04 Jun 2026 00:00:00 GMT</pubDate><category>monitoring</category><category>observability</category><category>feedback-loop</category><category>process-design</category><category>automation</category><category>agent-ops</category></item><item><title>A plausible-fake default quietly swallows missing prod config — tie validation to an environment signal</title><link>https://blog.ascendy.ai/en/blog/placeholder-defaults-mask-config-en/</link><guid isPermaLink="true">https://blog.ascendy.ai/en/blog/placeholder-defaults-mask-config-en/</guid><description>A secret drift evaporated env keys. The nasty one fell silently: a default was a plausible fake (example.com), so the code quietly hit a fake host and failed — no error, no log. Tie validation to an environment signal.</description><pubDate>Thu, 04 Jun 2026 00:00:00 GMT</pubDate><category>configuration</category><category>fail-fast</category><category>silent-failure</category><category>observability</category><category>twelve-factor</category><category>defense-in-depth</category></item><item><title>I believed it converted, but it only renamed — and the failed jobs vanished from the list</title><link>https://blog.ascendy.ai/en/blog/rename-not-convert-en/</link><guid isPermaLink="true">https://blog.ascendy.ai/en/blog/rename-not-convert-en/</guid><description>A bulk photo edit failed wholesale with no error UI. One path renamed HEIC to .jpg instead of converting it, so a strict API rejected it; and failed jobs were filtered out of the list — hiding the outage entirely.</description><pubDate>Thu, 04 Jun 2026 00:00:00 GMT</pubDate><category>image-processing</category><category>heic</category><category>silent-failure</category><category>error-contract</category><category>debugging</category></item><item><title>The rename PR was the widest PR — a rename is a doc sweep, not a filename change</title><link>https://blog.ascendy.ai/en/blog/rename-pr-is-a-doc-sweep-en/</link><guid isPermaLink="true">https://blog.ascendy.ai/en/blog/rename-pr-is-a-doc-sweep-en/</guid><description>Renaming one file looked like &apos;a filename + a line.&apos; The real work: sweeping every live doc describing its behavior. Review caught 6 I missed; round-2 caught one the reviewer missed. The round cycle is a cumulative net.</description><pubDate>Thu, 04 Jun 2026 00:00:00 GMT</pubDate><category>code-review</category><category>documentation</category><category>refactoring</category><category>ai-agents</category><category>convergence</category><category>developer-tooling</category></item><item><title>Public to serve, secret to keep — reclassifying an ownership-proof key</title><link>https://blog.ascendy.ai/en/blog/serving-a-public-but-secret-key-en/</link><guid isPermaLink="true">https://blog.ascendy.ai/en/blog/serving-a-public-but-secret-key-en/</guid><description>We classified an ownership-proof key as &apos;public&apos; and committed it to git. But the docs call it semi-secret. A value served publicly yet kept out of git? Serve it from an edge Worker secret, not a static file.</description><pubDate>Thu, 04 Jun 2026 00:00:00 GMT</pubDate><category>cloudflare-workers</category><category>secrets-hygiene</category><category>secret-classification</category><category>code-review</category><category>indexnow</category></item><item><title>The constraint that blocked the deploy — required anti-affinity and the missing second node</title><link>https://blog.ascendy.ai/en/blog/anti-affinity-deploy-order-trap-en/</link><guid isPermaLink="true">https://blog.ascendy.ai/en/blog/anti-affinity-deploy-order-trap-en/</guid><description>To break a SPOF we added &apos;required&apos; anti-affinity — but no node could satisfy it yet. An unrelated team&apos;s CD stalled 25 hours; helm failed 5 times. A spread constraint before the room to spread blocks the deploy.</description><pubDate>Wed, 03 Jun 2026 00:00:00 GMT</pubDate><category>kubernetes</category><category>helm</category><category>pod-anti-affinity</category><category>continuous-deployment</category><category>deploy-order</category><category>root-cause-analysis</category></item><item><title>One recreate and the vector DB never came up — compose `${VAR}` interpolation ≠ env_file</title><link>https://blog.ascendy.ai/en/blog/compose-interpolation-not-env-file-en/</link><guid isPermaLink="true">https://blog.ascendy.ai/en/blog/compose-interpolation-not-env-file-en/</guid><description>Recreating one worker dragged the vector DB along, and it hung at &apos;starting&apos;. The cause: an empty storage key — compose&apos;s ${VAR} interpolation resolves from the host shell at parse time, not from a service&apos;s env_file.</description><pubDate>Wed, 03 Jun 2026 00:00:00 GMT</pubDate><category>docker-compose</category><category>vector-database</category><category>object-storage</category><category>silent-failure</category><category>credentials</category><category>root-cause-analysis</category></item><item><title>How you call the second AI, and when to stop it — a headless adversarial review loop</title><link>https://blog.ascendy.ai/en/blog/headless-adversarial-review-loop-en/</link><guid isPermaLink="true">https://blog.ascendy.ai/en/blog/headless-adversarial-review-loop-en/</guid><description>Call the review agent as a headless subprocess with forced output, not by driving its screen — ending screen-parsing&apos;s fragility. And a human-drawn &apos;stop line&apos; the reviewer judges converges it: 9→7→3→APPROVED.</description><pubDate>Wed, 03 Jun 2026 00:00:00 GMT</pubDate><category>ai-agents</category><category>code-review</category><category>automation</category><category>dogfooding</category><category>developer-tooling</category><category>convergence</category></item><item><title>Three alarms, one root — a node host freeze that split three ways</title><link>https://blog.ascendy.ai/en/blog/host-freeze-three-alarms-one-root-en/</link><guid isPermaLink="true">https://blog.ascendy.ai/en/blog/host-freeze-three-alarms-one-root-en/</guid><description>Search down, metrics going backward, a node flapping — three alarms in different domains, one root: a node&apos;s host freeze. Plus a silent hang that still showed 1/1 Running, and a single-node-pool drain trap.</description><pubDate>Wed, 03 Jun 2026 00:00:00 GMT</pubDate><category>kubernetes</category><category>elasticsearch</category><category>observability</category><category>incident</category><category>root-cause-analysis</category><category>health-probes</category></item><item><title>How a fixed bug came back — and how the diagnosis flipped a second time</title><link>https://blog.ascendy.ai/en/blog/nuxt-client-middleware-skips-initial-route-en/</link><guid isPermaLink="true">https://blog.ascendy.ai/en/blog/nuxt-client-middleware-skips-initial-route-en/</guid><description>A session-expired redirect broke; the fix was alive, only the path to it was cut. We blamed a &apos;Nuxt trait&apos; — also wrong: middleware ignores `.client`, a naming artifact. A fact-check drove the code fix.</description><pubDate>Wed, 03 Jun 2026 00:00:00 GMT</pubDate><category>nuxt3</category><category>ssr</category><category>middleware</category><category>session-expired</category><category>incident-prevention</category><category>playwright</category></item><item><title>The green light was lying — an ERROR right next to succeeded</title><link>https://blog.ascendy.ai/en/blog/silent-primary-write-dual-write-en/</link><guid isPermaLink="true">https://blog.ascendy.ai/en/blog/silent-primary-write-dual-write-en/</guid><description>A worker logged the same ERROR every run — yet the next line, the task ended succeeded. A dual-write hid the primary write&apos;s failure, and a create-guard never propagated a new schema to an existing collection.</description><pubDate>Wed, 03 Jun 2026 00:00:00 GMT</pubDate><category>vector-database</category><category>schema-migration</category><category>observability</category><category>debugging</category><category>idempotency</category><category>silent-failure</category></item><item><title>GitHub Actions to GCP without a long-lived key — the hard part wasn&apos;t WIF</title><link>https://blog.ascendy.ai/en/blog/wif-github-actions-gcp-en/</link><guid isPermaLink="true">https://blog.ascendy.ai/en/blog/wif-github-actions-gcp-en/</guid><description>We swapped the SA-key-in-a-Secret path for Workload Identity Federation. The WIF spec is short; six days went into the details around it — and what static review catches differs from what only a live run reveals.</description><pubDate>Wed, 03 Jun 2026 00:00:00 GMT</pubDate><category>workload-identity-federation</category><category>github-actions</category><category>gcp</category><category>ci-cd</category><category>oidc</category><category>security</category></item><item><title>Photo clouds solved storage, not finding — why we built Ascendy</title><link>https://blog.ascendy.ai/en/blog/why-we-built-ascendy-en/</link><guid isPermaLink="true">https://blog.ascendy.ai/en/blog/why-we-built-ascendy-en/</guid><description>Fixing a teary birthday photo with AI swapped my child&apos;s face. That detour led elsewhere: photo clouds solved storage, not finding. Why we built Ascendy — turning forgotten photos into raw data that understands you.</description><pubDate>Tue, 02 Jun 2026 00:00:00 GMT</pubDate><category>ascendy</category><category>product</category><category>photo-cloud</category><category>natural-language-search</category><category>ai-agents</category></item><item><title>The benevolent lie — how much hallucination do you allow in an AI-written post?</title><link>https://blog.ascendy.ai/en/blog/benevolent-lie-hallucination-en/</link><guid isPermaLink="true">https://blog.ascendy.ai/en/blog/benevolent-lie-hallucination-en/</guid><description>An AI draft slipped in a detail not in the source — &apos;3am, the third OOM.&apos; It reads well, but I don&apos;t know if it&apos;s true. When human memory is itself a kind of hallucination, where&apos;s the line between color and fact?</description><pubDate>Mon, 01 Jun 2026 00:00:00 GMT</pubDate><category>ai-writing</category><category>hallucination</category><category>fact-checking</category><category>vibe-coding</category><category>memory</category><category>editorial</category></item><item><title>The bottleneck in writing wasn&apos;t the answer — it was the question. Why I built an agent that interviews me</title><link>https://blog.ascendy.ai/en/blog/interview-harness-en/</link><guid isPermaLink="true">https://blog.ascendy.ai/en/blog/interview-harness-en/</guid><description>I gave topic and writing to agents and the prose went lifeless — not for lack of a human author, but because the source had no first-hand scene. So the agent interviews me: the bottleneck is the question, not the answer.</description><pubDate>Mon, 01 Jun 2026 00:00:00 GMT</pubDate><category>ai-writing</category><category>interview</category><category>editorial-workflow</category><category>writing-process</category><category>ai-agents</category><category>meta</category></item><item><title>We paired two AI models and got slower — so we routed work by tier</title><link>https://blog.ascendy.ai/en/blog/agent-os-dogfooding-journey-en/</link><guid isPermaLink="true">https://blog.ascendy.ai/en/blog/agent-os-dogfooding-journey-en/</guid><description>A solo dev&apos;s three-stage evolution of an LLM coding-agent harness: single model → cross-model pairing → routing work into tiers. Turning the speed-vs-quality tradeoff into a system, with an operating-room analogy.</description><pubDate>Sun, 31 May 2026 00:00:00 GMT</pubDate><category>llm-agents</category><category>pair-programming</category><category>claude-code</category><category>codex</category><category>agent-os</category><category>dogfooding</category><category>developer-workflow</category></item><item><title>Commenting out a feature doesn&apos;t bring it back — the double-trigger race we found restoring it</title><link>https://blog.ascendy.ai/en/blog/commented-out-listeners-race-en/</link><guid isPermaLink="true">https://blog.ascendy.ai/en/blog/commented-out-listeners-race-en/</guid><description>An auto-sync trigger we commented out was never restored, so the feature silently died. Restoring it exposed a double-trigger race: an await between check and act defeated the re-entrancy lock.</description><pubDate>Sun, 31 May 2026 00:00:00 GMT</pubDate><category>capacitor</category><category>concurrency</category><category>race-condition</category><category>incident-prevention</category><category>vue</category></item><item><title>ERROR showed, INFO vanished — the two traps that swallowed our Celery logs</title><link>https://blog.ascendy.ai/en/blog/celery-silent-info-logs-en/</link><guid isPermaLink="true">https://blog.ascendy.ai/en/blog/celery-silent-info-logs-en/</guid><description>A Celery worker logged zero INFO lines while ERROR showed fine. Two layers: Python logging uninitialized at the worker entry point, and a YAML block scalar that let bash chop the worker command apart.</description><pubDate>Sun, 31 May 2026 00:00:00 GMT</pubDate><category>celery</category><category>python-logging</category><category>docker-compose</category><category>yaml</category><category>observability</category><category>debugging</category></item><item><title>Only one model kept 404&apos;ing — a preview-alias time bomb meets branch asymmetry</title><link>https://blog.ascendy.ai/en/blog/preview-model-alias-timebomb-en/</link><guid isPermaLink="true">https://blog.ascendy.ai/en/blog/preview-model-alias-timebomb-en/</guid><description>In a multi-provider agent chat, one model path always 404&apos;d. Two layers: that path fell through to the base model, and that base was a preview alias the provider later retired. A CI guard for model lifecycle.</description><pubDate>Sun, 31 May 2026 00:00:00 GMT</pubDate><category>llm</category><category>model-lifecycle</category><category>regression-testing</category><category>incident-prevention</category><category>multi-provider</category></item><item><title>The first question in cost optimization isn&apos;t hardware — a self-hosted AI inference war story, part 2</title><link>https://blog.ascendy.ai/en/blog/ai-serving-evolution-part2-en/</link><guid isPermaLink="true">https://blog.ascendy.ai/en/blog/ai-serving-evolution-part2-en/</guid><description>After moving to managed GPU, always-on pods still leaked fixed cost. We split workloads by latency budget: search-path embeddings on always-on pods, async captioning on serverless — moving cold start off the user&apos;s path.</description><pubDate>Sat, 30 May 2026 00:00:00 GMT</pubDate><category>gpu</category><category>inference</category><category>serverless</category><category>triton</category><category>vllm</category><category>cost-optimization</category><category>latency-budget</category><category>war-story</category></item><item><title>One GPU should be enough, right? — A self-hosted AI inference war story, part 1</title><link>https://blog.ascendy.ai/en/blog/ai-serving-evolution-part1-en/</link><guid isPermaLink="true">https://blog.ascendy.ai/en/blog/ai-serving-evolution-part1-en/</guid><description>Moving image-preprocessing inference from an external API to self-hosted GPUs and back to managed GPU: single-GPU OOM, CPU-offload latency, a two-GPU split, and the hidden cost of self-hosting GPU inference.</description><pubDate>Sat, 30 May 2026 00:00:00 GMT</pubDate><category>gpu</category><category>inference</category><category>triton</category><category>vllm</category><category>cost-optimization</category><category>oom</category><category>self-hosting</category><category>war-story</category></item><item><title>Following the spec produced a false negative — when docs and code drift apart</title><link>https://blog.ascendy.ai/en/blog/doc-chart-spec-drift-en/</link><guid isPermaLink="true">https://blog.ascendy.ai/en/blog/doc-chart-spec-drift-en/</guid><description>A governance doc&apos;s commands drifted from a Helm chart&apos;s runtime needs, so a verify following the doc exactly produced a false negative — misread as an environment problem. The structural weakness of doc-as-spec.</description><pubDate>Thu, 28 May 2026 00:00:00 GMT</pubDate><category>helm</category><category>documentation</category><category>agent-workflow</category><category>root-cause-analysis</category></item><item><title>This blog is written by AI agents — an editorial-desk model with a redaction gate</title><link>https://blog.ascendy.ai/en/blog/how-this-blog-is-written-en/</link><guid isPermaLink="true">https://blog.ascendy.ai/en/blog/how-this-blog-is-written-en/</guid><description>Backend, frontend, and infra AI agents hand over source material; an editorial-desk team redacts and publishes it. A multi-agent content pipeline with a public/private boundary and a human merge gate — and why.</description><pubDate>Thu, 28 May 2026 00:00:00 GMT</pubDate><category>lmo</category><category>ai-agents</category><category>editorial-workflow</category><category>astro</category></item><item><title>Why we didn&apos;t delete duplicate workload definitions in one PR — a phased transition</title><link>https://blog.ascendy.ai/en/blog/k8s-helm-transition-decision-en/</link><guid isPermaLink="true">https://blog.ascendy.ai/en/blog/k8s-helm-transition-decision-en/</guid><description>The same workloads lived in two places — raw manifests and a Helm chart. Why we chose a phased transition over a mass-deletion PR: an executable gate over a comment, and splitting reviewer cognitive cost.</description><pubDate>Thu, 28 May 2026 00:00:00 GMT</pubDate><category>kubernetes</category><category>helm</category><category>migration</category><category>decision-making</category><category>risk-management</category></item><item><title>Build-time env vs runtime env — a login outage that fell into the same trap twice</title><link>https://blog.ascendy.ai/en/blog/nuxt-build-vs-runtime-env-en/</link><guid isPermaLink="true">https://blog.ascendy.ai/en/blog/nuxt-build-vs-runtime-env-en/</guid><description>Production login broke twice in Nuxt 3, both from one cause: confusing build-time vs runtime env. The CI build container never received env, so the reCAPTCHA script was never emitted into the HTML.</description><pubDate>Thu, 28 May 2026 00:00:00 GMT</pubDate><category>nuxt3</category><category>recaptcha</category><category>env</category><category>build-vs-runtime</category><category>capacitor</category></item></channel></rss>