Commander.jsの.conflicts().implies()は、排他的な組み合わせをランタイムではちゃんと検出してくれます。

でも.opts()の型は賢くならず、戻り値は結局string | undefinedのままです。どのオプションが同時に使えないのかを、TypeScriptは知りません。

このズレをパーサーコンビネータでどう型に落とし込めるか、Yargsとの比較も含めて書きました。後半では、環境変数・設定ファイル・対話プロンプトまで同じ型保証を広げる話もしています。

https://zenn.dev/hongminhee/articles/6ba2a6247ec0c4

#Optique #Commander #Yargs #TypeScript #JavaScript #CLI

Commander.jsの.conflicts()が型に反映されない問題をパーサーコンビネータで解決する——Optique 1.0

Zenn
Spinerock Knoll rules. Somebody takes 7, the hideaway turns on, and your land suddenly fires off a spell for one red. Tiny setup, huge payoff. https://grimdeck.com/card/dsc/300/spinerock-knoll #MTG #Commander #EDH #Lands #RedDecks #CardAppreciation
Spinerock Knoll

Land

'That was a wonderful toilet': Artemis 2 commander defends mission's lunar loo
https://atlas.whatip.xyz/post.php?slug=that-was-a-wonderful-toilet-artemis-2-commander-defends-missions-lunar-loo
<p>Artemis 2&#039;s groundbreaking space toilet doesn&#039;t deserve the bad press it&#039;s gotten over
#commander #wonderful #artemis #mission
'That was a wonderful toilet': Artemis 2 commander defends mission's lunar loo

Artemis 2's groundbreaking space toilet doesn't deserve the bad press it's gotten over the past two weeks, according to mission commander Reid Wiseman.

Commander hot take: the 3-land opener with no ramp and no turn-2 play is a trap way more often than people admit. How greedy are you on your first seven? #MTG #Commander #EDH #Mulligans #OpeningHands #Deckbuilding #TableTalk
Rules gotcha: if someone steals your commander and it dies, you decide whether it goes back to the command zone, not the player who controlled it. Ownership matters here, and it comes up more than people think. #MTG #Commander #EDH #RulesGotcha #MTGRules #TheftEffects #CommandZone

I wrote about a problem that's been bugging me with #Commander.js and #Yargs: .conflicts() and .implies() enforce constraints at runtime, but the type you get back is still a flat object with every field optional. The compiler has no idea which options belong together.

The post walks through what happens when you express the same constraints in the parser structure instead, and how #TypeScript turns that into a discriminated union where each branch carries only its own fields.

Second half covers a less obvious question: what happens when values come from env vars, config files, or prompts instead of argv, and whether the constraints should still hold across all of them.

https://hackers.pub/@hongminhee/2026/optique-10-discriminated-unions-for-cli

#JavaScript #CLI #Optique

From five optional fields to a discriminated union: CLI parsing with Optique 1.0

https://hackers.pub/@hongminhee/2026/optique-10-discriminated-unions-for-cli

Today, I want to talk about my first-ever Commander deck, a Spirit tribal deck led by Millicent, Restless Revenant. It uses cards like Clarion Spirit and Priest of the Blessed Graf alongside the commander to create tons of Spirits.

You draw cards with Bident of Thassa or Distant Memory so that you can cast more Spirits. Finish the game with anthem effects like Mirror Entity or Banner of Kinship.

Check it out: https://archidekt.com/decks/5981580/great_spirits

What’s your favourite tribal deck?

#MTG #EDH #COMMANDER

Commander question for the evening: what basic land art do you irrationally trust more than the others? The Forest that says this hand is keepable, the Island that means trouble, whatever it is, I know your pod has one. #MTG #Commander #EDH #BasicLands #LandArt #TableTalk #Playgroup
Commander discourse today: deck brackets help, but they still do not beat one honest pregame sentence. Are we here to goldfish, scrap, or do big dumb splashy stuff? That tells me more than any label. Agree? #MTG #Commander #EDH #RuleZero #DeckBrackets #TableTalk #Playgroup