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/CHANGELOG.md +5 -0
- package/bin/_cctally_alerts.py +22 -0
- package/bin/_cctally_config.py +79 -10
- package/bin/_cctally_core.py +76 -0
- package/bin/_cctally_dashboard.py +141 -24
- package/bin/_cctally_forecast.py +480 -16
- package/bin/_cctally_milestones.py +146 -0
- package/bin/_cctally_parser.py +11 -4
- package/bin/_cctally_project.py +51 -0
- package/bin/_cctally_record.py +227 -1
- package/bin/_lib_alert_axes.py +6 -1
- package/bin/_lib_alerts_payload.py +70 -0
- package/bin/cctally +14 -0
- package/dashboard/static/assets/index-C2F1_Mxt.js +18 -0
- package/dashboard/static/assets/{index-CsqqtRBB.css → index-D34qf0LE.css} +1 -1
- package/dashboard/static/dashboard.html +2 -2
- package/package.json +1 -1
- package/dashboard/static/assets/index-DwuW39Tv.js +0 -18
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
|