Hacktoberfest 2026:メンテナが10月に向けて印を付けた、オープンで初心者向けの issue。 Hacktoberfest の issue を見る

BudgetOutcome has no consumer: the object that names which limit fired is never read outside Core/Budgets

オープン
#1,253 コメント 0 件 リアクション 0 件 担当者 0 名 GitHub で見る

メンテナーはふだん 1 日以内に返信

まだ誰も着手していません。

評価

難易度
4/5
見積もり時間
3〜5日
初心者へのやさしさ
48/100
issue の種類
機能追加
明瞭さ
おおむね明確
活発さ
活発
技術スタック
csharp
領域
api, backend

調査の方向性

Core/Budgets/BudgetOutcome.cs と、WorkBudget.cs、BudgetLedger.cs、BudgetRecording.cs を通る既存の予算フローから始め、次に Solve におけるリソース起因の終了を追跡します。issue で説明されている Solve のコンシューマーパスを選び、意図的に予算不足にした呼び出しを実行します。呼び出し元が検索を停止させたサブシステムまたは制限を読み取れるようになり、そのレポートを保持するテストがある状態が完了です。

索引モデルが issue の本文から書いたものです。

説明

Measured on 2dbeedf7.

BudgetOutcome (#1035) exists to name where a budget was exhausted and why. Grepping the kernel for it finds four files:

Core/Budgets/WorkBudget.cs
Core/Budgets/BudgetLedger.cs
Core/Budgets/BudgetOutcome.cs
Core/Budgets/BudgetRecording.cs

All four are the budget layer itself. It has no consumer. The object that says which limit fired is built, tested and read by nothing.

WorkBudget itself does slightly better, reaching four call sites outside its folder:

Core/Transformations/Saturation.cs
Core/Transformations/Transformation.Catalogue.cs
Functions/Simplification/Patterns/Patterns.ExpandFactorize.cs
Functions/Algebra/Groebner/Buchberger.cs
Functions/Continuous/Solvers/EquationSolver.cs
Convenience/MathS.cs

so a budget can be spent in saturation, expansion, Gröbner and the solver — and when it runs out, the outcome that would say so is not the thing that reaches the caller.

Why re-open this rather than read it off #1036

#1036 ("giving up on a resource is spelled the same as a mathematical negative") was closed as completed on 2026-08-24, and #896 with it. Its step 1 landed in #1046 and is real: Solve's two resource-driven exits answer with the equation as a set builder instead of { }, so an empty set means an established emptiness again.

But #1036 was about one chokepoint, and the survey behind it found roughly seventy sites that give up on a resource, of which one threw and one recorded which limit fired. Closing the issue closed the Solve boundary, not the class. This is filed as its own thing because the remaining work is not "finish #1036" — it is that the mechanism to do it exists and is unused, which is a different and much cheaper starting position than the survey described.

What it costs a caller today

A caller who hits a budget gets the shape of a mathematical answer with none of the provenance: which subsystem stopped, which limit it was, how much had been spent. WorkBudget carries an inherited ledger precisely so that a nested search can attribute its spend to the caller that granted it, and none of that reaches an API.

This is also #746 tier 4's prerequisite. A strategy engine picks between alternatives on the evidence of what the last one did; "it did not work" and "it ran out of room after 40,000 steps in Buchberger" select different next moves, and only the second is actionable.

Smallest first step, for discussion

Pick one consumer and take it end to end rather than sweeping seventy sites:

  • Solve is the obvious one — it already distinguishes the two exits since #1046, so it has the branch and only lacks the payload.
  • Surface the outcome somewhere a caller can read it without changing the return type of anything (a property on the result, or an out-parameter overload) — the return types are the reason this stalls, and it should not be a breaking change to find out why a search stopped.
  • Then a test asserting a deliberately under-budgeted call reports the subsystem by name, which is what stops the field going stale again.

The four sites where exhaustion is currently rendered as a mathematical claim, named in #1036's table, are the ones worth checking first — those are wrong answers rather than missing metadata.

Part of #746, tier 4.

主要言語
C#
スター
831
フォーク
79
平均マージ
2時間 22分
マージ済み PR(30日)
507

環境構築

はじめの一歩

  1. issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
  2. 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
  3. リポジトリをフォークし、ブランチを切って変更します。
  4. issue 番号を参照したプルリクエストを送ります。

ASC-Community/AngouriMath のほかの issue

ASC-Community/AngouriMath の issue をすべて見る

似ている issue

C# の issue をもっと見る

新しい issue をメールで受け取る

初心者向けの GitHub issue を短くまとめたダイジェスト。