Repository navigation
Add truthful partial task-only Forecast queries (#85) - #224
Merged
Merged
Conversation
This was referenced Oct 3, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Outcome
Refs #85. Add
filter.forecast="past-and-today"to the existinglist_tasksandget_task_countssurface, plus the equivalent CLI option. This is an explicit partial task-only contract, not an exact native OmniFocus Forecast total. No new model-facing tool or mutation is introduced.The deduplicated union uses remaining actions with local due/planned dates before next local midnight, defer dates during today, effective flags, or the documented configured
Tag.forecastTag(not a hard-coded name). Foundation supplies calendar-day boundaries, including DST. Unavailable scheduled actions are included by default; explicit filters still intersect. Project headers, completed/dropped actions and hidden children are excluded. Both list and count return limitations, and the CLI preserves them too.See
docs/forecast-contract.mdfor exclusions, visibility-preference differences, inherited-date limitations, and paging across day rollover. The roadmap now identifies #85 as the active slice following completed #92 feature UAT.Validation impact and acceptance
query, with MCP wire coverage. BridgeClient changes attach the day window and propagate count warnings only; IPC, dispatch, retries and timeout policy are unchanged. This explains narrowing the conservative filename-based transport classification.
Acceptance journey: ask a real MCP client how many items are in Forecast (past and today), receive a dedicated deduplicated count matching the paginated list, and have the assistant explicitly qualify it as partial rather than equating it with native Forecast.
Completed:
true,exact, andtodayare rejected; list/count agree for baseline, inbox, availability, flags and empty searches, including all pages and warning propagation.get_task_counts({filter:{forecast:"past-and-today"}})returned 58 and its answer explicitly retained all limitations. The initial attempt accidentally launched the older command because project config overrodeOPENCODE_CONFIG; that run is excluded from acceptance evidence. RuntimeOPENCODE_CONFIG_CONTENTcorrected the server selection without editing user config.The selected Swiftly 6.3.3 compiler failed before package compilation against the installed SDK (
-target-arch-variant); verification used Xcode's bundled Swift 6.4 viaxcrun/PATH. No toolchain pin was changed.Release boundary
The realistic 1.5-hour suite is still required on the frozen release candidate before release acceptance. This PR is not a release certificate and does not close #85. #222's release diagnostics remain separate. No Homebrew release, merge, or task write is performed here. Raw local harness artifacts remain under
.build/benchmarks; only the selected evidence is published.Checklist:
Implementation commit:
febbaab4734ff9f0fe273a666d364b41d35ef2ab.