This changelog records app-level changes for AI Hub documentation and reusable platform behavior.
Host-project features should be documented in the host project, not here.
ToolDefinition metadata with labels, descriptions, risk level,
operation mode, approval requirement, and system-tool marker.ToolExecutionRun audit records.resolve_agent_tools() for toolbox/grant/legacy/workspace-policy
resolution with redacted model-facing manifests.execute_tool() dispatch.AI_HUB_UNIFIED_TOOL_RUNTIME_ENABLED.KnowledgeDocumentChunk plus read-only browse, search, read and cite
retrieval services under agent collection scope.seed_ai_hub_starter_toolboxes and seed_ai_hub_starter_demo.GameWorkspace model — owns a set of goals, holds default runtime config and
workspace-level policy.GameGoal model — stores goal title, description, success criteria, context,
result, status, priority, and due date. Status transitions are locked through
service functions; completed and cancelled goals require explicit reopening.GameGoalDependency model — declares required or optional ordering between
goals within a workspace. Self-links, cross-workspace links, duplicates, and
cycles are rejected at the service/admin layer.0003_gameworkspace_gamegoal_gamegoaldependency_and_more — additive;
introduces the three GAME domain tables plus supporting indexes.game_priority service — deterministic scoring using base priority, time-to-
deadline, queue age, and dependent-unlock bonus; model validators bound base
and calculated values to prevent decimal overflow.game_scheduler service — read-only get_next_eligible_goal() and
transactional claim_next_goal(); claim persists candidate scores and marks
one goal running atomically via SELECT FOR UPDATE.queued_at timestamp resets on every retry/reopen so queue-age bonus reflects
actual wait time, not original creation time.ExecutionSession.goal nullable FK — links a runtime record to a durable GAME
goal while preserving all legacy null behaviour.create_goal_execution_session() service — locks the goal, prevents duplicate
active sessions via a conditional database constraint, and transitions queued
goals to running atomically.game_goal_outcomes — maps session finish reasons
to completed, partial, waiting-information, waiting-approval, or failed goal
outcomes.reconcile_goal_outcomes() repair function — detects and heals interrupted
finalisation where a session reached a terminal state but its goal was not
updated.0004_executionsession_goal — nullable FK; additive.0005 — adds queue timestamps, transition metadata column,
outcome-fingerprint column, priority bounds check constraint, and a conditional
unique index allowing at most one pending/running/waiting session per goal.transition_metadata field on GameGoal — stores internal lifecycle events
separately from context so lifecycle metadata never reaches the agent.game_feature_flags service — require_game_feature(flag_name) raises
ValidationError when the named Django setting is explicitly False; defaults
to True when the setting is absent._core/settings.py, each overrideable via env var
and defaulting to True (all phases tested):AI_HUB_GAME_GOALS_ENABLED — gates create_goal.AI_HUB_GAME_SCHEDULER_ENABLED — gates claim_next_goal.AI_HUB_GAME_ACTION_DISPATCH_ENABLED — gates execute_game_action.AI_HUB_GAME_MEMORY_ENABLED — gates record_memory.AI_HUB_GAME_RESUME_ENABLED — gates resume_goal_execution.AI_HUB_GAME_DELEGATION_ENABLED — gates run_delegated_agent..one-env.example updated with a commented GAME flags section.11_TESTING_GUIDE.md updated with feature-flag test patterns and release-gate
checklist.game_operational_ux service — three pure query functions used by the admin:build_workspace_dashboard_context(workspace) — aggregates goal status counts,
top eligible goals with scheduler explanations, pending approvals, blocked goals,
recent sessions, recent action runs, budget, policy, and workspace agent/action
mappings scoped to one workspace.build_goal_detail_context(goal) — aggregates session history, action runs,
memory entries, the attached plan, an is_resumable flag, and a scheduler
explanation scoped to one goal.build_scheduler_explanation(goal) — returns {base_priority, bonuses, total}
as a human-readable breakdown of how the scheduler scores a goal.redact_payload(payload) — recursively replaces known-sensitive keys
(api_key, secret, password, token, access_token, refresh_token,
authorization, credentials, private_key) with "***REDACTED***" in
arbitrarily nested dicts and lists.<workspace_id>/dashboard/; requires view_executionsession permission.GameActionApprovalRequestAdmin: approve_selected_actions and
reject_selected_actions bulk actions call approve_action_run() and
reject_action_run() from the service layer; both actions are hidden from and
blocked for users without ai_hub.approve_game_action.GameGoalAdmin bulk actions: queue_selected_goals, cancel_selected_goals,
reopen_selected_goals, and resume_selected_goals for lifecycle and resume
operations directly from the changelist.GameGoalPlan model (4.15) — optional structured execution aid linked one-to-one
with a goal; tracks version, summary, and active/completed/abandoned status.GameGoalPlanStep model (4.16) — ordered steps within a plan with optional
same-plan dependency chain; self-links, cross-plan dependencies, and
out-of-order dependencies are rejected. ai_hub_unique_plan_step_order
constraint enforces uniqueness within a plan.GameDelegationRun model (4.17) — durable record for every sub-agent
delegation: links the parent action run, parent goal, target agent, and
delegated session; stores task, expected result, result summary, lifecycle
status, and timing.game_plans service — create_plan() and add_plan_step() with full model
validation and cross-plan dependency guards.game_delegation service — run_delegated_agent() validates delegation depth,
workspace agent allow-list, and sub-agent budget before creating a delegation
run and running a narrowed goal-less session synchronously.game_policy additions — validate_agent_for_workspace() (closed allow-list
per workspace), check_delegation_depth() (maximum depth 1), and
check_sub_agent_budget() (max_sub_agent_runs_per_goal budget key)._handle_delegate_to_agent under ActionType.SUB_AGENT.GameDelegationRun.parent_goal.0012_phase10_plans_delegation — additive; creates the three new
tables plus aihub_delegation_goal_stat_idx covering index.GameGoalPlanAdmin (with GameGoalPlanStepInline), GameGoalPlanStepAdmin,
and GameDelegationRunAdmin (all fields read-only) registered.0011_stabilize_phases_06_09 aligns action reverse relations, bounds
memory importance, normalises legacy scope data, and enforces one pending
continuation per session plus valid memory field shapes.AI_HUB_ALLOWED_TOOL_CALLABLES; no
arbitrary dotted-path callable can be imported from a database record.allowed_hosts entry, must use GET or HEAD
for context-tool classification, and have timeouts clamped to 1–60 seconds.view_executionsession permission.change_executionsession in addition to staff
status.view_executionsession.SECRET_KEY; secure redirect,
session, and CSRF cookies default on when DEBUG=False.setup_dev.py generates the initial admin password unless
DJANGO_SUPERUSER_PASSWORD is explicitly supplied.README.md with current state, workspaces, admin entry points,
runtime model and host integration rules._docs/README.md documentation index with reading order and ownership rules.OPERATING_MODEL.md defining the reusable-app boundary.context_tool classification;
tools in missing or action categories are blocked by default. Orchestrator
retains its legacy broad-tool behaviour.allow_legacy_game_action_tools=True) until a proper dispatcher definition
exists. (Doc-sync is a host-project command, not part of reusable ai_hub.)read_only=True; HTTP context tools
additionally require GET or HEAD; both constraints close a prior classification
loophole..one-env.example (removed
stale .env.example references).ai_hub for the Python/Django package and AI Hub for the
visible product name.0013_stabilize_phases_10_12 adds plan revision history and normalises legacy data before plan/delegation constraints.redact_payload is now actually applied: GameActionRunAdmin renders
input_payload, output_payload, and observation_payload through a redacted
display so known-sensitive keys are masked instead of shown raw.|add filter chain; the label now falls back to Session #<pk> correctly.require_game_feature raises ValueError on an unknown flag name so a typo can
no longer silently leave a feature ungated.approve_action_run now checks AI_HUB_GAME_ACTION_DISPATCH_ENABLED before
approving, closing a gap where an approved action could dispatch while the
action kill-switch was off.status_counts now uses a single aggregate
query instead of one count per status, and top_eligible scores each goal once
(reusing the explanation for ranking and display) instead of computing priority
twice per goal.recent_action_runs panel that was
previously computed but never displayed.build_goal_detail_context catches ObjectDoesNotExist for a missing goal plan
instead of a bare except Exception.record_memory() now coerces importance_score to Decimal via Decimal(str(value)),
so float callers (e.g. 0.9) no longer hit the DecimalField 2-decimal-place
validator.ModelConfig.clean() enforces the training-stub naming convention: a
Training-provider model must be named training or start with training/,
turning a previously silent runtime fall-through into a clear config-time error.
Admin help text documents the convention.ModelConfig.temperature_default default changed from the float 0.70 to
Decimal("0.70"); the float default failed full_clean() on any instance that
did not set temperature explicitly. Migration 0014_alter_modelconfig_temperature_default
(metadata-only, no data change).find_orphaned_running_goals() /
cancel_orphaned_running_goals() in game_goals, plus the
cleanup_orphaned_goals management command (supports --workspace,
--older-than-hours, --dry-run). A goal stuck in RUNNING with no active
session (interrupted runs, integration-suite stubs) is cancelled; goals with an
active session are never touched.ai_hub.Two workspaces, one shared AI foundation.
Python >= 3.12
Django >= 5.2 LTS, < 7.0
SQLite — local development and single-worker behaviour only
PostgreSQL — required before running multiple scheduler workers concurrently
GameWorkspace, GameGoal, GameGoalDependency) and the
scheduler are available once migrations 0001–0005 are applied. No Phase 06
features (action dispatcher, GameActionDefinition, GameActionRun) are
present in this release.reconcile_goal_outcomes() exists as a service but is not yet a scheduled job.
Operators should call it manually or via a management command before running
concurrent background workers.Ask me anything — agents, pipelines, GAME loops, setup or configuration.
Enter to send · Shift+Enter for new line · Ctrl+/ to toggle · Full history →