cctally 1.24.0 → 1.25.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/bin/cctally CHANGED
@@ -376,11 +376,13 @@ _lib_alerts_payload = _load_sibling("_lib_alerts_payload")
376
376
  _alert_text_weekly = _lib_alerts_payload._alert_text_weekly
377
377
  _alert_text_five_hour = _lib_alerts_payload._alert_text_five_hour
378
378
  _alert_text_budget = _lib_alerts_payload._alert_text_budget
379
+ _alert_text_project_budget = _lib_alerts_payload._alert_text_project_budget
379
380
  _alert_text_projected = _lib_alerts_payload._alert_text_projected
380
381
  _escape_applescript_string = _lib_alerts_payload._escape_applescript_string
381
382
  _build_alert_payload_weekly = _lib_alerts_payload._build_alert_payload_weekly
382
383
  _build_alert_payload_five_hour = _lib_alerts_payload._build_alert_payload_five_hour
383
384
  _build_alert_payload_budget = _lib_alerts_payload._build_alert_payload_budget
385
+ _build_alert_payload_project_budget = _lib_alerts_payload._build_alert_payload_project_budget
384
386
  _build_alert_payload_projected = _lib_alerts_payload._build_alert_payload_projected
385
387
 
386
388
  _lib_alert_dispatch = _load_sibling("_lib_alert_dispatch")
@@ -628,6 +630,10 @@ cmd_sync_week = _cctally_sync_week.cmd_sync_week
628
630
  # module-private (no external caller).
629
631
  _cctally_project = _load_sibling("_cctally_project")
630
632
  cmd_project = _cctally_project.cmd_project
633
+ # Shared per-project cost compute (#19/#121, spec §7.1). Re-exported so the
634
+ # per-project budget display (cmd_budget) and the Task 3 firing path reach it
635
+ # via the cctally namespace.
636
+ _sum_cost_by_project = _cctally_project._sum_cost_by_project
631
637
 
632
638
  # Eager re-export of bin/_cctally_pricing_check.py — `cmd_pricing_check`
633
639
  # is invoked via the parser's `set_defaults(func=c.cmd_pricing_check)`,
@@ -812,6 +818,7 @@ _PERCENT_NORMALIZE_DECIMALS = _cctally_record._PERCENT_NORMALIZE_DECIMALS
812
818
  _normalize_percent = _cctally_record._normalize_percent
813
819
  maybe_record_milestone = _cctally_record.maybe_record_milestone
814
820
  maybe_record_budget_milestone = _cctally_record.maybe_record_budget_milestone
821
+ maybe_record_project_budget_milestone = _cctally_record.maybe_record_project_budget_milestone
815
822
  maybe_record_projected_alert = _cctally_record.maybe_record_projected_alert
816
823
  _weekly_pct_week_avg_projection = _cctally_record._weekly_pct_week_avg_projection
817
824
  _compute_block_totals = _cctally_record._compute_block_totals
@@ -1107,6 +1114,11 @@ _render_forecast_terminal = _cctally_forecast._render_forecast_terminal
1107
1114
  _BUDGET_JSON_SCHEMA_VERSION = _cctally_forecast._BUDGET_JSON_SCHEMA_VERSION
1108
1115
  _cmd_budget_set = _cctally_forecast._cmd_budget_set
1109
1116
  _cmd_budget_unset = _cctally_forecast._cmd_budget_unset
1117
+ # Per-project budget set/unset (#19/#121, spec §4.3 / §7).
1118
+ _resolve_project_budget_target = _cctally_forecast._resolve_project_budget_target
1119
+ _cmd_budget_set_project = _cctally_forecast._cmd_budget_set_project
1120
+ _cmd_budget_unset_project = _cctally_forecast._cmd_budget_unset_project
1121
+ _build_project_budget_rows = _cctally_forecast._build_project_budget_rows
1110
1122
  _budget_render_unset = _cctally_forecast._budget_render_unset
1111
1123
  _budget_verdict_ansi_code = _cctally_forecast._budget_verdict_ansi_code
1112
1124
  _budget_render_terminal = _cctally_forecast._budget_render_terminal
@@ -2068,10 +2080,12 @@ get_milestone_cost_for_week = _cctally_milestones.get_milestone_cost_for
2068
2080
  get_milestones_for_week = _cctally_milestones.get_milestones_for_week # forecast c.; tui shim; percent-breakdown c.
2069
2081
  insert_percent_milestone = _cctally_milestones.insert_percent_milestone # record shim; idempotency-test mod.
2070
2082
  insert_budget_milestone = _cctally_milestones.insert_budget_milestone # record shim
2083
+ insert_project_budget_milestone = _cctally_milestones.insert_project_budget_milestone # record shim; project-budget-config-test ns[]
2071
2084
  insert_projected_milestone = _cctally_milestones.insert_projected_milestone # record shim
2072
2085
  _projected_levels_already_latched = _cctally_milestones._projected_levels_already_latched # record shim
2073
2086
  _reconcile_budget_milestones_on_set = _cctally_milestones._reconcile_budget_milestones_on_set # test_budget_alerts ns[]
2074
2087
  _reconcile_budget_on_config_write = _cctally_milestones._reconcile_budget_on_config_write # forecast/config/dashboard c.; test_forecast_ns_patch mod. patch
2088
+ _reconcile_project_budget_milestones_on_write = _cctally_milestones._reconcile_project_budget_milestones_on_write # forecast/config/dashboard c. (forward-only project-budget reconcile)
2075
2089
 
2076
2090
 
2077
2091
  # === Update-banner predicate (spec §4.2) extracted to