trueppm-api 0.4.0b2__py3-none-any.whl
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.
- trueppm_api/__init__.py +14 -0
- trueppm_api/apps/access/__init__.py +0 -0
- trueppm_api/apps/access/apps.py +19 -0
- trueppm_api/apps/access/groups.py +518 -0
- trueppm_api/apps/access/management/__init__.py +0 -0
- trueppm_api/apps/access/management/commands/__init__.py +0 -0
- trueppm_api/apps/access/management/commands/create_admin.py +164 -0
- trueppm_api/apps/access/management/commands/migrate_locked.py +96 -0
- trueppm_api/apps/access/management/commands/revoke_api_tokens.py +209 -0
- trueppm_api/apps/access/migrations/0001_initial.py +61 -0
- trueppm_api/apps/access/migrations/0001_squashed_0012_programmembership_role_title.py +167 -0
- trueppm_api/apps/access/migrations/0002_alter_projectmembership_id.py +29 -0
- trueppm_api/apps/access/migrations/0003_projectmembership_soft_delete.py +24 -0
- trueppm_api/apps/access/migrations/0004_alter_projectmembership_role.py +34 -0
- trueppm_api/apps/access/migrations/0005_program_entity_and_membership.py +76 -0
- trueppm_api/apps/access/migrations/0006_role_ordinal_spacing.py +113 -0
- trueppm_api/apps/access/migrations/0007_projectmembership_joined_at_and_more.py +35 -0
- trueppm_api/apps/access/migrations/0008_projectmembership_source_group.py +25 -0
- trueppm_api/apps/access/migrations/0009_projectmembership_pm_proj_serverver_idx.py +20 -0
- trueppm_api/apps/access/migrations/0010_programmembership_joined_at_and_more.py +38 -0
- trueppm_api/apps/access/migrations/0011_alter_programmembership_unique_together_and_more.py +36 -0
- trueppm_api/apps/access/migrations/0012_programmembership_role_title.py +17 -0
- trueppm_api/apps/access/migrations/0013_userdefinedmentiongroup.py +82 -0
- trueppm_api/apps/access/migrations/0014_programmembership_progm_serverver_idx.py +19 -0
- trueppm_api/apps/access/migrations/0015_programuserdefinedmentiongroup.py +86 -0
- trueppm_api/apps/access/migrations/0016_externalstakeholder.py +67 -0
- trueppm_api/apps/access/migrations/0017_viewer_ordinal_one.py +132 -0
- trueppm_api/apps/access/migrations/0018_programmembership_sync_seq_and_more.py +52 -0
- trueppm_api/apps/access/migrations/0019_programmembership_reinstated_at_and_more.py +22 -0
- trueppm_api/apps/access/migrations/__init__.py +0 -0
- trueppm_api/apps/access/models.py +588 -0
- trueppm_api/apps/access/permissions.py +2837 -0
- trueppm_api/apps/access/serializers.py +946 -0
- trueppm_api/apps/access/services.py +667 -0
- trueppm_api/apps/access/signals.py +103 -0
- trueppm_api/apps/access/tasks.py +50 -0
- trueppm_api/apps/access/throttles.py +95 -0
- trueppm_api/apps/access/urls.py +191 -0
- trueppm_api/apps/access/views.py +1931 -0
- trueppm_api/apps/agents/__init__.py +6 -0
- trueppm_api/apps/agents/apps.py +11 -0
- trueppm_api/apps/agents/canonical.py +73 -0
- trueppm_api/apps/agents/deferred.py +108 -0
- trueppm_api/apps/agents/management/__init__.py +0 -0
- trueppm_api/apps/agents/management/commands/__init__.py +0 -0
- trueppm_api/apps/agents/management/commands/audit_prune.py +137 -0
- trueppm_api/apps/agents/management/commands/audit_verify.py +101 -0
- trueppm_api/apps/agents/middleware.py +44 -0
- trueppm_api/apps/agents/migrations/0001_initial.py +231 -0
- trueppm_api/apps/agents/migrations/0002_agentactioncheckpoint.py +71 -0
- trueppm_api/apps/agents/migrations/0003_agentactionrefusaldetail.py +58 -0
- trueppm_api/apps/agents/migrations/__init__.py +0 -0
- trueppm_api/apps/agents/models.py +371 -0
- trueppm_api/apps/agents/refusal.py +103 -0
- trueppm_api/apps/agents/serializers.py +85 -0
- trueppm_api/apps/agents/services.py +397 -0
- trueppm_api/apps/agents/signals.py +30 -0
- trueppm_api/apps/agents/urls.py +15 -0
- trueppm_api/apps/agents/views.py +108 -0
- trueppm_api/apps/csvimport/__init__.py +12 -0
- trueppm_api/apps/csvimport/apps.py +11 -0
- trueppm_api/apps/csvimport/mapping.py +363 -0
- trueppm_api/apps/csvimport/migrations/0001_initial.py +74 -0
- trueppm_api/apps/csvimport/migrations/0002_schedule_outline_batch_operations.py +37 -0
- trueppm_api/apps/csvimport/migrations/0003_csvimportrequest_date_order_and_more.py +26 -0
- trueppm_api/apps/csvimport/migrations/__init__.py +0 -0
- trueppm_api/apps/csvimport/models.py +111 -0
- trueppm_api/apps/csvimport/parser.py +1825 -0
- trueppm_api/apps/csvimport/services.py +48 -0
- trueppm_api/apps/csvimport/tasks.py +418 -0
- trueppm_api/apps/csvimport/template.py +37 -0
- trueppm_api/apps/csvimport/urls.py +50 -0
- trueppm_api/apps/csvimport/views.py +793 -0
- trueppm_api/apps/history/__init__.py +0 -0
- trueppm_api/apps/history/apps.py +12 -0
- trueppm_api/apps/history/changelog.py +359 -0
- trueppm_api/apps/history/diff_policy.py +177 -0
- trueppm_api/apps/history/serializers.py +104 -0
- trueppm_api/apps/history/signals.py +82 -0
- trueppm_api/apps/history/tasks.py +105 -0
- trueppm_api/apps/history/urls.py +38 -0
- trueppm_api/apps/history/views.py +443 -0
- trueppm_api/apps/idempotency/__init__.py +0 -0
- trueppm_api/apps/idempotency/apps.py +11 -0
- trueppm_api/apps/idempotency/migrations/0001_initial.py +71 -0
- trueppm_api/apps/idempotency/migrations/__init__.py +0 -0
- trueppm_api/apps/idempotency/mixins.py +226 -0
- trueppm_api/apps/idempotency/models.py +75 -0
- trueppm_api/apps/idempotency/tasks.py +61 -0
- trueppm_api/apps/integrations/__init__.py +13 -0
- trueppm_api/apps/integrations/apps.py +59 -0
- trueppm_api/apps/integrations/connections.py +806 -0
- trueppm_api/apps/integrations/encryption.py +92 -0
- trueppm_api/apps/integrations/external_sources.py +837 -0
- trueppm_api/apps/integrations/git_automation_services.py +231 -0
- trueppm_api/apps/integrations/git_webhook_auth.py +243 -0
- trueppm_api/apps/integrations/http.py +403 -0
- trueppm_api/apps/integrations/me_work.py +218 -0
- trueppm_api/apps/integrations/migrations/0001_initial.py +64 -0
- trueppm_api/apps/integrations/migrations/0001_squashed_0006_tasklink_description_tasklink_preview_type_and_more.py +187 -0
- trueppm_api/apps/integrations/migrations/0002_tasklink.py +67 -0
- trueppm_api/apps/integrations/migrations/0003_tasklink_tasklink_serverver_idx.py +17 -0
- trueppm_api/apps/integrations/migrations/0004_tasklink_custom_title_tasklink_labels.py +25 -0
- trueppm_api/apps/integrations/migrations/0005_boardautomation.py +56 -0
- trueppm_api/apps/integrations/migrations/0006_tasklink_description_tasklink_preview_type_and_more.py +40 -0
- trueppm_api/apps/integrations/migrations/0007_tasklink_created_at.py +23 -0
- trueppm_api/apps/integrations/migrations/0008_integrationcredential_config_externalworkitem.py +66 -0
- trueppm_api/apps/integrations/migrations/0009_externalsyncrequest_and_more.py +96 -0
- trueppm_api/apps/integrations/migrations/0010_externalworkitem_due_date.py +17 -0
- trueppm_api/apps/integrations/migrations/0011_tasklink_sync_seq_tasklink_tasklink_syncseq_idx.py +22 -0
- trueppm_api/apps/integrations/migrations/0012_boardautomation_last_delivery_at_and_more.py +42 -0
- trueppm_api/apps/integrations/migrations/0013_externalsyncrequest_attempt_count_and_more.py +26 -0
- trueppm_api/apps/integrations/migrations/__init__.py +0 -0
- trueppm_api/apps/integrations/models.py +622 -0
- trueppm_api/apps/integrations/notification_channels.py +57 -0
- trueppm_api/apps/integrations/opengraph.py +229 -0
- trueppm_api/apps/integrations/outgoing.py +201 -0
- trueppm_api/apps/integrations/providers.py +519 -0
- trueppm_api/apps/integrations/registry.py +345 -0
- trueppm_api/apps/integrations/serializers.py +453 -0
- trueppm_api/apps/integrations/services.py +171 -0
- trueppm_api/apps/integrations/tasks.py +731 -0
- trueppm_api/apps/integrations/throttles.py +165 -0
- trueppm_api/apps/integrations/urls.py +77 -0
- trueppm_api/apps/integrations/views.py +1106 -0
- trueppm_api/apps/jiraimport/__init__.py +8 -0
- trueppm_api/apps/jiraimport/apps.py +11 -0
- trueppm_api/apps/jiraimport/migrations/0001_initial.py +72 -0
- trueppm_api/apps/jiraimport/migrations/__init__.py +0 -0
- trueppm_api/apps/jiraimport/models.py +70 -0
- trueppm_api/apps/jiraimport/parser.py +350 -0
- trueppm_api/apps/jiraimport/services.py +46 -0
- trueppm_api/apps/jiraimport/tasks.py +277 -0
- trueppm_api/apps/jiraimport/urls.py +15 -0
- trueppm_api/apps/jiraimport/views.py +153 -0
- trueppm_api/apps/msproject/__init__.py +0 -0
- trueppm_api/apps/msproject/apps.py +11 -0
- trueppm_api/apps/msproject/dataclasses.py +153 -0
- trueppm_api/apps/msproject/exporter.py +500 -0
- trueppm_api/apps/msproject/extended_attributes.py +77 -0
- trueppm_api/apps/msproject/importer.py +1095 -0
- trueppm_api/apps/msproject/migrations/0001_import_request.py +77 -0
- trueppm_api/apps/msproject/migrations/0001_squashed_0002_importrequest_creates_project.py +80 -0
- trueppm_api/apps/msproject/migrations/0002_importrequest_creates_project.py +15 -0
- trueppm_api/apps/msproject/migrations/__init__.py +0 -0
- trueppm_api/apps/msproject/models.py +81 -0
- trueppm_api/apps/msproject/parser.py +1231 -0
- trueppm_api/apps/msproject/serializers.py +136 -0
- trueppm_api/apps/msproject/services.py +58 -0
- trueppm_api/apps/msproject/tasks.py +436 -0
- trueppm_api/apps/msproject/urls.py +39 -0
- trueppm_api/apps/msproject/views.py +531 -0
- trueppm_api/apps/notifications/__init__.py +7 -0
- trueppm_api/apps/notifications/apps.py +15 -0
- trueppm_api/apps/notifications/backfill.py +79 -0
- trueppm_api/apps/notifications/categories.py +112 -0
- trueppm_api/apps/notifications/delivery_limits.py +258 -0
- trueppm_api/apps/notifications/digests.py +447 -0
- trueppm_api/apps/notifications/email_backend.py +330 -0
- trueppm_api/apps/notifications/email_health.py +128 -0
- trueppm_api/apps/notifications/migrations/0001_initial.py +207 -0
- trueppm_api/apps/notifications/migrations/0001_squashed_0006_notification_task.py +294 -0
- trueppm_api/apps/notifications/migrations/0002_project_notification_preference.py +67 -0
- trueppm_api/apps/notifications/migrations/0003_projectnotificationpreference_paused.py +17 -0
- trueppm_api/apps/notifications/migrations/0004_clean_unknown_matrix_keys.py +30 -0
- trueppm_api/apps/notifications/migrations/0005_notification_body_notification_event_type_and_more.py +27 -0
- trueppm_api/apps/notifications/migrations/0006_notification_task.py +25 -0
- trueppm_api/apps/notifications/migrations/0007_workspaceemailsettings.py +80 -0
- trueppm_api/apps/notifications/migrations/0008_notification_snoozed_until.py +17 -0
- trueppm_api/apps/notifications/migrations/0009_usernotificationsettings.py +43 -0
- trueppm_api/apps/notifications/migrations/0010_projectnotificationpreference_schema_version.py +20 -0
- trueppm_api/apps/notifications/migrations/0011_usernotificationsettings_digest_hour_and_more.py +96 -0
- trueppm_api/apps/notifications/migrations/__init__.py +0 -0
- trueppm_api/apps/notifications/models.py +1197 -0
- trueppm_api/apps/notifications/receivers.py +155 -0
- trueppm_api/apps/notifications/schema_migrations.py +56 -0
- trueppm_api/apps/notifications/serializers.py +961 -0
- trueppm_api/apps/notifications/services.py +1451 -0
- trueppm_api/apps/notifications/tasks.py +711 -0
- trueppm_api/apps/notifications/throttles.py +98 -0
- trueppm_api/apps/notifications/urls.py +97 -0
- trueppm_api/apps/notifications/views.py +904 -0
- trueppm_api/apps/observability/__init__.py +0 -0
- trueppm_api/apps/observability/apps.py +31 -0
- trueppm_api/apps/observability/logging.py +213 -0
- trueppm_api/apps/observability/migrations/0001_initial.py +35 -0
- trueppm_api/apps/observability/migrations/0001_squashed_0003_alter_purgerun_trigger.py +154 -0
- trueppm_api/apps/observability/migrations/0002_purgerun_retentionpolicy_retentionschedule.py +131 -0
- trueppm_api/apps/observability/migrations/0003_alter_purgerun_trigger.py +21 -0
- trueppm_api/apps/observability/migrations/0004_alter_retentionpolicy_key.py +28 -0
- trueppm_api/apps/observability/migrations/__init__.py +0 -0
- trueppm_api/apps/observability/models.py +141 -0
- trueppm_api/apps/observability/otel/__init__.py +45 -0
- trueppm_api/apps/observability/otel/attributes.py +247 -0
- trueppm_api/apps/observability/otel/export_health.py +533 -0
- trueppm_api/apps/observability/otel/instrumentation.py +351 -0
- trueppm_api/apps/observability/otel/metrics.py +551 -0
- trueppm_api/apps/observability/otel/provider.py +511 -0
- trueppm_api/apps/observability/otel/request_attributes.py +204 -0
- trueppm_api/apps/observability/purge_registry.py +124 -0
- trueppm_api/apps/observability/retention.py +139 -0
- trueppm_api/apps/observability/selectors.py +969 -0
- trueppm_api/apps/observability/serializers.py +142 -0
- trueppm_api/apps/observability/services.py +407 -0
- trueppm_api/apps/observability/tasks.py +266 -0
- trueppm_api/apps/observability/urls.py +27 -0
- trueppm_api/apps/observability/views.py +523 -0
- trueppm_api/apps/profiles/__init__.py +0 -0
- trueppm_api/apps/profiles/apps.py +15 -0
- trueppm_api/apps/profiles/constants.py +54 -0
- trueppm_api/apps/profiles/migrations/0001_initial.py +55 -0
- trueppm_api/apps/profiles/migrations/0001_squashed_0004_userprofile_role_context.py +125 -0
- trueppm_api/apps/profiles/migrations/0002_userprofile_hidden_views.py +17 -0
- trueppm_api/apps/profiles/migrations/0003_projectvisit.py +63 -0
- trueppm_api/apps/profiles/migrations/0004_userprofile_role_context.py +26 -0
- trueppm_api/apps/profiles/migrations/0005_userprofile_schedule_in_deliver.py +20 -0
- trueppm_api/apps/profiles/migrations/0006_userprofile_date_format_userprofile_timezone.py +36 -0
- trueppm_api/apps/profiles/migrations/0007_userpin.py +91 -0
- trueppm_api/apps/profiles/migrations/0008_remove_userprofile_schedule_in_deliver.py +71 -0
- trueppm_api/apps/profiles/migrations/0009_auth_user_email_upper_idx.py +81 -0
- trueppm_api/apps/profiles/migrations/__init__.py +0 -0
- trueppm_api/apps/profiles/models.py +276 -0
- trueppm_api/apps/profiles/serializers.py +199 -0
- trueppm_api/apps/profiles/services.py +466 -0
- trueppm_api/apps/profiles/views.py +124 -0
- trueppm_api/apps/projects/__init__.py +0 -0
- trueppm_api/apps/projects/actual_date_rules.py +163 -0
- trueppm_api/apps/projects/amend.py +133 -0
- trueppm_api/apps/projects/apps.py +38 -0
- trueppm_api/apps/projects/asset_feed.py +459 -0
- trueppm_api/apps/projects/asset_views.py +317 -0
- trueppm_api/apps/projects/attachment_policy.py +278 -0
- trueppm_api/apps/projects/authentication.py +449 -0
- trueppm_api/apps/projects/backfill.py +287 -0
- trueppm_api/apps/projects/backlog_services.py +324 -0
- trueppm_api/apps/projects/backlog_views.py +302 -0
- trueppm_api/apps/projects/batch_operation_views.py +264 -0
- trueppm_api/apps/projects/blocker_services.py +510 -0
- trueppm_api/apps/projects/board_activity.py +462 -0
- trueppm_api/apps/projects/board_activity_views.py +186 -0
- trueppm_api/apps/projects/board_lanes.py +134 -0
- trueppm_api/apps/projects/bulk_settings.py +194 -0
- trueppm_api/apps/projects/bundled_templates.py +215 -0
- trueppm_api/apps/projects/calendar_settings.py +180 -0
- trueppm_api/apps/projects/ceremony_views.py +244 -0
- trueppm_api/apps/projects/commit_moment.py +204 -0
- trueppm_api/apps/projects/config_notice.py +1325 -0
- trueppm_api/apps/projects/custom_field_values.py +266 -0
- trueppm_api/apps/projects/decisions_services.py +93 -0
- trueppm_api/apps/projects/decisions_views.py +94 -0
- trueppm_api/apps/projects/estimation_scale.py +126 -0
- trueppm_api/apps/projects/export_bundle.py +353 -0
- trueppm_api/apps/projects/fixtures/seeds/atlas-platform-launch.json +4256 -0
- trueppm_api/apps/projects/fixtures/seeds/aurora-mobile-app.json +2000 -0
- trueppm_api/apps/projects/fixtures/seeds/bayside-civic-center.json +1825 -0
- trueppm_api/apps/projects/fixtures/seeds/ga-launch.json +1905 -0
- trueppm_api/apps/projects/fixtures/seeds/helios-crm-replacement.json +1409 -0
- trueppm_api/apps/projects/guardrail_policy_source.py +269 -0
- trueppm_api/apps/projects/inbound_sync.py +555 -0
- trueppm_api/apps/projects/iteration_label.py +85 -0
- trueppm_api/apps/projects/lifecycle.py +191 -0
- trueppm_api/apps/projects/management/__init__.py +0 -0
- trueppm_api/apps/projects/management/commands/__init__.py +0 -0
- trueppm_api/apps/projects/management/commands/backfill_in_progress_status.py +92 -0
- trueppm_api/apps/projects/management/commands/create_demo_share_link.py +368 -0
- trueppm_api/apps/projects/management/commands/export_program.py +50 -0
- trueppm_api/apps/projects/management/commands/import_seed.py +165 -0
- trueppm_api/apps/projects/management/commands/load_sample_project.py +247 -0
- trueppm_api/apps/projects/management/commands/seed_capacity.py +405 -0
- trueppm_api/apps/projects/management/commands/seed_integration_fixtures.py +178 -0
- trueppm_api/apps/projects/management/commands/shift_sample_dates.py +120 -0
- trueppm_api/apps/projects/mcp_settings.py +305 -0
- trueppm_api/apps/projects/methodology.py +178 -0
- trueppm_api/apps/projects/migrations/0001_initial.py +208 -0
- trueppm_api/apps/projects/migrations/0001_squashed_0094_project_decisions_policy.py +5595 -0
- trueppm_api/apps/projects/migrations/0002_alter_uuid_pk_serialize_false.py +57 -0
- trueppm_api/apps/projects/migrations/0003_rename_task_project_index.py +25 -0
- trueppm_api/apps/projects/migrations/0004_soft_delete_and_dependency_versioned.py +70 -0
- trueppm_api/apps/projects/migrations/0005_task_assignee.py +33 -0
- trueppm_api/apps/projects/migrations/0006_task_utilization_index.py +31 -0
- trueppm_api/apps/projects/migrations/0007_task_is_milestone.py +28 -0
- trueppm_api/apps/projects/migrations/0008_baseline.py +119 -0
- trueppm_api/apps/projects/migrations/0009_historicaldependency_historicalproject_and_more.py +210 -0
- trueppm_api/apps/projects/migrations/0010_risk.py +229 -0
- trueppm_api/apps/projects/migrations/0011_task_status.py +27 -0
- trueppm_api/apps/projects/migrations/0012_task_status.py +27 -0
- trueppm_api/apps/projects/migrations/0013_task_planned_start.py +24 -0
- trueppm_api/apps/projects/migrations/0014_short_hex_ids.py +74 -0
- trueppm_api/apps/projects/migrations/0015_backfill_short_ids.py +48 -0
- trueppm_api/apps/projects/migrations/0016_task_actual_dates.py +42 -0
- trueppm_api/apps/projects/migrations/0017_boardcolumnconfig.py +43 -0
- trueppm_api/apps/projects/migrations/0018_estimation_governance.py +62 -0
- trueppm_api/apps/projects/migrations/0019_backfill_wbs_paths.py +28 -0
- trueppm_api/apps/projects/migrations/0020_task_status_5col.py +65 -0
- trueppm_api/apps/projects/migrations/0021_boardsavedview.py +64 -0
- trueppm_api/apps/projects/migrations/0022_task_status_changed_at_priority_rank.py +35 -0
- trueppm_api/apps/projects/migrations/0023_risk_framework_fields.py +96 -0
- trueppm_api/apps/projects/migrations/0024_riskcomment.py +52 -0
- trueppm_api/apps/projects/migrations/0025_sprint.py +352 -0
- trueppm_api/apps/projects/migrations/0026_project_methodology.py +30 -0
- trueppm_api/apps/projects/migrations/0027_sprint_retro.py +89 -0
- trueppm_api/apps/projects/migrations/0028_normalize_notes_field.py +42 -0
- trueppm_api/apps/projects/migrations/0029_complete_implies_full_progress.py +38 -0
- trueppm_api/apps/projects/migrations/0030_review_implies_full_progress.py +37 -0
- trueppm_api/apps/projects/migrations/0031_task_remaining_points.py +22 -0
- trueppm_api/apps/projects/migrations/0032_task_is_subtask_and_sprint_scope_change.py +90 -0
- trueppm_api/apps/projects/migrations/0033_task_my_work_index.py +38 -0
- trueppm_api/apps/projects/migrations/0034_inbound_task_sync.py +313 -0
- trueppm_api/apps/projects/migrations/0035_retro_versioned_and_suggested_assignee.py +173 -0
- trueppm_api/apps/projects/migrations/0036_program_entity_and_membership.py +157 -0
- trueppm_api/apps/projects/migrations/0037_sprint_capacity_points.py +20 -0
- trueppm_api/apps/projects/migrations/0038_taskcomment_commentreaction_commentacknowledgement_and_more.py +233 -0
- trueppm_api/apps/projects/migrations/0039_apitoken_and_more.py +88 -0
- trueppm_api/apps/projects/migrations/0040_program_general_fields.py +119 -0
- trueppm_api/apps/projects/migrations/0041_ceremony_template_and_phase_gate_config.py +210 -0
- trueppm_api/apps/projects/migrations/0041_project_general_fields.py +106 -0
- trueppm_api/apps/projects/migrations/0042_merge_20260522_0410.py +12 -0
- trueppm_api/apps/projects/migrations/0042_program_rollup_config.py +95 -0
- trueppm_api/apps/projects/migrations/0042_workflow_color_and_custom_fields.py +94 -0
- trueppm_api/apps/projects/migrations/0043_merge_20260522_1118.py +10 -0
- trueppm_api/apps/projects/migrations/0044_merge_20260522_rollup.py +10 -0
- trueppm_api/apps/projects/migrations/0044_project_archive_program_close.py +119 -0
- trueppm_api/apps/projects/migrations/0045_program_risk_policy.py +78 -0
- trueppm_api/apps/projects/migrations/0046_merge_20260523_2248.py +12 -0
- trueppm_api/apps/projects/migrations/0047_apitokenauditentry_program_and_more.py +55 -0
- trueppm_api/apps/projects/migrations/0048_historicalprogram_color_program_color.py +32 -0
- trueppm_api/apps/projects/migrations/0049_backlog_item.py +112 -0
- trueppm_api/apps/projects/migrations/0050_backlog_item_trgm_search.py +26 -0
- trueppm_api/apps/projects/migrations/0051_alter_calendar_working_days_alter_dependency_lag_and_more.py +144 -0
- trueppm_api/apps/projects/migrations/0052_recurring_tasks.py +278 -0
- trueppm_api/apps/projects/migrations/0053_dependency_dep_pred_serverver_idx_and_more.py +56 -0
- trueppm_api/apps/projects/migrations/0054_sprintscopechange_goal_impact_and_more.py +117 -0
- trueppm_api/apps/projects/migrations/0055_historicaltask_sprint_pending_and_more.py +51 -0
- trueppm_api/apps/projects/migrations/0056_historicalproject_prioritization_model_and_more.py +276 -0
- trueppm_api/apps/projects/migrations/0057_historicalsprint_binding_committed_snapshot_and_more.py +58 -0
- trueppm_api/apps/projects/migrations/0058_historicaltask_delivery_mode_and_more.py +72 -0
- trueppm_api/apps/projects/migrations/0059_forecastsnapshot.py +80 -0
- trueppm_api/apps/projects/migrations/0060_historicalprojectsignalprivacypolicy_and_more.py +90 -0
- trueppm_api/apps/projects/migrations/0061_baselinetask_story_points.py +17 -0
- trueppm_api/apps/projects/migrations/0062_project_is_sample.py +22 -0
- trueppm_api/apps/projects/migrations/0063_historicalsprint_wip_limit_sprint_wip_limit.py +22 -0
- trueppm_api/apps/projects/migrations/0064_sprinttaskoutcome.py +97 -0
- trueppm_api/apps/projects/migrations/0065_historicalsprint_goal_outcome_sprint_goal_outcome.py +32 -0
- trueppm_api/apps/projects/migrations/0066_historicalproject_lead_project_lead.py +38 -0
- trueppm_api/apps/projects/migrations/0067_sprint_exclude_from_velocity.py +22 -0
- trueppm_api/apps/projects/migrations/0068_project_recalculated_at.py +23 -0
- trueppm_api/apps/projects/migrations/0069_iteration_label.py +22 -0
- trueppm_api/apps/projects/migrations/0070_historicalprogram_iteration_label_and_more.py +32 -0
- trueppm_api/apps/projects/migrations/0071_backfill_iteration_label_inherit.py +35 -0
- trueppm_api/apps/projects/migrations/0072_pulseresponse_retroboarditem.py +129 -0
- trueppm_api/apps/projects/migrations/0073_sprinttaskoutcome_demo_ready.py +17 -0
- trueppm_api/apps/projects/migrations/0074_historicaltask_blocked_reason_task_blocked_reason.py +30 -0
- trueppm_api/apps/projects/migrations/0075_risk_decimal_short_id.py +42 -0
- trueppm_api/apps/projects/migrations/0076_sprinttaskoutcome_review_polish.py +45 -0
- trueppm_api/apps/projects/migrations/0077_task_blocker_fields.py +111 -0
- trueppm_api/apps/projects/migrations/0078_alter_risktask_unique_together_and_more.py +22 -0
- trueppm_api/apps/projects/migrations/0079_historicalproject_status_date_project_status_date.py +22 -0
- trueppm_api/apps/projects/migrations/0080_alter_historicaltask_type_alter_task_type.py +46 -0
- trueppm_api/apps/projects/migrations/0081_historicalprogram_allow_guests_and_more.py +52 -0
- trueppm_api/apps/projects/migrations/0082_project_last_sync_version.py +90 -0
- trueppm_api/apps/projects/migrations/0083_historicalprogram_mc_history_attribution_audience_and_more.py +108 -0
- trueppm_api/apps/projects/migrations/0084_tasknote.py +71 -0
- trueppm_api/apps/projects/migrations/0085_sprint_ix_sprint_velocity.py +33 -0
- trueppm_api/apps/projects/migrations/0086_board_card_search_trgm.py +33 -0
- trueppm_api/apps/projects/migrations/0087_historicalprogram_task_duration_change_percent_policy_and_more.py +155 -0
- trueppm_api/apps/projects/migrations/0088_historicalprogram_allowed_attachment_types_and_more.py +61 -0
- trueppm_api/apps/projects/migrations/0089_signalceilingraiseproposal_signalceilingraisevote_and_more.py +157 -0
- trueppm_api/apps/projects/migrations/0090_historicaltask_proj_histdate_index.py +44 -0
- trueppm_api/apps/projects/migrations/0091_project_board_cadence.py +39 -0
- trueppm_api/apps/projects/migrations/0092_program_target_date.py +22 -0
- trueppm_api/apps/projects/migrations/0093_cross_project_dependency_consent.py +58 -0
- trueppm_api/apps/projects/migrations/0094_project_decisions_policy.py +90 -0
- trueppm_api/apps/projects/migrations/0095_poker_session_vote.py +127 -0
- trueppm_api/apps/projects/migrations/0095_squashed_0097_release_0_3.py +225 -0
- trueppm_api/apps/projects/migrations/0096_crossprojectslipconflict.py +91 -0
- trueppm_api/apps/projects/migrations/0097_backlogitem_backlogitem_tags_gin_and_more.py +32 -0
- trueppm_api/apps/projects/migrations/0098_historicalproject_show_baselines_and_more.py +52 -0
- trueppm_api/apps/projects/migrations/0099_apitoken_scopes.py +48 -0
- trueppm_api/apps/projects/migrations/0100_task_dep_serverver_idx_concurrent.py +61 -0
- trueppm_api/apps/projects/migrations/0101_dependency_deleted_at_task_deleted_at.py +22 -0
- trueppm_api/apps/projects/migrations/0102_project_deleted_at_project_proj_isdel_deletedat_idx.py +25 -0
- trueppm_api/apps/projects/migrations/0103_taskdurationchangeevent_task_dur_evt_sprint_idx.py +18 -0
- trueppm_api/apps/projects/migrations/0104_historicalproject_stale_task_threshold_days_and_more.py +32 -0
- trueppm_api/apps/projects/migrations/0104_trash_restore_1113.py +38 -0
- trueppm_api/apps/projects/migrations/0105_historical_changelog_indexes.py +62 -0
- trueppm_api/apps/projects/migrations/0106_boardsavedview_schema_version.py +20 -0
- trueppm_api/apps/projects/migrations/0107_task_activity_event.py +70 -0
- trueppm_api/apps/projects/migrations/0108_remove_apitoken_api_token_scope_xor_and_more.py +117 -0
- trueppm_api/apps/projects/migrations/0109_projectexportjob.py +82 -0
- trueppm_api/apps/projects/migrations/0110_sharelink.py +123 -0
- trueppm_api/apps/projects/migrations/0111_projectcalendarlayer.py +67 -0
- trueppm_api/apps/projects/migrations/0112_sharelink_expires_at_alter_sharelink_content_kind.py +31 -0
- trueppm_api/apps/projects/migrations/0113_alter_historicaltask_percent_complete_and_more.py +35 -0
- trueppm_api/apps/projects/migrations/0114_historicalproject_default_member_role_and_more.py +28 -0
- trueppm_api/apps/projects/migrations/0115_historicalproject_end_date_shift_threshold_days_and_more.py +22 -0
- trueppm_api/apps/projects/migrations/0116_alter_taskactivityevent_event_type.py +28 -0
- trueppm_api/apps/projects/migrations/0117_label_tasklabel_label_tasks_and_more.py +126 -0
- trueppm_api/apps/projects/migrations/0118_programexportjob.py +82 -0
- trueppm_api/apps/projects/migrations/0119_historicalprogram_calendar_program_calendar.py +36 -0
- trueppm_api/apps/projects/migrations/0120_alter_backlogitem_item_type.py +29 -0
- trueppm_api/apps/projects/migrations/0121_task_three_point_estimate_ordered.py +64 -0
- trueppm_api/apps/projects/migrations/0122_task_relation.py +173 -0
- trueppm_api/apps/projects/migrations/0123_remove_historicalproject_agile_features_and_more.py +20 -0
- trueppm_api/apps/projects/migrations/0124_dependency_is_driving.py +17 -0
- trueppm_api/apps/projects/migrations/0125_historicalprogram_estimation_scale_and_more.py +68 -0
- trueppm_api/apps/projects/migrations/0126_projectcustomfield_show_on_card_taskcustomfieldvalue.py +80 -0
- trueppm_api/apps/projects/migrations/0127_historicalprogram_mcp_enabled_and_more.py +32 -0
- trueppm_api/apps/projects/migrations/0128_acceptancecriterion_sync_seq_apitoken_sync_seq_and_more.py +192 -0
- trueppm_api/apps/projects/migrations/0129_sharelink_show_milestone_dates.py +20 -0
- trueppm_api/apps/projects/migrations/0130_programimportjob.py +85 -0
- trueppm_api/apps/projects/migrations/0131_historicalprogram_sprint_picker_ready_only_default_and_more.py +32 -0
- trueppm_api/apps/projects/migrations/0132_task_scheduled_start.py +17 -0
- trueppm_api/apps/projects/migrations/0133_project_status_date_floor_armed_at.py +17 -0
- trueppm_api/apps/projects/migrations/0134_task_edited_at_task_seeded_at_task_source_id_and_more.py +65 -0
- trueppm_api/apps/projects/migrations/0135_projecttemplate_templateapplication_and_more.py +175 -0
- trueppm_api/apps/projects/migrations/0136_schedule_outline_batch_operations.py +118 -0
- trueppm_api/apps/projects/migrations/0137_collapse_dual_scope_api_tokens.py +54 -0
- trueppm_api/apps/projects/migrations/0138_apitokenauditentry_api_token_audit_owner_idx.py +18 -0
- trueppm_api/apps/projects/migrations/0139_historicaltask_duration_unit_task_duration_unit.py +32 -0
- trueppm_api/apps/projects/migrations/0140_historicaltask_auto_container_and_more.py +113 -0
- trueppm_api/apps/projects/migrations/0141_historicalproject_draft_started_at_and_more.py +44 -0
- trueppm_api/apps/projects/migrations/0142_baseline_calendar_hours_per_day_and_more.py +31 -0
- trueppm_api/apps/projects/migrations/0143_sprintcloserequest_failure_reason_and_more.py +42 -0
- trueppm_api/apps/projects/migrations/0144_projecttemplate_source_project_and_more.py +35 -0
- trueppm_api/apps/projects/migrations/0145_seed_bundled_templates.py +65 -0
- trueppm_api/apps/projects/migrations/0146_historicaltask_board_lane_task_board_lane.py +32 -0
- trueppm_api/apps/projects/migrations/0147_structuraloperation.py +128 -0
- trueppm_api/apps/projects/migrations/0148_task_unique_task_wbs_path_per_project_live.py +76 -0
- trueppm_api/apps/projects/migrations/0149_drop_workshops_tables.py +42 -0
- trueppm_api/apps/projects/migrations/0150_clear_uncommitted_cpm_output.py +130 -0
- trueppm_api/apps/projects/migrations/0151_config_notice_request.py +70 -0
- trueppm_api/apps/projects/migrations/0152_aggregate_task_wbs_name_idx.py +20 -0
- trueppm_api/apps/projects/migrations/0153_program_sample_anchor_date.py +22 -0
- trueppm_api/apps/projects/migrations/__init__.py +0 -0
- trueppm_api/apps/projects/models.py +8946 -0
- trueppm_api/apps/projects/poker_services.py +154 -0
- trueppm_api/apps/projects/poker_views.py +398 -0
- trueppm_api/apps/projects/product_backlog_services.py +450 -0
- trueppm_api/apps/projects/program_label_services.py +94 -0
- trueppm_api/apps/projects/program_label_views.py +189 -0
- trueppm_api/apps/projects/program_rollup.py +575 -0
- trueppm_api/apps/projects/program_schedule.py +745 -0
- trueppm_api/apps/projects/program_views.py +3220 -0
- trueppm_api/apps/projects/project_templates.py +422 -0
- trueppm_api/apps/projects/receivers.py +234 -0
- trueppm_api/apps/projects/refusal_codes.py +140 -0
- trueppm_api/apps/projects/reorder_services.py +145 -0
- trueppm_api/apps/projects/restructure_hooks.py +54 -0
- trueppm_api/apps/projects/retro_board_services.py +368 -0
- trueppm_api/apps/projects/retro_services.py +285 -0
- trueppm_api/apps/projects/risk_import.py +396 -0
- trueppm_api/apps/projects/row_identity.py +113 -0
- trueppm_api/apps/projects/schema_migrations.py +228 -0
- trueppm_api/apps/projects/schemas/seed_v1.json +493 -0
- trueppm_api/apps/projects/schemas/seed_v2.json +892 -0
- trueppm_api/apps/projects/seed/__init__.py +61 -0
- trueppm_api/apps/projects/seed/exporter.py +1644 -0
- trueppm_api/apps/projects/seed/forecast_backfill.py +247 -0
- trueppm_api/apps/projects/seed/importer.py +2390 -0
- trueppm_api/apps/projects/seed/reanchor.py +551 -0
- trueppm_api/apps/projects/seed/reldates.py +126 -0
- trueppm_api/apps/projects/seed/replace.py +126 -0
- trueppm_api/apps/projects/seed/replay.py +1691 -0
- trueppm_api/apps/projects/seed/replay_ctx.py +41 -0
- trueppm_api/apps/projects/seed/samples.py +427 -0
- trueppm_api/apps/projects/seed/validation.py +1149 -0
- trueppm_api/apps/projects/serializers.py +12310 -0
- trueppm_api/apps/projects/services.py +6966 -0
- trueppm_api/apps/projects/share_serializers.py +132 -0
- trueppm_api/apps/projects/share_services.py +325 -0
- trueppm_api/apps/projects/share_views.py +374 -0
- trueppm_api/apps/projects/sharing_settings.py +187 -0
- trueppm_api/apps/projects/signal_privacy_services.py +909 -0
- trueppm_api/apps/projects/signal_privacy_views.py +476 -0
- trueppm_api/apps/projects/signals.py +132 -0
- trueppm_api/apps/projects/slip_conflict.py +266 -0
- trueppm_api/apps/projects/sprint_cadence.py +453 -0
- trueppm_api/apps/projects/sprint_picker_settings.py +132 -0
- trueppm_api/apps/projects/standup.py +304 -0
- trueppm_api/apps/projects/standup_views.py +99 -0
- trueppm_api/apps/projects/structural_operation_services.py +727 -0
- trueppm_api/apps/projects/structural_operation_views.py +311 -0
- trueppm_api/apps/projects/surface_visibility.py +126 -0
- trueppm_api/apps/projects/task_batch_services.py +379 -0
- trueppm_api/apps/projects/task_bulk.py +1152 -0
- trueppm_api/apps/projects/task_classification.py +561 -0
- trueppm_api/apps/projects/task_classification_defaults.py +95 -0
- trueppm_api/apps/projects/task_duration_settings.py +142 -0
- trueppm_api/apps/projects/task_grouping.py +754 -0
- trueppm_api/apps/projects/tasks.py +1917 -0
- trueppm_api/apps/projects/template_divergence.py +168 -0
- trueppm_api/apps/projects/template_services.py +160 -0
- trueppm_api/apps/projects/template_tasks.py +258 -0
- trueppm_api/apps/projects/template_views.py +799 -0
- trueppm_api/apps/projects/throttles.py +311 -0
- trueppm_api/apps/projects/urls.py +1011 -0
- trueppm_api/apps/projects/utilization.py +885 -0
- trueppm_api/apps/projects/views.py +20572 -0
- trueppm_api/apps/projects/wbs_paths.py +119 -0
- trueppm_api/apps/resources/__init__.py +0 -0
- trueppm_api/apps/resources/apps.py +8 -0
- trueppm_api/apps/resources/capacity.py +121 -0
- trueppm_api/apps/resources/migrations/0001_initial.py +68 -0
- trueppm_api/apps/resources/migrations/0001_squashed_0013_alter_projectresource_unique_together_and_more.py +281 -0
- trueppm_api/apps/resources/migrations/0002_alter_uuid_pk_serialize_false.py +36 -0
- trueppm_api/apps/resources/migrations/0003_resource_soft_delete.py +30 -0
- trueppm_api/apps/resources/migrations/0004_add_taskresource_resource_index.py +25 -0
- trueppm_api/apps/resources/migrations/0005_resource_job_role.py +20 -0
- trueppm_api/apps/resources/migrations/0006_skill.py +34 -0
- trueppm_api/apps/resources/migrations/0007_resource_skill.py +63 -0
- trueppm_api/apps/resources/migrations/0008_project_resource.py +63 -0
- trueppm_api/apps/resources/migrations/0009_task_skill_requirement.py +60 -0
- trueppm_api/apps/resources/migrations/0010_alter_resourceskill_options_and_more.py +20 -0
- trueppm_api/apps/resources/migrations/0011_alter_projectresource_notes.py +17 -0
- trueppm_api/apps/resources/migrations/0012_add_resource_user_fk.py +26 -0
- trueppm_api/apps/resources/migrations/0013_alter_projectresource_unique_together_and_more.py +53 -0
- trueppm_api/apps/resources/migrations/0014_projectresource_sync_seq_resource_sync_seq_and_more.py +37 -0
- trueppm_api/apps/resources/migrations/0015_projectresource_deactivated_with_resource.py +17 -0
- trueppm_api/apps/resources/migrations/__init__.py +0 -0
- trueppm_api/apps/resources/models.py +298 -0
- trueppm_api/apps/resources/serializers.py +426 -0
- trueppm_api/apps/resources/services.py +465 -0
- trueppm_api/apps/resources/urls.py +28 -0
- trueppm_api/apps/resources/views.py +1749 -0
- trueppm_api/apps/scheduling/__init__.py +0 -0
- trueppm_api/apps/scheduling/apps.py +153 -0
- trueppm_api/apps/scheduling/calendars.py +119 -0
- trueppm_api/apps/scheduling/deadletter.py +91 -0
- trueppm_api/apps/scheduling/forecast_history_settings.py +215 -0
- trueppm_api/apps/scheduling/forecast_staleness.py +313 -0
- trueppm_api/apps/scheduling/graph_guard.py +263 -0
- trueppm_api/apps/scheduling/management/__init__.py +0 -0
- trueppm_api/apps/scheduling/management/commands/__init__.py +0 -0
- trueppm_api/apps/scheduling/management/commands/prune_forecast_snapshots.py +53 -0
- trueppm_api/apps/scheduling/migrations/0001_failed_task.py +62 -0
- trueppm_api/apps/scheduling/migrations/0001_squashed_0007_projectforecastsnapshot.py +309 -0
- trueppm_api/apps/scheduling/migrations/0002_schedulerequest.py +78 -0
- trueppm_api/apps/scheduling/migrations/0003_add_schedule_request_reason.py +27 -0
- trueppm_api/apps/scheduling/migrations/0004_velocity_suggestion.py +94 -0
- trueppm_api/apps/scheduling/migrations/0005_montecarlorun.py +61 -0
- trueppm_api/apps/scheduling/migrations/0006_montecarlorun_distribution.py +17 -0
- trueppm_api/apps/scheduling/migrations/0007_projectforecastsnapshot.py +65 -0
- trueppm_api/apps/scheduling/migrations/0008_alter_schedulerequest_reason.py +28 -0
- trueppm_api/apps/scheduling/migrations/0008_folded_schedulerequest_reason.py +34 -0
- trueppm_api/apps/scheduling/migrations/0009_alter_schedulerequest_reason.py +29 -0
- trueppm_api/apps/scheduling/migrations/0010_failedtask_resolution_note_failedtask_resolved_at_and_more.py +43 -0
- trueppm_api/apps/scheduling/migrations/0011_failedtask_project.py +26 -0
- trueppm_api/apps/scheduling/migrations/0012_montecarlorun_diagnostic.py +17 -0
- trueppm_api/apps/scheduling/migrations/0013_montecarlorun_status_date.py +17 -0
- trueppm_api/apps/scheduling/migrations/0014_montecarlorun_plan_version.py +17 -0
- trueppm_api/apps/scheduling/migrations/__init__.py +0 -0
- trueppm_api/apps/scheduling/models.py +516 -0
- trueppm_api/apps/scheduling/receivers.py +160 -0
- trueppm_api/apps/scheduling/risk_premium.py +283 -0
- trueppm_api/apps/scheduling/serializers.py +564 -0
- trueppm_api/apps/scheduling/services.py +1182 -0
- trueppm_api/apps/scheduling/signals.py +56 -0
- trueppm_api/apps/scheduling/tasks.py +1984 -0
- trueppm_api/apps/scheduling/telemetry.py +80 -0
- trueppm_api/apps/scheduling/units.py +35 -0
- trueppm_api/apps/scheduling/urls.py +57 -0
- trueppm_api/apps/scheduling/views.py +2564 -0
- trueppm_api/apps/sso/__init__.py +0 -0
- trueppm_api/apps/sso/apps.py +19 -0
- trueppm_api/apps/sso/extensions.py +130 -0
- trueppm_api/apps/sso/management/__init__.py +0 -0
- trueppm_api/apps/sso/management/commands/__init__.py +0 -0
- trueppm_api/apps/sso/management/commands/seed_sso_keycloak.py +172 -0
- trueppm_api/apps/sso/migrations/0001_initial.py +119 -0
- trueppm_api/apps/sso/migrations/0002_remove_oidcprovider_workspace_ssoproviderpolicy_and_more.py +169 -0
- trueppm_api/apps/sso/migrations/__init__.py +0 -0
- trueppm_api/apps/sso/models.py +148 -0
- trueppm_api/apps/sso/serializers.py +437 -0
- trueppm_api/apps/sso/services.py +1385 -0
- trueppm_api/apps/sso/urls.py +47 -0
- trueppm_api/apps/sso/views.py +935 -0
- trueppm_api/apps/sync/__init__.py +0 -0
- trueppm_api/apps/sync/apps.py +15 -0
- trueppm_api/apps/sync/backfill.py +208 -0
- trueppm_api/apps/sync/broadcast.py +320 -0
- trueppm_api/apps/sync/conflict.py +262 -0
- trueppm_api/apps/sync/consumers.py +471 -0
- trueppm_api/apps/sync/migrations/0001_initial.py +59 -0
- trueppm_api/apps/sync/migrations/0001_squashed_0002_remove_syncbatch_syncbatch_project_client_batch_uniq_and_more.py +77 -0
- trueppm_api/apps/sync/migrations/0002_remove_syncbatch_syncbatch_project_client_batch_uniq_and_more.py +41 -0
- trueppm_api/apps/sync/migrations/0003_boardevent.py +46 -0
- trueppm_api/apps/sync/migrations/0004_seed_sync_seq.py +24 -0
- trueppm_api/apps/sync/migrations/0005_program_sync_sequence.py +35 -0
- trueppm_api/apps/sync/migrations/__init__.py +0 -0
- trueppm_api/apps/sync/models.py +225 -0
- trueppm_api/apps/sync/pagination.py +231 -0
- trueppm_api/apps/sync/sequence.py +371 -0
- trueppm_api/apps/sync/serializers.py +687 -0
- trueppm_api/apps/sync/tasks.py +260 -0
- trueppm_api/apps/sync/throttles.py +175 -0
- trueppm_api/apps/sync/upload.py +501 -0
- trueppm_api/apps/sync/urls.py +17 -0
- trueppm_api/apps/sync/views.py +930 -0
- trueppm_api/apps/sync/ws_auth.py +193 -0
- trueppm_api/apps/taskruns/__init__.py +0 -0
- trueppm_api/apps/taskruns/apps.py +11 -0
- trueppm_api/apps/taskruns/migrations/0001_initial.py +92 -0
- trueppm_api/apps/taskruns/migrations/__init__.py +0 -0
- trueppm_api/apps/taskruns/models.py +68 -0
- trueppm_api/apps/taskruns/serializers.py +92 -0
- trueppm_api/apps/taskruns/tasks.py +60 -0
- trueppm_api/apps/taskruns/tracker.py +286 -0
- trueppm_api/apps/taskruns/urls.py +46 -0
- trueppm_api/apps/taskruns/views.py +195 -0
- trueppm_api/apps/teams/__init__.py +8 -0
- trueppm_api/apps/teams/apps.py +16 -0
- trueppm_api/apps/teams/migrations/0001_initial.py +139 -0
- trueppm_api/apps/teams/migrations/0001_squashed_0002_default_teams.py +142 -0
- trueppm_api/apps/teams/migrations/0002_default_teams.py +62 -0
- trueppm_api/apps/teams/migrations/0003_team_sync_seq_teammembership_sync_seq.py +22 -0
- trueppm_api/apps/teams/migrations/__init__.py +0 -0
- trueppm_api/apps/teams/models.py +145 -0
- trueppm_api/apps/teams/permissions.py +149 -0
- trueppm_api/apps/teams/serializers.py +95 -0
- trueppm_api/apps/teams/services.py +434 -0
- trueppm_api/apps/teams/signals.py +61 -0
- trueppm_api/apps/teams/urls.py +34 -0
- trueppm_api/apps/teams/views.py +201 -0
- trueppm_api/apps/timetracking/__init__.py +0 -0
- trueppm_api/apps/timetracking/apps.py +9 -0
- trueppm_api/apps/timetracking/migrations/0001_initial.py +117 -0
- trueppm_api/apps/timetracking/migrations/0002_timesheetsubmission.py +46 -0
- trueppm_api/apps/timetracking/migrations/0003_timeentry_deleted_at_timeentry_deleted_by.py +31 -0
- trueppm_api/apps/timetracking/migrations/0004_timeentry_sync_seq_and_more.py +24 -0
- trueppm_api/apps/timetracking/migrations/__init__.py +0 -0
- trueppm_api/apps/timetracking/models.py +178 -0
- trueppm_api/apps/timetracking/serializers.py +175 -0
- trueppm_api/apps/timetracking/services.py +117 -0
- trueppm_api/apps/timetracking/urls.py +47 -0
- trueppm_api/apps/timetracking/views.py +526 -0
- trueppm_api/apps/webhooks/__init__.py +0 -0
- trueppm_api/apps/webhooks/apps.py +8 -0
- trueppm_api/apps/webhooks/backfill.py +90 -0
- trueppm_api/apps/webhooks/dispatch.py +144 -0
- trueppm_api/apps/webhooks/migrations/0001_initial.py +146 -0
- trueppm_api/apps/webhooks/migrations/0001_squashed_0007_sprint_lifecycle_events.py +243 -0
- trueppm_api/apps/webhooks/migrations/0002_alter_webhook_events.py +32 -0
- trueppm_api/apps/webhooks/migrations/0003_delivery_status_created_idx.py +17 -0
- trueppm_api/apps/webhooks/migrations/0004_webhook_program_alter_webhook_project_and_more.py +64 -0
- trueppm_api/apps/webhooks/migrations/0005_webhook_delivery_sequence_numbers.py +30 -0
- trueppm_api/apps/webhooks/migrations/0006_webhook_format_alter_webhook_events_and_more.py +61 -0
- trueppm_api/apps/webhooks/migrations/0007_sprint_lifecycle_events.py +63 -0
- trueppm_api/apps/webhooks/migrations/0008_risk_baseline_comment_events.py +73 -0
- trueppm_api/apps/webhooks/migrations/0009_encrypt_webhook_secret_and_failure_counters.py +90 -0
- trueppm_api/apps/webhooks/migrations/__init__.py +0 -0
- trueppm_api/apps/webhooks/models.py +372 -0
- trueppm_api/apps/webhooks/serializers.py +318 -0
- trueppm_api/apps/webhooks/tasks.py +663 -0
- trueppm_api/apps/webhooks/urls.py +22 -0
- trueppm_api/apps/webhooks/views.py +383 -0
- trueppm_api/apps/workflow_engine/__init__.py +0 -0
- trueppm_api/apps/workflow_engine/apps.py +23 -0
- trueppm_api/apps/workflow_engine/migrations/0001_initial.py +230 -0
- trueppm_api/apps/workflow_engine/migrations/0001_squashed_0002_remove_workflowhistoryevent_workflow_history_lookup_idx.py +234 -0
- trueppm_api/apps/workflow_engine/migrations/0002_remove_workflowhistoryevent_workflow_history_lookup_idx.py +16 -0
- trueppm_api/apps/workflow_engine/migrations/0003_workflowoutboxrow_workflow_outbox_recovery_idx.py +21 -0
- trueppm_api/apps/workflow_engine/migrations/__init__.py +0 -0
- trueppm_api/apps/workflow_engine/models.py +265 -0
- trueppm_api/apps/workflow_engine/tasks.py +368 -0
- trueppm_api/apps/workspace/__init__.py +0 -0
- trueppm_api/apps/workspace/apps.py +10 -0
- trueppm_api/apps/workspace/backfill.py +111 -0
- trueppm_api/apps/workspace/export.py +242 -0
- trueppm_api/apps/workspace/migrations/0001_initial.py +326 -0
- trueppm_api/apps/workspace/migrations/0001_squashed_0014_workspacemembership_availability_effective_from_and_more.py +829 -0
- trueppm_api/apps/workspace/migrations/0002_remove_workspace_fiscal_year_start_and_more.py +85 -0
- trueppm_api/apps/workspace/migrations/0003_workspaceexportjob.py +73 -0
- trueppm_api/apps/workspace/migrations/0004_alter_workspaceinvite_status.py +27 -0
- trueppm_api/apps/workspace/migrations/0005_workspace_iteration_label_and_more.py +26 -0
- trueppm_api/apps/workspace/migrations/0006_alter_groupmembership_unique_together_and_more.py +45 -0
- trueppm_api/apps/workspace/migrations/0007_workspace_public_sharing_override_policy.py +21 -0
- trueppm_api/apps/workspace/migrations/0008_workspace_mc_history_attribution_audience_and_more.py +44 -0
- trueppm_api/apps/workspace/migrations/0009_workspace_methodology_and_more.py +186 -0
- trueppm_api/apps/workspace/migrations/0010_workspace_logo.py +38 -0
- trueppm_api/apps/workspace/migrations/0011_historicalworkspace_task_duration_change_percent_override_policy_and_more.py +56 -0
- trueppm_api/apps/workspace/migrations/0012_historicalworkspace_allowed_attachment_types_and_more.py +64 -0
- trueppm_api/apps/workspace/migrations/0013_auditevent.py +70 -0
- trueppm_api/apps/workspace/migrations/0014_workspacemembership_availability_effective_from_and_more.py +39 -0
- trueppm_api/apps/workspace/migrations/0015_trash_restore_1113.py +34 -0
- trueppm_api/apps/workspace/migrations/0016_historicalworkspace_calendar_and_more.py +55 -0
- trueppm_api/apps/workspace/migrations/0017_historicalworkspace_estimation_scale_and_more.py +38 -0
- trueppm_api/apps/workspace/migrations/0018_historicalworkspace_feedback_enabled_and_more.py +32 -0
- trueppm_api/apps/workspace/migrations/0019_historicalworkspace_mcp_enabled_and_more.py +22 -0
- trueppm_api/apps/workspace/migrations/0020_viewer_ordinal_one.py +34 -0
- trueppm_api/apps/workspace/migrations/0021_group_sync_seq_groupmembership_sync_seq_and_more.py +27 -0
- trueppm_api/apps/workspace/migrations/0022_historicalworkspace_sprint_picker_ready_only_default_and_more.py +22 -0
- trueppm_api/apps/workspace/migrations/0023_alter_auditevent_event_type.py +32 -0
- trueppm_api/apps/workspace/migrations/0024_alter_auditevent_event_type.py +33 -0
- trueppm_api/apps/workspace/migrations/0025_alter_auditevent_event_type.py +36 -0
- trueppm_api/apps/workspace/migrations/0026_alter_auditevent_event_type.py +37 -0
- trueppm_api/apps/workspace/migrations/0027_alter_auditevent_event_type.py +42 -0
- trueppm_api/apps/workspace/migrations/__init__.py +0 -0
- trueppm_api/apps/workspace/models.py +857 -0
- trueppm_api/apps/workspace/permissions.py +187 -0
- trueppm_api/apps/workspace/serializers.py +590 -0
- trueppm_api/apps/workspace/services.py +919 -0
- trueppm_api/apps/workspace/signals.py +37 -0
- trueppm_api/apps/workspace/tasks.py +555 -0
- trueppm_api/apps/workspace/urls.py +113 -0
- trueppm_api/apps/workspace/views.py +1502 -0
- trueppm_api/asgi.py +42 -0
- trueppm_api/celery.py +31 -0
- trueppm_api/core/__init__.py +0 -0
- trueppm_api/core/admin_site.py +206 -0
- trueppm_api/core/auth_views.py +916 -0
- trueppm_api/core/constant_time.py +51 -0
- trueppm_api/core/csp.py +54 -0
- trueppm_api/core/db.py +87 -0
- trueppm_api/core/db_session.py +37 -0
- trueppm_api/core/exception_handlers.py +157 -0
- trueppm_api/core/export_downloads.py +56 -0
- trueppm_api/core/extension_providers.py +56 -0
- trueppm_api/core/extension_signals.py +147 -0
- trueppm_api/core/idempotent.py +260 -0
- trueppm_api/core/metadata.py +42 -0
- trueppm_api/core/middleware.py +51 -0
- trueppm_api/core/openapi.py +949 -0
- trueppm_api/core/password_reset.py +500 -0
- trueppm_api/core/protect_conflict.py +100 -0
- trueppm_api/core/ratelimit.py +148 -0
- trueppm_api/core/redis_throttle.py +82 -0
- trueppm_api/core/refresh_cookie_policy.py +156 -0
- trueppm_api/core/request_body.py +86 -0
- trueppm_api/core/security_checks.py +884 -0
- trueppm_api/core/storage_config.py +105 -0
- trueppm_api/core/text_decode.py +168 -0
- trueppm_api/core/throttling.py +344 -0
- trueppm_api/core/valkey.py +214 -0
- trueppm_api/core/valkey_cache.py +66 -0
- trueppm_api/core/valkey_checks.py +104 -0
- trueppm_api/core/valkey_config.py +39 -0
- trueppm_api/core/worker_broker_wait.py +149 -0
- trueppm_api/core/worker_heartbeat.py +134 -0
- trueppm_api/fields.py +36 -0
- trueppm_api/permissions.py +30 -0
- trueppm_api/py.typed +0 -0
- trueppm_api/routing.py +11 -0
- trueppm_api/settings/__init__.py +0 -0
- trueppm_api/settings/base.py +2455 -0
- trueppm_api/settings/dev.py +273 -0
- trueppm_api/settings/prod.py +228 -0
- trueppm_api/urls.py +153 -0
- trueppm_api/workflows/__init__.py +38 -0
- trueppm_api/workflows/backends/__init__.py +6 -0
- trueppm_api/workflows/backends/default.py +297 -0
- trueppm_api/workflows/consumers/__init__.py +11 -0
- trueppm_api/workflows/consumers/requeue_failed_task.py +65 -0
- trueppm_api/workflows/interface.py +148 -0
- trueppm_api/workflows/registry.py +106 -0
- trueppm_api/workflows/services.py +90 -0
- trueppm_api/wsgi.py +11 -0
- trueppm_api-0.4.0b2.dist-info/METADATA +70 -0
- trueppm_api-0.4.0b2.dist-info/RECORD +759 -0
- trueppm_api-0.4.0b2.dist-info/WHEEL +4 -0
|
@@ -0,0 +1,1825 @@
|
|
|
1
|
+
{
|
|
2
|
+
"schema_version": "2.1",
|
|
3
|
+
"program": {
|
|
4
|
+
"slug": "bayside-civic-center",
|
|
5
|
+
"name": "Bayside Civic Center Construction",
|
|
6
|
+
"description": "Waterfall-only sample — a two-project program (structure + fit-out) joined by cross-project dependencies, with all four dependency types, three-point estimates, a contract baseline plus a change-order rebaseline, and a resource calendar.",
|
|
7
|
+
"methodology": "WATERFALL",
|
|
8
|
+
"color": "#B5651D",
|
|
9
|
+
"lead": "sam",
|
|
10
|
+
"mc_history_enabled": true,
|
|
11
|
+
"mc_history_attribution_audience": "scheduler_plus",
|
|
12
|
+
"backlog_items": [
|
|
13
|
+
{
|
|
14
|
+
"slug": "ev-charging-conduit",
|
|
15
|
+
"title": "EV charging conduit in the parking structure",
|
|
16
|
+
"description": "Owner request: rough in conduit now so chargers can be added without trenching later.",
|
|
17
|
+
"item_type": "task",
|
|
18
|
+
"tags": [
|
|
19
|
+
"owner-request"
|
|
20
|
+
],
|
|
21
|
+
"priority_rank": 1,
|
|
22
|
+
"created_by": "sam",
|
|
23
|
+
"created_at": "A-15T10:00"
|
|
24
|
+
},
|
|
25
|
+
{
|
|
26
|
+
"slug": "mezzanine-grid-c",
|
|
27
|
+
"title": "Mezzanine at grid C",
|
|
28
|
+
"description": "Owner change request, taken as one change order.",
|
|
29
|
+
"item_type": "task",
|
|
30
|
+
"status": "pulled",
|
|
31
|
+
"pulled_to": "bayside-sitework:3.2",
|
|
32
|
+
"pulled_by": "sam",
|
|
33
|
+
"pulled_at": "A-13T09:00",
|
|
34
|
+
"tags": [
|
|
35
|
+
"change-order"
|
|
36
|
+
],
|
|
37
|
+
"created_by": "sam",
|
|
38
|
+
"created_at": "A-20T10:00"
|
|
39
|
+
},
|
|
40
|
+
{
|
|
41
|
+
"slug": "low-e-lobby-glazing",
|
|
42
|
+
"title": "Low-E lobby glazing upgrade",
|
|
43
|
+
"description": "Rejected by the owner: over the remaining contingency.",
|
|
44
|
+
"item_type": "task",
|
|
45
|
+
"status": "archived",
|
|
46
|
+
"tags": [
|
|
47
|
+
"owner-request"
|
|
48
|
+
],
|
|
49
|
+
"created_by": "diego",
|
|
50
|
+
"created_at": "A-30T10:00"
|
|
51
|
+
}
|
|
52
|
+
],
|
|
53
|
+
"ceremonies": [
|
|
54
|
+
{
|
|
55
|
+
"name": "OAC Meeting",
|
|
56
|
+
"cadence_type": "weekly",
|
|
57
|
+
"cadence_day": "thursday",
|
|
58
|
+
"cadence_time": "09:00",
|
|
59
|
+
"duration_minutes": 60,
|
|
60
|
+
"owner_role": "Project Manager"
|
|
61
|
+
},
|
|
62
|
+
{
|
|
63
|
+
"name": "Safety Stand-down",
|
|
64
|
+
"cadence_type": "monthly",
|
|
65
|
+
"cadence_day": "1st-monday",
|
|
66
|
+
"cadence_time": "07:00",
|
|
67
|
+
"duration_minutes": 30,
|
|
68
|
+
"owner_role": "Site Superintendent"
|
|
69
|
+
},
|
|
70
|
+
{
|
|
71
|
+
"name": "Substantial Completion Walkthrough",
|
|
72
|
+
"cadence_type": "on_milestone",
|
|
73
|
+
"duration_minutes": 120,
|
|
74
|
+
"owner_role": "Project Manager"
|
|
75
|
+
}
|
|
76
|
+
]
|
|
77
|
+
},
|
|
78
|
+
"accounts": [
|
|
79
|
+
{
|
|
80
|
+
"slug": "sam",
|
|
81
|
+
"username": "bayside-sam",
|
|
82
|
+
"display_name": "Sam Okafor",
|
|
83
|
+
"email": "sam@bayside.example",
|
|
84
|
+
"role": "OWNER"
|
|
85
|
+
},
|
|
86
|
+
{
|
|
87
|
+
"slug": "diego",
|
|
88
|
+
"username": "bayside-diego",
|
|
89
|
+
"display_name": "Diego Santos",
|
|
90
|
+
"email": "diego@bayside.example",
|
|
91
|
+
"role": "ADMIN"
|
|
92
|
+
},
|
|
93
|
+
{
|
|
94
|
+
"slug": "raj",
|
|
95
|
+
"username": "bayside-raj",
|
|
96
|
+
"display_name": "Raj Mehta",
|
|
97
|
+
"email": "raj@bayside.example",
|
|
98
|
+
"role": "SCHEDULER"
|
|
99
|
+
},
|
|
100
|
+
{
|
|
101
|
+
"slug": "tom",
|
|
102
|
+
"username": "bayside-tom",
|
|
103
|
+
"display_name": "Tom Becker",
|
|
104
|
+
"email": "tom@bayside.example",
|
|
105
|
+
"role": "MEMBER"
|
|
106
|
+
},
|
|
107
|
+
{
|
|
108
|
+
"slug": "nadia",
|
|
109
|
+
"username": "bayside-nadia",
|
|
110
|
+
"display_name": "Nadia Hassan",
|
|
111
|
+
"email": "nadia@bayside.example",
|
|
112
|
+
"role": "MEMBER"
|
|
113
|
+
},
|
|
114
|
+
{
|
|
115
|
+
"slug": "omar",
|
|
116
|
+
"username": "bayside-omar",
|
|
117
|
+
"display_name": "Omar Aziz",
|
|
118
|
+
"email": "omar@bayside.example",
|
|
119
|
+
"role": "MEMBER"
|
|
120
|
+
},
|
|
121
|
+
{
|
|
122
|
+
"slug": "ada",
|
|
123
|
+
"username": "bayside-ada",
|
|
124
|
+
"display_name": "Ada Boyega",
|
|
125
|
+
"email": "ada@bayside.example",
|
|
126
|
+
"role": "VIEWER"
|
|
127
|
+
}
|
|
128
|
+
],
|
|
129
|
+
"calendars": [
|
|
130
|
+
{
|
|
131
|
+
"slug": "site",
|
|
132
|
+
"name": "Site Standard (5-day)",
|
|
133
|
+
"working_days": 31,
|
|
134
|
+
"hours_per_day": 8.0,
|
|
135
|
+
"exceptions": [
|
|
136
|
+
{
|
|
137
|
+
"exc_start": "A+6",
|
|
138
|
+
"exc_end": "A+15",
|
|
139
|
+
"description": "Tower crane unavailable — annual inspection at the leasing yard"
|
|
140
|
+
},
|
|
141
|
+
{
|
|
142
|
+
"exc_start": "A+133",
|
|
143
|
+
"exc_end": "A+142",
|
|
144
|
+
"description": "Winter weather allowance — contract adverse-weather stand-down"
|
|
145
|
+
}
|
|
146
|
+
]
|
|
147
|
+
},
|
|
148
|
+
{
|
|
149
|
+
"slug": "concrete-crew",
|
|
150
|
+
"name": "Concrete Crew (4-day)",
|
|
151
|
+
"working_days": 15,
|
|
152
|
+
"hours_per_day": 10.0
|
|
153
|
+
}
|
|
154
|
+
],
|
|
155
|
+
"resources": [
|
|
156
|
+
{
|
|
157
|
+
"slug": "sam",
|
|
158
|
+
"name": "Sam Okafor",
|
|
159
|
+
"job_role": "Program Manager",
|
|
160
|
+
"max_units": 1.0,
|
|
161
|
+
"account": "sam",
|
|
162
|
+
"calendar": "site"
|
|
163
|
+
},
|
|
164
|
+
{
|
|
165
|
+
"slug": "diego",
|
|
166
|
+
"name": "Diego Santos",
|
|
167
|
+
"job_role": "Site Superintendent",
|
|
168
|
+
"max_units": 1.0,
|
|
169
|
+
"account": "diego",
|
|
170
|
+
"calendar": "site",
|
|
171
|
+
"skills": [
|
|
172
|
+
{
|
|
173
|
+
"name": "Steel erection",
|
|
174
|
+
"proficiency": "expert"
|
|
175
|
+
}
|
|
176
|
+
]
|
|
177
|
+
},
|
|
178
|
+
{
|
|
179
|
+
"slug": "tom",
|
|
180
|
+
"name": "Tom Becker",
|
|
181
|
+
"job_role": "Concrete Foreman",
|
|
182
|
+
"max_units": 1.0,
|
|
183
|
+
"account": "tom",
|
|
184
|
+
"calendar": "concrete-crew",
|
|
185
|
+
"skills": [
|
|
186
|
+
{
|
|
187
|
+
"name": "Concrete",
|
|
188
|
+
"proficiency": "expert"
|
|
189
|
+
}
|
|
190
|
+
]
|
|
191
|
+
},
|
|
192
|
+
{
|
|
193
|
+
"slug": "nadia",
|
|
194
|
+
"name": "Nadia Hassan",
|
|
195
|
+
"job_role": "MEP Lead",
|
|
196
|
+
"max_units": 1.0,
|
|
197
|
+
"account": "nadia",
|
|
198
|
+
"calendar": "site",
|
|
199
|
+
"skills": [
|
|
200
|
+
{
|
|
201
|
+
"name": "MEP coordination",
|
|
202
|
+
"proficiency": "expert"
|
|
203
|
+
}
|
|
204
|
+
]
|
|
205
|
+
},
|
|
206
|
+
{
|
|
207
|
+
"slug": "omar",
|
|
208
|
+
"name": "Omar Aziz",
|
|
209
|
+
"job_role": "Inspector",
|
|
210
|
+
"max_units": 0.5,
|
|
211
|
+
"account": "omar",
|
|
212
|
+
"calendar": "site",
|
|
213
|
+
"skills": [
|
|
214
|
+
{
|
|
215
|
+
"name": "Inspection",
|
|
216
|
+
"proficiency": "expert"
|
|
217
|
+
}
|
|
218
|
+
]
|
|
219
|
+
},
|
|
220
|
+
{
|
|
221
|
+
"slug": "raj",
|
|
222
|
+
"name": "Raj Mehta",
|
|
223
|
+
"job_role": "Project Scheduler",
|
|
224
|
+
"max_units": 1.0,
|
|
225
|
+
"account": "raj",
|
|
226
|
+
"calendar": "site",
|
|
227
|
+
"skills": [
|
|
228
|
+
{
|
|
229
|
+
"name": "Scheduling",
|
|
230
|
+
"proficiency": "expert"
|
|
231
|
+
}
|
|
232
|
+
]
|
|
233
|
+
},
|
|
234
|
+
{
|
|
235
|
+
"slug": "ada",
|
|
236
|
+
"name": "Ada Boyega",
|
|
237
|
+
"job_role": "Owner's Rep (advisor)",
|
|
238
|
+
"max_units": 0.1,
|
|
239
|
+
"account": "ada",
|
|
240
|
+
"calendar": "site"
|
|
241
|
+
}
|
|
242
|
+
],
|
|
243
|
+
"risks": [
|
|
244
|
+
{
|
|
245
|
+
"slug": "structure-cascade",
|
|
246
|
+
"title": "Structure slip cascades into fit-out",
|
|
247
|
+
"description": "Any framing-inspection slip pushes the entire interior fit-out project right, since every MEP and finish task is gated on the structure across the project boundary.",
|
|
248
|
+
"status": "MITIGATING",
|
|
249
|
+
"probability": 4,
|
|
250
|
+
"impact": 4,
|
|
251
|
+
"category": "ORGANIZATIONAL",
|
|
252
|
+
"response": "MITIGATE",
|
|
253
|
+
"mitigation_due_date": "A+8",
|
|
254
|
+
"owner": "sam",
|
|
255
|
+
"trigger": "Framing inspection (sitework 3.4) forecasts later than its rebaseline finish, or fails and needs a re-inspection cycle.",
|
|
256
|
+
"contingency": "Mobilize electrical rough-in against a partial structural release for the completed bays — the -3 day lead on that cross-project edge already assumes the overlap; widening it is the lever if the gate slips further.",
|
|
257
|
+
"tasks": [
|
|
258
|
+
"bayside-sitework:3.4",
|
|
259
|
+
"bayside-building:1.1"
|
|
260
|
+
]
|
|
261
|
+
},
|
|
262
|
+
{
|
|
263
|
+
"slug": "inspection-fail",
|
|
264
|
+
"title": "Framing inspection rework",
|
|
265
|
+
"status": "OPEN",
|
|
266
|
+
"probability": 2,
|
|
267
|
+
"impact": 4,
|
|
268
|
+
"category": "TECHNICAL",
|
|
269
|
+
"response": "ACCEPT",
|
|
270
|
+
"owner": "diego",
|
|
271
|
+
"tasks": [
|
|
272
|
+
"bayside-sitework:3.4"
|
|
273
|
+
]
|
|
274
|
+
}
|
|
275
|
+
],
|
|
276
|
+
"projects": [
|
|
277
|
+
{
|
|
278
|
+
"slug": "bayside-sitework",
|
|
279
|
+
"name": "Sitework & Structure",
|
|
280
|
+
"description": "The below-grade and structural scope — site prep, foundation, and framing up to a topped-out structure.",
|
|
281
|
+
"methodology": "WATERFALL",
|
|
282
|
+
"start_date": "A-90",
|
|
283
|
+
"calendar": "site",
|
|
284
|
+
"default_view": "SCHEDULE",
|
|
285
|
+
"forecast_history": {
|
|
286
|
+
"days": 60,
|
|
287
|
+
"commitment_finish": "A+40",
|
|
288
|
+
"cpm_start": "A+55",
|
|
289
|
+
"cpm_end": "A+46",
|
|
290
|
+
"p50_start": "A+58",
|
|
291
|
+
"p50_end": "A+50",
|
|
292
|
+
"p80_start": "A+62",
|
|
293
|
+
"p80_end": "A+54",
|
|
294
|
+
"p95_start": "A+68",
|
|
295
|
+
"p95_end": "A+60",
|
|
296
|
+
"mc_iterations": 2500,
|
|
297
|
+
"completion_ratio": 0.6
|
|
298
|
+
},
|
|
299
|
+
"labels": [
|
|
300
|
+
{
|
|
301
|
+
"slug": "critical-path",
|
|
302
|
+
"name": "Critical path",
|
|
303
|
+
"color": "rose",
|
|
304
|
+
"position": 0
|
|
305
|
+
},
|
|
306
|
+
{
|
|
307
|
+
"slug": "inspection",
|
|
308
|
+
"name": "Inspection gate",
|
|
309
|
+
"color": "amber",
|
|
310
|
+
"position": 1
|
|
311
|
+
},
|
|
312
|
+
{
|
|
313
|
+
"slug": "weather",
|
|
314
|
+
"name": "Weather-sensitive",
|
|
315
|
+
"color": "cyan",
|
|
316
|
+
"position": 2
|
|
317
|
+
},
|
|
318
|
+
{
|
|
319
|
+
"slug": "change-order",
|
|
320
|
+
"name": "Change order",
|
|
321
|
+
"color": "purple",
|
|
322
|
+
"position": 3
|
|
323
|
+
}
|
|
324
|
+
],
|
|
325
|
+
"tasks": [
|
|
326
|
+
{
|
|
327
|
+
"wbs_path": "1",
|
|
328
|
+
"name": "Site Prep",
|
|
329
|
+
"governance_class": "gated",
|
|
330
|
+
"delivery_mode": "waterfall"
|
|
331
|
+
},
|
|
332
|
+
{
|
|
333
|
+
"wbs_path": "1.1",
|
|
334
|
+
"name": "Mobilize site",
|
|
335
|
+
"status": "COMPLETE",
|
|
336
|
+
"governance_class": "gated",
|
|
337
|
+
"delivery_mode": "waterfall",
|
|
338
|
+
"assignee": "nadia",
|
|
339
|
+
"percent_complete": 100.0,
|
|
340
|
+
"duration": 4,
|
|
341
|
+
"planned_start": "A-90",
|
|
342
|
+
"estimate": {
|
|
343
|
+
"optimistic": 3,
|
|
344
|
+
"most_likely": 4,
|
|
345
|
+
"pessimistic": 8
|
|
346
|
+
}
|
|
347
|
+
},
|
|
348
|
+
{
|
|
349
|
+
"wbs_path": "1.2",
|
|
350
|
+
"name": "Clear & grade",
|
|
351
|
+
"status": "COMPLETE",
|
|
352
|
+
"governance_class": "gated",
|
|
353
|
+
"delivery_mode": "waterfall",
|
|
354
|
+
"assignee": "omar",
|
|
355
|
+
"labels": [
|
|
356
|
+
"critical-path"
|
|
357
|
+
],
|
|
358
|
+
"percent_complete": 100.0,
|
|
359
|
+
"duration": 6,
|
|
360
|
+
"planned_start": "A-82",
|
|
361
|
+
"estimate": {
|
|
362
|
+
"optimistic": 4,
|
|
363
|
+
"most_likely": 6,
|
|
364
|
+
"pessimistic": 11
|
|
365
|
+
}
|
|
366
|
+
},
|
|
367
|
+
{
|
|
368
|
+
"wbs_path": "1.3",
|
|
369
|
+
"name": "Temporary utilities",
|
|
370
|
+
"status": "COMPLETE",
|
|
371
|
+
"governance_class": "gated",
|
|
372
|
+
"delivery_mode": "waterfall",
|
|
373
|
+
"assignee": "diego",
|
|
374
|
+
"percent_complete": 100.0,
|
|
375
|
+
"duration": 3,
|
|
376
|
+
"planned_start": "A-70",
|
|
377
|
+
"estimate": {
|
|
378
|
+
"optimistic": 2,
|
|
379
|
+
"most_likely": 3,
|
|
380
|
+
"pessimistic": 6
|
|
381
|
+
}
|
|
382
|
+
},
|
|
383
|
+
{
|
|
384
|
+
"wbs_path": "1.4",
|
|
385
|
+
"name": "Site survey sign-off",
|
|
386
|
+
"status": "COMPLETE",
|
|
387
|
+
"governance_class": "gated",
|
|
388
|
+
"delivery_mode": "waterfall",
|
|
389
|
+
"assignee": "tom",
|
|
390
|
+
"labels": [
|
|
391
|
+
"inspection"
|
|
392
|
+
],
|
|
393
|
+
"percent_complete": 100.0,
|
|
394
|
+
"duration": 2,
|
|
395
|
+
"planned_start": "A-64",
|
|
396
|
+
"estimate": {
|
|
397
|
+
"optimistic": 1,
|
|
398
|
+
"most_likely": 2,
|
|
399
|
+
"pessimistic": 4
|
|
400
|
+
}
|
|
401
|
+
},
|
|
402
|
+
{
|
|
403
|
+
"wbs_path": "2",
|
|
404
|
+
"name": "Foundation",
|
|
405
|
+
"governance_class": "gated",
|
|
406
|
+
"delivery_mode": "waterfall"
|
|
407
|
+
},
|
|
408
|
+
{
|
|
409
|
+
"wbs_path": "2.1",
|
|
410
|
+
"name": "Excavate footings",
|
|
411
|
+
"status": "COMPLETE",
|
|
412
|
+
"governance_class": "gated",
|
|
413
|
+
"delivery_mode": "waterfall",
|
|
414
|
+
"assignee": "omar",
|
|
415
|
+
"labels": [
|
|
416
|
+
"critical-path"
|
|
417
|
+
],
|
|
418
|
+
"percent_complete": 100.0,
|
|
419
|
+
"duration": 8,
|
|
420
|
+
"planned_start": "A-60",
|
|
421
|
+
"estimate": {
|
|
422
|
+
"optimistic": 6,
|
|
423
|
+
"most_likely": 8,
|
|
424
|
+
"pessimistic": 15
|
|
425
|
+
}
|
|
426
|
+
},
|
|
427
|
+
{
|
|
428
|
+
"wbs_path": "2.2",
|
|
429
|
+
"name": "Rebar & formwork",
|
|
430
|
+
"status": "COMPLETE",
|
|
431
|
+
"governance_class": "gated",
|
|
432
|
+
"delivery_mode": "waterfall",
|
|
433
|
+
"assignee": "diego",
|
|
434
|
+
"labels": [
|
|
435
|
+
"critical-path",
|
|
436
|
+
"inspection"
|
|
437
|
+
],
|
|
438
|
+
"percent_complete": 100.0,
|
|
439
|
+
"duration": 6,
|
|
440
|
+
"planned_start": "A-50",
|
|
441
|
+
"estimate": {
|
|
442
|
+
"optimistic": 4,
|
|
443
|
+
"most_likely": 6,
|
|
444
|
+
"pessimistic": 11
|
|
445
|
+
}
|
|
446
|
+
},
|
|
447
|
+
{
|
|
448
|
+
"wbs_path": "2.3",
|
|
449
|
+
"name": "Pour east footing",
|
|
450
|
+
"status": "COMPLETE",
|
|
451
|
+
"governance_class": "gated",
|
|
452
|
+
"delivery_mode": "waterfall",
|
|
453
|
+
"assignee": "tom",
|
|
454
|
+
"labels": [
|
|
455
|
+
"weather"
|
|
456
|
+
],
|
|
457
|
+
"percent_complete": 100.0,
|
|
458
|
+
"duration": 3,
|
|
459
|
+
"planned_start": "A-38",
|
|
460
|
+
"estimate": {
|
|
461
|
+
"optimistic": 2,
|
|
462
|
+
"most_likely": 3,
|
|
463
|
+
"pessimistic": 6
|
|
464
|
+
}
|
|
465
|
+
},
|
|
466
|
+
{
|
|
467
|
+
"wbs_path": "2.4",
|
|
468
|
+
"name": "Pour west footing",
|
|
469
|
+
"status": "COMPLETE",
|
|
470
|
+
"governance_class": "gated",
|
|
471
|
+
"delivery_mode": "waterfall",
|
|
472
|
+
"assignee": "nadia",
|
|
473
|
+
"labels": [
|
|
474
|
+
"weather"
|
|
475
|
+
],
|
|
476
|
+
"percent_complete": 100.0,
|
|
477
|
+
"duration": 3,
|
|
478
|
+
"planned_start": "A-32",
|
|
479
|
+
"estimate": {
|
|
480
|
+
"optimistic": 2,
|
|
481
|
+
"most_likely": 3,
|
|
482
|
+
"pessimistic": 6
|
|
483
|
+
}
|
|
484
|
+
},
|
|
485
|
+
{
|
|
486
|
+
"wbs_path": "2.5",
|
|
487
|
+
"name": "Cure & strip forms",
|
|
488
|
+
"status": "COMPLETE",
|
|
489
|
+
"governance_class": "gated",
|
|
490
|
+
"delivery_mode": "waterfall",
|
|
491
|
+
"assignee": "omar",
|
|
492
|
+
"labels": [
|
|
493
|
+
"critical-path"
|
|
494
|
+
],
|
|
495
|
+
"percent_complete": 100.0,
|
|
496
|
+
"duration": 4,
|
|
497
|
+
"planned_start": "A-26",
|
|
498
|
+
"estimate": {
|
|
499
|
+
"optimistic": 3,
|
|
500
|
+
"most_likely": 4,
|
|
501
|
+
"pessimistic": 8
|
|
502
|
+
}
|
|
503
|
+
},
|
|
504
|
+
{
|
|
505
|
+
"wbs_path": "3",
|
|
506
|
+
"name": "Framing",
|
|
507
|
+
"governance_class": "gated",
|
|
508
|
+
"delivery_mode": "waterfall"
|
|
509
|
+
},
|
|
510
|
+
{
|
|
511
|
+
"wbs_path": "3.1",
|
|
512
|
+
"name": "Steel erection",
|
|
513
|
+
"status": "IN_PROGRESS",
|
|
514
|
+
"governance_class": "gated",
|
|
515
|
+
"delivery_mode": "waterfall",
|
|
516
|
+
"assignee": "diego",
|
|
517
|
+
"labels": [
|
|
518
|
+
"critical-path"
|
|
519
|
+
],
|
|
520
|
+
"percent_complete": 55.0,
|
|
521
|
+
"duration": 8,
|
|
522
|
+
"planned_start": "A-18",
|
|
523
|
+
"estimate": {
|
|
524
|
+
"optimistic": 6,
|
|
525
|
+
"most_likely": 8,
|
|
526
|
+
"pessimistic": 15
|
|
527
|
+
}
|
|
528
|
+
},
|
|
529
|
+
{
|
|
530
|
+
"wbs_path": "3.2",
|
|
531
|
+
"name": "Floor decking",
|
|
532
|
+
"status": "NOT_STARTED",
|
|
533
|
+
"governance_class": "gated",
|
|
534
|
+
"delivery_mode": "waterfall",
|
|
535
|
+
"assignee": "tom",
|
|
536
|
+
"labels": [
|
|
537
|
+
"change-order"
|
|
538
|
+
],
|
|
539
|
+
"duration": 8,
|
|
540
|
+
"planned_start": "A+5",
|
|
541
|
+
"estimate": {
|
|
542
|
+
"optimistic": 6,
|
|
543
|
+
"most_likely": 8,
|
|
544
|
+
"pessimistic": 15
|
|
545
|
+
}
|
|
546
|
+
},
|
|
547
|
+
{
|
|
548
|
+
"wbs_path": "3.3",
|
|
549
|
+
"name": "Roof structure",
|
|
550
|
+
"status": "NOT_STARTED",
|
|
551
|
+
"governance_class": "gated",
|
|
552
|
+
"delivery_mode": "waterfall",
|
|
553
|
+
"assignee": "nadia",
|
|
554
|
+
"labels": [
|
|
555
|
+
"weather"
|
|
556
|
+
],
|
|
557
|
+
"duration": 7,
|
|
558
|
+
"planned_start": "A+19",
|
|
559
|
+
"estimate": {
|
|
560
|
+
"optimistic": 5,
|
|
561
|
+
"most_likely": 7,
|
|
562
|
+
"pessimistic": 13
|
|
563
|
+
}
|
|
564
|
+
},
|
|
565
|
+
{
|
|
566
|
+
"wbs_path": "3.4",
|
|
567
|
+
"name": "Framing inspection",
|
|
568
|
+
"status": "NOT_STARTED",
|
|
569
|
+
"governance_class": "gated",
|
|
570
|
+
"delivery_mode": "waterfall",
|
|
571
|
+
"assignee": "omar",
|
|
572
|
+
"labels": [
|
|
573
|
+
"critical-path",
|
|
574
|
+
"inspection"
|
|
575
|
+
],
|
|
576
|
+
"duration": 2,
|
|
577
|
+
"planned_start": "A+33",
|
|
578
|
+
"estimate": {
|
|
579
|
+
"optimistic": 1,
|
|
580
|
+
"most_likely": 2,
|
|
581
|
+
"pessimistic": 4
|
|
582
|
+
}
|
|
583
|
+
},
|
|
584
|
+
{
|
|
585
|
+
"wbs_path": "4",
|
|
586
|
+
"name": "Structure topped out",
|
|
587
|
+
"is_milestone": true,
|
|
588
|
+
"delivery_mode": "milestone",
|
|
589
|
+
"governance_class": "gated",
|
|
590
|
+
"planned_start": "A+37",
|
|
591
|
+
"labels": [
|
|
592
|
+
"critical-path"
|
|
593
|
+
]
|
|
594
|
+
},
|
|
595
|
+
{
|
|
596
|
+
"wbs_path": "5",
|
|
597
|
+
"name": "Weekly site status report",
|
|
598
|
+
"status": "NOT_STARTED",
|
|
599
|
+
"duration": 1,
|
|
600
|
+
"assignee": "diego",
|
|
601
|
+
"delivery_mode": "waterfall",
|
|
602
|
+
"recurrence": {
|
|
603
|
+
"frequency": "WEEKLY",
|
|
604
|
+
"weekdays": [
|
|
605
|
+
"fri"
|
|
606
|
+
],
|
|
607
|
+
"time_of_day": "15:00"
|
|
608
|
+
}
|
|
609
|
+
}
|
|
610
|
+
],
|
|
611
|
+
"dependencies": [
|
|
612
|
+
{
|
|
613
|
+
"predecessor": "1.1",
|
|
614
|
+
"successor": "1.2",
|
|
615
|
+
"dep_type": "FS",
|
|
616
|
+
"lag": 0
|
|
617
|
+
},
|
|
618
|
+
{
|
|
619
|
+
"predecessor": "1.1",
|
|
620
|
+
"successor": "1.3",
|
|
621
|
+
"dep_type": "SS",
|
|
622
|
+
"lag": 0
|
|
623
|
+
},
|
|
624
|
+
{
|
|
625
|
+
"predecessor": "1.2",
|
|
626
|
+
"successor": "1.4",
|
|
627
|
+
"dep_type": "FS",
|
|
628
|
+
"lag": 0
|
|
629
|
+
},
|
|
630
|
+
{
|
|
631
|
+
"predecessor": "1.3",
|
|
632
|
+
"successor": "1.4",
|
|
633
|
+
"dep_type": "FS",
|
|
634
|
+
"lag": 0
|
|
635
|
+
},
|
|
636
|
+
{
|
|
637
|
+
"predecessor": "1.4",
|
|
638
|
+
"successor": "2.1",
|
|
639
|
+
"dep_type": "FS",
|
|
640
|
+
"lag": 0
|
|
641
|
+
},
|
|
642
|
+
{
|
|
643
|
+
"predecessor": "2.1",
|
|
644
|
+
"successor": "2.2",
|
|
645
|
+
"dep_type": "FS",
|
|
646
|
+
"lag": 0
|
|
647
|
+
},
|
|
648
|
+
{
|
|
649
|
+
"predecessor": "2.2",
|
|
650
|
+
"successor": "2.3",
|
|
651
|
+
"dep_type": "FS",
|
|
652
|
+
"lag": 0
|
|
653
|
+
},
|
|
654
|
+
{
|
|
655
|
+
"predecessor": "2.2",
|
|
656
|
+
"successor": "2.4",
|
|
657
|
+
"dep_type": "SS",
|
|
658
|
+
"lag": 0
|
|
659
|
+
},
|
|
660
|
+
{
|
|
661
|
+
"predecessor": "2.3",
|
|
662
|
+
"successor": "2.5",
|
|
663
|
+
"dep_type": "FS",
|
|
664
|
+
"lag": 7
|
|
665
|
+
},
|
|
666
|
+
{
|
|
667
|
+
"predecessor": "2.4",
|
|
668
|
+
"successor": "2.5",
|
|
669
|
+
"dep_type": "FF",
|
|
670
|
+
"lag": 0
|
|
671
|
+
},
|
|
672
|
+
{
|
|
673
|
+
"predecessor": "2.5",
|
|
674
|
+
"successor": "3.1",
|
|
675
|
+
"dep_type": "FS",
|
|
676
|
+
"lag": 0
|
|
677
|
+
},
|
|
678
|
+
{
|
|
679
|
+
"predecessor": "3.1",
|
|
680
|
+
"successor": "3.2",
|
|
681
|
+
"dep_type": "FS",
|
|
682
|
+
"lag": 0
|
|
683
|
+
},
|
|
684
|
+
{
|
|
685
|
+
"predecessor": "3.1",
|
|
686
|
+
"successor": "3.3",
|
|
687
|
+
"dep_type": "FS",
|
|
688
|
+
"lag": 0
|
|
689
|
+
},
|
|
690
|
+
{
|
|
691
|
+
"predecessor": "3.2",
|
|
692
|
+
"successor": "3.4",
|
|
693
|
+
"dep_type": "FF",
|
|
694
|
+
"lag": 0
|
|
695
|
+
},
|
|
696
|
+
{
|
|
697
|
+
"predecessor": "3.3",
|
|
698
|
+
"successor": "3.4",
|
|
699
|
+
"dep_type": "FF",
|
|
700
|
+
"lag": 0
|
|
701
|
+
},
|
|
702
|
+
{
|
|
703
|
+
"predecessor": "3.4",
|
|
704
|
+
"successor": "4",
|
|
705
|
+
"dep_type": "FS",
|
|
706
|
+
"lag": 0
|
|
707
|
+
}
|
|
708
|
+
],
|
|
709
|
+
"baselines": [
|
|
710
|
+
{
|
|
711
|
+
"name": "Contract baseline",
|
|
712
|
+
"is_active": false,
|
|
713
|
+
"captured_at": "A-88",
|
|
714
|
+
"tasks": [
|
|
715
|
+
{
|
|
716
|
+
"task": "1.1",
|
|
717
|
+
"start": "A-90",
|
|
718
|
+
"finish": "A-86",
|
|
719
|
+
"duration": 4
|
|
720
|
+
},
|
|
721
|
+
{
|
|
722
|
+
"task": "1.2",
|
|
723
|
+
"start": "A-82",
|
|
724
|
+
"finish": "A-76",
|
|
725
|
+
"duration": 6
|
|
726
|
+
},
|
|
727
|
+
{
|
|
728
|
+
"task": "1.3",
|
|
729
|
+
"start": "A-70",
|
|
730
|
+
"finish": "A-67",
|
|
731
|
+
"duration": 3
|
|
732
|
+
},
|
|
733
|
+
{
|
|
734
|
+
"task": "1.4",
|
|
735
|
+
"start": "A-64",
|
|
736
|
+
"finish": "A-62",
|
|
737
|
+
"duration": 2
|
|
738
|
+
},
|
|
739
|
+
{
|
|
740
|
+
"task": "2.1",
|
|
741
|
+
"start": "A-60",
|
|
742
|
+
"finish": "A-55",
|
|
743
|
+
"duration": 5
|
|
744
|
+
},
|
|
745
|
+
{
|
|
746
|
+
"task": "2.2",
|
|
747
|
+
"start": "A-50",
|
|
748
|
+
"finish": "A-44",
|
|
749
|
+
"duration": 6
|
|
750
|
+
},
|
|
751
|
+
{
|
|
752
|
+
"task": "2.3",
|
|
753
|
+
"start": "A-38",
|
|
754
|
+
"finish": "A-35",
|
|
755
|
+
"duration": 3
|
|
756
|
+
},
|
|
757
|
+
{
|
|
758
|
+
"task": "2.4",
|
|
759
|
+
"start": "A-32",
|
|
760
|
+
"finish": "A-29",
|
|
761
|
+
"duration": 3
|
|
762
|
+
},
|
|
763
|
+
{
|
|
764
|
+
"task": "2.5",
|
|
765
|
+
"start": "A-26",
|
|
766
|
+
"finish": "A-22",
|
|
767
|
+
"duration": 4
|
|
768
|
+
},
|
|
769
|
+
{
|
|
770
|
+
"task": "3.1",
|
|
771
|
+
"start": "A-18",
|
|
772
|
+
"finish": "A-10",
|
|
773
|
+
"duration": 8
|
|
774
|
+
},
|
|
775
|
+
{
|
|
776
|
+
"task": "3.2",
|
|
777
|
+
"start": "A-2",
|
|
778
|
+
"finish": "A+4",
|
|
779
|
+
"duration": 6
|
|
780
|
+
},
|
|
781
|
+
{
|
|
782
|
+
"task": "3.3",
|
|
783
|
+
"start": "A+10",
|
|
784
|
+
"finish": "A+17",
|
|
785
|
+
"duration": 7
|
|
786
|
+
},
|
|
787
|
+
{
|
|
788
|
+
"task": "3.4",
|
|
789
|
+
"start": "A+24",
|
|
790
|
+
"finish": "A+26",
|
|
791
|
+
"duration": 2
|
|
792
|
+
}
|
|
793
|
+
]
|
|
794
|
+
}
|
|
795
|
+
],
|
|
796
|
+
"risks": [
|
|
797
|
+
{
|
|
798
|
+
"slug": "weather",
|
|
799
|
+
"title": "Weather delays outdoor phases",
|
|
800
|
+
"status": "OPEN",
|
|
801
|
+
"probability": 4,
|
|
802
|
+
"impact": 3,
|
|
803
|
+
"category": "EXTERNAL",
|
|
804
|
+
"response": "MITIGATE",
|
|
805
|
+
"mitigation_due_date": "A+45",
|
|
806
|
+
"owner": "sam",
|
|
807
|
+
"trigger": "NWS issues a hazardous-weather outlook covering a scheduled pour or steel-pick window, or sustained winds forecast above 25 mph.",
|
|
808
|
+
"contingency": "Stand the site down and reschedule into the next clear window. The contract's winter weather allowance is already carried on the site calendar; it is the constraint that pushes the certificate of occupancy, and days beyond it are the ones that become a time-extension request.",
|
|
809
|
+
"tasks": [
|
|
810
|
+
"2.3",
|
|
811
|
+
"2.4"
|
|
812
|
+
]
|
|
813
|
+
},
|
|
814
|
+
{
|
|
815
|
+
"slug": "soil-conditions",
|
|
816
|
+
"title": "Unsuitable bearing material at excavation",
|
|
817
|
+
"description": "The east footing sits over a mapped alluvial channel; if bearing comes back below the design assumption the footing has to be taken deeper.",
|
|
818
|
+
"status": "OPEN",
|
|
819
|
+
"probability": 2,
|
|
820
|
+
"impact": 4,
|
|
821
|
+
"category": "TECHNICAL",
|
|
822
|
+
"response": "MITIGATE",
|
|
823
|
+
"owner": "tom",
|
|
824
|
+
"mitigation_due_date": "A-56",
|
|
825
|
+
"trigger": "Geotech logs allowable bearing below the 2,500 psf design assumption at any footing location.",
|
|
826
|
+
"contingency": "Over-excavate the soft zone and replace with engineered fill, taking the east footing down to competent strata. Budgeted at 3 crew-days against the foundation contingency allowance; no change order to the owner.",
|
|
827
|
+
"notes": "REALIZED. The mitigation was a spot geotech survey ahead of rebar. It found the soft layer but did not prevent it: bearing came back at 1,800 psf against a 2,500 psf design assumption, so the footing could not be built as drawn. Contingency fired on day 34 — the east footing was over-excavated and backfilled with engineered fill, and excavation ran 5 days to 8. Closed once the plate-load re-test passed at depth.",
|
|
828
|
+
"tasks": [
|
|
829
|
+
"2.1"
|
|
830
|
+
]
|
|
831
|
+
},
|
|
832
|
+
{
|
|
833
|
+
"slug": "permit-delay",
|
|
834
|
+
"title": "Building permit approval slips",
|
|
835
|
+
"description": "The municipal permit office is running 3 weeks behind; gates site prep sign-off.",
|
|
836
|
+
"status": "OPEN",
|
|
837
|
+
"probability": 3,
|
|
838
|
+
"impact": 5,
|
|
839
|
+
"category": "EXTERNAL",
|
|
840
|
+
"response": "MITIGATE",
|
|
841
|
+
"owner": "sam",
|
|
842
|
+
"mitigation_due_date": "A-64",
|
|
843
|
+
"trigger": "Permit still shows \"in review\" on the municipal portal 10 working days before site-prep sign-off is due.",
|
|
844
|
+
"contingency": "Request a partial foundation-only permit so excavation can start against the approved civil package while the building permit finishes review.",
|
|
845
|
+
"tasks": [
|
|
846
|
+
"1.4"
|
|
847
|
+
]
|
|
848
|
+
},
|
|
849
|
+
{
|
|
850
|
+
"slug": "labor",
|
|
851
|
+
"title": "Concrete crew availability",
|
|
852
|
+
"status": "OPEN",
|
|
853
|
+
"probability": 3,
|
|
854
|
+
"impact": 3,
|
|
855
|
+
"category": "ORGANIZATIONAL",
|
|
856
|
+
"response": "MITIGATE",
|
|
857
|
+
"owner": "tom",
|
|
858
|
+
"tasks": [
|
|
859
|
+
"2.3"
|
|
860
|
+
]
|
|
861
|
+
},
|
|
862
|
+
{
|
|
863
|
+
"slug": "design-change",
|
|
864
|
+
"title": "Owner-requested design change order",
|
|
865
|
+
"status": "OPEN",
|
|
866
|
+
"probability": 3,
|
|
867
|
+
"impact": 4,
|
|
868
|
+
"category": "PROJECT_MANAGEMENT",
|
|
869
|
+
"response": "MITIGATE",
|
|
870
|
+
"mitigation_due_date": "A+2",
|
|
871
|
+
"owner": "diego",
|
|
872
|
+
"tasks": [
|
|
873
|
+
"3.1"
|
|
874
|
+
]
|
|
875
|
+
},
|
|
876
|
+
{
|
|
877
|
+
"slug": "crane-availability",
|
|
878
|
+
"title": "Tower crane scheduling conflict",
|
|
879
|
+
"status": "OPEN",
|
|
880
|
+
"probability": 2,
|
|
881
|
+
"impact": 3,
|
|
882
|
+
"category": "ORGANIZATIONAL",
|
|
883
|
+
"response": "MITIGATE",
|
|
884
|
+
"owner": "tom",
|
|
885
|
+
"trigger": "The leasing yard cannot confirm the tower crane for a booked pick week.",
|
|
886
|
+
"contingency": "Fall back to the 90-ton mobile crane for the light picks and resequence roof steel behind decking. Costs a week of double-handling, which the framing float absorbs.",
|
|
887
|
+
"notes": "Crane window booked and confirmed for the structural phase. The annual inspection stand-down is on the site calendar; framing carries enough float to absorb it without moving the certificate of occupancy.",
|
|
888
|
+
"tasks": [
|
|
889
|
+
"3.3"
|
|
890
|
+
]
|
|
891
|
+
},
|
|
892
|
+
{
|
|
893
|
+
"slug": "material-escalation",
|
|
894
|
+
"title": "Steel & concrete price escalation",
|
|
895
|
+
"status": "ACCEPTED",
|
|
896
|
+
"probability": 4,
|
|
897
|
+
"impact": 3,
|
|
898
|
+
"category": "EXTERNAL",
|
|
899
|
+
"response": "ACCEPT",
|
|
900
|
+
"owner": "omar",
|
|
901
|
+
"tasks": [
|
|
902
|
+
"3.2"
|
|
903
|
+
]
|
|
904
|
+
}
|
|
905
|
+
]
|
|
906
|
+
},
|
|
907
|
+
{
|
|
908
|
+
"slug": "bayside-building",
|
|
909
|
+
"name": "Building & Fit-out",
|
|
910
|
+
"description": "The interior scope — MEP rough-in, finishes, and commissioning through to a certificate of occupancy. Every task is gated on the structure passing framing inspection.",
|
|
911
|
+
"methodology": "WATERFALL",
|
|
912
|
+
"start_date": "A-90",
|
|
913
|
+
"calendar": "site",
|
|
914
|
+
"default_view": "SCHEDULE",
|
|
915
|
+
"labels": [
|
|
916
|
+
{
|
|
917
|
+
"slug": "critical-path",
|
|
918
|
+
"name": "Critical path",
|
|
919
|
+
"color": "rose",
|
|
920
|
+
"position": 0
|
|
921
|
+
},
|
|
922
|
+
{
|
|
923
|
+
"slug": "long-lead",
|
|
924
|
+
"name": "Long-lead procurement",
|
|
925
|
+
"color": "amber",
|
|
926
|
+
"position": 1
|
|
927
|
+
},
|
|
928
|
+
{
|
|
929
|
+
"slug": "inspection",
|
|
930
|
+
"name": "Inspection gate",
|
|
931
|
+
"color": "teal",
|
|
932
|
+
"position": 2
|
|
933
|
+
},
|
|
934
|
+
{
|
|
935
|
+
"slug": "commissioning",
|
|
936
|
+
"name": "Commissioning",
|
|
937
|
+
"color": "green",
|
|
938
|
+
"position": 3
|
|
939
|
+
}
|
|
940
|
+
],
|
|
941
|
+
"tasks": [
|
|
942
|
+
{
|
|
943
|
+
"wbs_path": "1",
|
|
944
|
+
"name": "MEP",
|
|
945
|
+
"governance_class": "gated",
|
|
946
|
+
"delivery_mode": "waterfall"
|
|
947
|
+
},
|
|
948
|
+
{
|
|
949
|
+
"wbs_path": "1.1",
|
|
950
|
+
"name": "Rough-in electrical",
|
|
951
|
+
"status": "NOT_STARTED",
|
|
952
|
+
"governance_class": "gated",
|
|
953
|
+
"delivery_mode": "waterfall",
|
|
954
|
+
"assignee": "nadia",
|
|
955
|
+
"labels": [
|
|
956
|
+
"critical-path"
|
|
957
|
+
],
|
|
958
|
+
"duration": 7,
|
|
959
|
+
"planned_start": "A+37",
|
|
960
|
+
"estimate": {
|
|
961
|
+
"optimistic": 5,
|
|
962
|
+
"most_likely": 7,
|
|
963
|
+
"pessimistic": 13
|
|
964
|
+
},
|
|
965
|
+
"links": [
|
|
966
|
+
{
|
|
967
|
+
"target": "bayside-sitework:3.4",
|
|
968
|
+
"link_type": "relates_to",
|
|
969
|
+
"note": "Electrical rough-in mobilizes three days ahead of this framing inspection — see the structural gate for the cert date."
|
|
970
|
+
}
|
|
971
|
+
],
|
|
972
|
+
"skill_requirements": [
|
|
973
|
+
{
|
|
974
|
+
"skill": "MEP coordination",
|
|
975
|
+
"min_proficiency": "expert"
|
|
976
|
+
}
|
|
977
|
+
]
|
|
978
|
+
},
|
|
979
|
+
{
|
|
980
|
+
"wbs_path": "1.2",
|
|
981
|
+
"name": "Rough-in plumbing",
|
|
982
|
+
"status": "NOT_STARTED",
|
|
983
|
+
"governance_class": "gated",
|
|
984
|
+
"delivery_mode": "waterfall",
|
|
985
|
+
"assignee": "omar",
|
|
986
|
+
"duration": 6,
|
|
987
|
+
"planned_start": "A+51",
|
|
988
|
+
"estimate": {
|
|
989
|
+
"optimistic": 4,
|
|
990
|
+
"most_likely": 6,
|
|
991
|
+
"pessimistic": 11
|
|
992
|
+
}
|
|
993
|
+
},
|
|
994
|
+
{
|
|
995
|
+
"wbs_path": "1.3",
|
|
996
|
+
"name": "HVAC ductwork",
|
|
997
|
+
"status": "NOT_STARTED",
|
|
998
|
+
"governance_class": "gated",
|
|
999
|
+
"delivery_mode": "waterfall",
|
|
1000
|
+
"assignee": "diego",
|
|
1001
|
+
"duration": 8,
|
|
1002
|
+
"planned_start": "A+63",
|
|
1003
|
+
"estimate": {
|
|
1004
|
+
"optimistic": 6,
|
|
1005
|
+
"most_likely": 8,
|
|
1006
|
+
"pessimistic": 15
|
|
1007
|
+
}
|
|
1008
|
+
},
|
|
1009
|
+
{
|
|
1010
|
+
"wbs_path": "1.4",
|
|
1011
|
+
"name": "MEP equipment delivery",
|
|
1012
|
+
"status": "NOT_STARTED",
|
|
1013
|
+
"governance_class": "gated",
|
|
1014
|
+
"delivery_mode": "waterfall",
|
|
1015
|
+
"assignee": "tom",
|
|
1016
|
+
"labels": [
|
|
1017
|
+
"long-lead"
|
|
1018
|
+
],
|
|
1019
|
+
"duration": 5,
|
|
1020
|
+
"planned_start": "A+79",
|
|
1021
|
+
"estimate": {
|
|
1022
|
+
"optimistic": 4,
|
|
1023
|
+
"most_likely": 5,
|
|
1024
|
+
"pessimistic": 10
|
|
1025
|
+
}
|
|
1026
|
+
},
|
|
1027
|
+
{
|
|
1028
|
+
"wbs_path": "1.5",
|
|
1029
|
+
"name": "MEP inspection",
|
|
1030
|
+
"status": "NOT_STARTED",
|
|
1031
|
+
"governance_class": "gated",
|
|
1032
|
+
"delivery_mode": "waterfall",
|
|
1033
|
+
"assignee": "nadia",
|
|
1034
|
+
"labels": [
|
|
1035
|
+
"inspection"
|
|
1036
|
+
],
|
|
1037
|
+
"duration": 3,
|
|
1038
|
+
"planned_start": "A+89",
|
|
1039
|
+
"estimate": {
|
|
1040
|
+
"optimistic": 2,
|
|
1041
|
+
"most_likely": 3,
|
|
1042
|
+
"pessimistic": 6
|
|
1043
|
+
},
|
|
1044
|
+
"links": [
|
|
1045
|
+
{
|
|
1046
|
+
"target": "2.5",
|
|
1047
|
+
"link_type": "duplicates",
|
|
1048
|
+
"note": "If the AHJ allows a combined walk, the standalone MEP inspection folds into final handover — dedupe before scheduling."
|
|
1049
|
+
}
|
|
1050
|
+
]
|
|
1051
|
+
},
|
|
1052
|
+
{
|
|
1053
|
+
"wbs_path": "2",
|
|
1054
|
+
"name": "Finish-out",
|
|
1055
|
+
"governance_class": "gated",
|
|
1056
|
+
"delivery_mode": "waterfall"
|
|
1057
|
+
},
|
|
1058
|
+
{
|
|
1059
|
+
"wbs_path": "2.1",
|
|
1060
|
+
"name": "Drywall & paint",
|
|
1061
|
+
"status": "NOT_STARTED",
|
|
1062
|
+
"governance_class": "gated",
|
|
1063
|
+
"delivery_mode": "waterfall",
|
|
1064
|
+
"assignee": "omar",
|
|
1065
|
+
"labels": [
|
|
1066
|
+
"critical-path"
|
|
1067
|
+
],
|
|
1068
|
+
"duration": 8,
|
|
1069
|
+
"planned_start": "A+95",
|
|
1070
|
+
"estimate": {
|
|
1071
|
+
"optimistic": 6,
|
|
1072
|
+
"most_likely": 8,
|
|
1073
|
+
"pessimistic": 15
|
|
1074
|
+
}
|
|
1075
|
+
},
|
|
1076
|
+
{
|
|
1077
|
+
"wbs_path": "2.2",
|
|
1078
|
+
"name": "Flooring",
|
|
1079
|
+
"status": "NOT_STARTED",
|
|
1080
|
+
"governance_class": "gated",
|
|
1081
|
+
"delivery_mode": "waterfall",
|
|
1082
|
+
"assignee": "diego",
|
|
1083
|
+
"duration": 6,
|
|
1084
|
+
"planned_start": "A+111",
|
|
1085
|
+
"estimate": {
|
|
1086
|
+
"optimistic": 4,
|
|
1087
|
+
"most_likely": 6,
|
|
1088
|
+
"pessimistic": 11
|
|
1089
|
+
}
|
|
1090
|
+
},
|
|
1091
|
+
{
|
|
1092
|
+
"wbs_path": "2.3",
|
|
1093
|
+
"name": "Fixtures & casework",
|
|
1094
|
+
"status": "NOT_STARTED",
|
|
1095
|
+
"governance_class": "gated",
|
|
1096
|
+
"delivery_mode": "waterfall",
|
|
1097
|
+
"assignee": "tom",
|
|
1098
|
+
"duration": 5,
|
|
1099
|
+
"planned_start": "A+123",
|
|
1100
|
+
"estimate": {
|
|
1101
|
+
"optimistic": 4,
|
|
1102
|
+
"most_likely": 5,
|
|
1103
|
+
"pessimistic": 10
|
|
1104
|
+
}
|
|
1105
|
+
},
|
|
1106
|
+
{
|
|
1107
|
+
"wbs_path": "2.4",
|
|
1108
|
+
"name": "Commissioning start",
|
|
1109
|
+
"status": "NOT_STARTED",
|
|
1110
|
+
"governance_class": "gated",
|
|
1111
|
+
"delivery_mode": "milestone",
|
|
1112
|
+
"assignee": "nadia",
|
|
1113
|
+
"labels": [
|
|
1114
|
+
"commissioning"
|
|
1115
|
+
],
|
|
1116
|
+
"is_milestone": true,
|
|
1117
|
+
"planned_start": "A+133"
|
|
1118
|
+
},
|
|
1119
|
+
{
|
|
1120
|
+
"wbs_path": "2.5",
|
|
1121
|
+
"name": "Final inspection & handover",
|
|
1122
|
+
"status": "NOT_STARTED",
|
|
1123
|
+
"governance_class": "gated",
|
|
1124
|
+
"delivery_mode": "waterfall",
|
|
1125
|
+
"assignee": "omar",
|
|
1126
|
+
"labels": [
|
|
1127
|
+
"critical-path",
|
|
1128
|
+
"inspection"
|
|
1129
|
+
],
|
|
1130
|
+
"duration": 3,
|
|
1131
|
+
"planned_start": "A+135",
|
|
1132
|
+
"estimate": {
|
|
1133
|
+
"optimistic": 2,
|
|
1134
|
+
"most_likely": 3,
|
|
1135
|
+
"pessimistic": 6
|
|
1136
|
+
}
|
|
1137
|
+
},
|
|
1138
|
+
{
|
|
1139
|
+
"wbs_path": "3",
|
|
1140
|
+
"name": "Certificate of occupancy",
|
|
1141
|
+
"is_milestone": true,
|
|
1142
|
+
"delivery_mode": "milestone",
|
|
1143
|
+
"governance_class": "gated",
|
|
1144
|
+
"planned_start": "A+141",
|
|
1145
|
+
"labels": [
|
|
1146
|
+
"critical-path"
|
|
1147
|
+
]
|
|
1148
|
+
}
|
|
1149
|
+
],
|
|
1150
|
+
"dependencies": [
|
|
1151
|
+
{
|
|
1152
|
+
"predecessor": "bayside-sitework:3.4",
|
|
1153
|
+
"successor": "1.1",
|
|
1154
|
+
"dep_type": "FS",
|
|
1155
|
+
"lag": -3
|
|
1156
|
+
},
|
|
1157
|
+
{
|
|
1158
|
+
"predecessor": "bayside-sitework:3.4",
|
|
1159
|
+
"successor": "1.2",
|
|
1160
|
+
"dep_type": "FS",
|
|
1161
|
+
"lag": 0
|
|
1162
|
+
},
|
|
1163
|
+
{
|
|
1164
|
+
"predecessor": "bayside-sitework:3.4",
|
|
1165
|
+
"successor": "1.3",
|
|
1166
|
+
"dep_type": "FS",
|
|
1167
|
+
"lag": 0
|
|
1168
|
+
},
|
|
1169
|
+
{
|
|
1170
|
+
"predecessor": "1.1",
|
|
1171
|
+
"successor": "1.5",
|
|
1172
|
+
"dep_type": "FS",
|
|
1173
|
+
"lag": 0
|
|
1174
|
+
},
|
|
1175
|
+
{
|
|
1176
|
+
"predecessor": "1.2",
|
|
1177
|
+
"successor": "1.5",
|
|
1178
|
+
"dep_type": "FS",
|
|
1179
|
+
"lag": 0
|
|
1180
|
+
},
|
|
1181
|
+
{
|
|
1182
|
+
"predecessor": "1.3",
|
|
1183
|
+
"successor": "1.5",
|
|
1184
|
+
"dep_type": "FS",
|
|
1185
|
+
"lag": 0
|
|
1186
|
+
},
|
|
1187
|
+
{
|
|
1188
|
+
"predecessor": "1.5",
|
|
1189
|
+
"successor": "2.1",
|
|
1190
|
+
"dep_type": "FS",
|
|
1191
|
+
"lag": 0
|
|
1192
|
+
},
|
|
1193
|
+
{
|
|
1194
|
+
"predecessor": "2.1",
|
|
1195
|
+
"successor": "2.2",
|
|
1196
|
+
"dep_type": "FS",
|
|
1197
|
+
"lag": 0
|
|
1198
|
+
},
|
|
1199
|
+
{
|
|
1200
|
+
"predecessor": "2.1",
|
|
1201
|
+
"successor": "2.3",
|
|
1202
|
+
"dep_type": "FS",
|
|
1203
|
+
"lag": 0
|
|
1204
|
+
},
|
|
1205
|
+
{
|
|
1206
|
+
"predecessor": "2.2",
|
|
1207
|
+
"successor": "2.4",
|
|
1208
|
+
"dep_type": "SF",
|
|
1209
|
+
"lag": 0
|
|
1210
|
+
},
|
|
1211
|
+
{
|
|
1212
|
+
"predecessor": "2.2",
|
|
1213
|
+
"successor": "2.5",
|
|
1214
|
+
"dep_type": "FS",
|
|
1215
|
+
"lag": 0
|
|
1216
|
+
},
|
|
1217
|
+
{
|
|
1218
|
+
"predecessor": "2.3",
|
|
1219
|
+
"successor": "2.5",
|
|
1220
|
+
"dep_type": "FS",
|
|
1221
|
+
"lag": 0
|
|
1222
|
+
},
|
|
1223
|
+
{
|
|
1224
|
+
"predecessor": "2.5",
|
|
1225
|
+
"successor": "3",
|
|
1226
|
+
"dep_type": "FS",
|
|
1227
|
+
"lag": 0
|
|
1228
|
+
},
|
|
1229
|
+
{
|
|
1230
|
+
"predecessor": "2.4",
|
|
1231
|
+
"successor": "3",
|
|
1232
|
+
"dep_type": "FS",
|
|
1233
|
+
"lag": 0
|
|
1234
|
+
}
|
|
1235
|
+
],
|
|
1236
|
+
"baselines": [
|
|
1237
|
+
{
|
|
1238
|
+
"name": "Contract baseline",
|
|
1239
|
+
"is_active": true,
|
|
1240
|
+
"captured_at": "A-88",
|
|
1241
|
+
"tasks": [
|
|
1242
|
+
{
|
|
1243
|
+
"task": "1.1",
|
|
1244
|
+
"start": "A+28",
|
|
1245
|
+
"finish": "A+35",
|
|
1246
|
+
"duration": 7
|
|
1247
|
+
},
|
|
1248
|
+
{
|
|
1249
|
+
"task": "1.2",
|
|
1250
|
+
"start": "A+42",
|
|
1251
|
+
"finish": "A+48",
|
|
1252
|
+
"duration": 6
|
|
1253
|
+
},
|
|
1254
|
+
{
|
|
1255
|
+
"task": "1.3",
|
|
1256
|
+
"start": "A+54",
|
|
1257
|
+
"finish": "A+62",
|
|
1258
|
+
"duration": 8
|
|
1259
|
+
},
|
|
1260
|
+
{
|
|
1261
|
+
"task": "1.4",
|
|
1262
|
+
"start": "A+70",
|
|
1263
|
+
"finish": "A+75",
|
|
1264
|
+
"duration": 5
|
|
1265
|
+
},
|
|
1266
|
+
{
|
|
1267
|
+
"task": "1.5",
|
|
1268
|
+
"start": "A+80",
|
|
1269
|
+
"finish": "A+83",
|
|
1270
|
+
"duration": 3
|
|
1271
|
+
},
|
|
1272
|
+
{
|
|
1273
|
+
"task": "2.1",
|
|
1274
|
+
"start": "A+86",
|
|
1275
|
+
"finish": "A+94",
|
|
1276
|
+
"duration": 8
|
|
1277
|
+
},
|
|
1278
|
+
{
|
|
1279
|
+
"task": "2.2",
|
|
1280
|
+
"start": "A+102",
|
|
1281
|
+
"finish": "A+108",
|
|
1282
|
+
"duration": 6
|
|
1283
|
+
},
|
|
1284
|
+
{
|
|
1285
|
+
"task": "2.3",
|
|
1286
|
+
"start": "A+114",
|
|
1287
|
+
"finish": "A+119",
|
|
1288
|
+
"duration": 5
|
|
1289
|
+
},
|
|
1290
|
+
{
|
|
1291
|
+
"task": "2.5",
|
|
1292
|
+
"start": "A+126",
|
|
1293
|
+
"finish": "A+129",
|
|
1294
|
+
"duration": 3
|
|
1295
|
+
}
|
|
1296
|
+
]
|
|
1297
|
+
}
|
|
1298
|
+
],
|
|
1299
|
+
"risks": [
|
|
1300
|
+
{
|
|
1301
|
+
"slug": "supply-chain",
|
|
1302
|
+
"title": "MEP equipment supply delay",
|
|
1303
|
+
"status": "MITIGATING",
|
|
1304
|
+
"probability": 3,
|
|
1305
|
+
"impact": 5,
|
|
1306
|
+
"category": "EXTERNAL",
|
|
1307
|
+
"response": "MITIGATE",
|
|
1308
|
+
"owner": "nadia",
|
|
1309
|
+
"mitigation_due_date": "A+30",
|
|
1310
|
+
"trigger": "Quoted lead time on the rooftop units exceeds 16 weeks, or the vendor misses a confirmed ship date.",
|
|
1311
|
+
"contingency": "Release the alternate manufacturer already approved in the submittal, and set the units after the building is dried in rather than before.",
|
|
1312
|
+
"tasks": [
|
|
1313
|
+
"1.4"
|
|
1314
|
+
]
|
|
1315
|
+
},
|
|
1316
|
+
{
|
|
1317
|
+
"slug": "electrical-inspection",
|
|
1318
|
+
"title": "Electrical rough-in inspection rework",
|
|
1319
|
+
"status": "MITIGATING",
|
|
1320
|
+
"probability": 3,
|
|
1321
|
+
"impact": 3,
|
|
1322
|
+
"category": "TECHNICAL",
|
|
1323
|
+
"response": "MITIGATE",
|
|
1324
|
+
"mitigation_due_date": "A+12",
|
|
1325
|
+
"owner": "nadia",
|
|
1326
|
+
"tasks": [
|
|
1327
|
+
"1.5"
|
|
1328
|
+
]
|
|
1329
|
+
},
|
|
1330
|
+
{
|
|
1331
|
+
"slug": "subcontractor-default",
|
|
1332
|
+
"title": "MEP subcontractor financial risk",
|
|
1333
|
+
"description": "Primary MEP sub is over-extended; default would strand the rough-in.",
|
|
1334
|
+
"status": "OPEN",
|
|
1335
|
+
"probability": 2,
|
|
1336
|
+
"impact": 5,
|
|
1337
|
+
"category": "EXTERNAL",
|
|
1338
|
+
"response": "TRANSFER",
|
|
1339
|
+
"owner": "sam",
|
|
1340
|
+
"trigger": "The sub misses two consecutive payment-application cycles, or its surety declines to extend the bond at renewal.",
|
|
1341
|
+
"contingency": "The bond is called and the surety completes the rough-in with a replacement sub of its choosing.",
|
|
1342
|
+
"notes": "TRANSFERRED, not mitigated. The MEP subcontract was written to require a 100% payment-and-performance bond from an A-rated surety before mobilization, so the financial exposure of a default sits with the surety rather than the owner. What is NOT transferred is the schedule: replacing a defaulted sub mid-rough-in still costs an estimated 4-6 weeks, which is why this stays OPEN at probability 2 and impact 5 rather than being closed out on the strength of the bond.",
|
|
1343
|
+
"tasks": [
|
|
1344
|
+
"1.4"
|
|
1345
|
+
]
|
|
1346
|
+
},
|
|
1347
|
+
{
|
|
1348
|
+
"slug": "commissioning-delay",
|
|
1349
|
+
"title": "Building-systems commissioning slips occupancy",
|
|
1350
|
+
"status": "OPEN",
|
|
1351
|
+
"probability": 3,
|
|
1352
|
+
"impact": 4,
|
|
1353
|
+
"category": "TECHNICAL",
|
|
1354
|
+
"response": "MITIGATE",
|
|
1355
|
+
"owner": "diego",
|
|
1356
|
+
"tasks": [
|
|
1357
|
+
"2.4"
|
|
1358
|
+
]
|
|
1359
|
+
}
|
|
1360
|
+
]
|
|
1361
|
+
}
|
|
1362
|
+
],
|
|
1363
|
+
"events": [
|
|
1364
|
+
{
|
|
1365
|
+
"at": "A-68T09:00",
|
|
1366
|
+
"action": "task.comment",
|
|
1367
|
+
"target": "task:bayside-sitework:1.4",
|
|
1368
|
+
"actor": "tom",
|
|
1369
|
+
"body": "Survey package is ready, but the municipal permit is still in review — that's gating the site-prep sign-off."
|
|
1370
|
+
},
|
|
1371
|
+
{
|
|
1372
|
+
"at": "A-67T09:45",
|
|
1373
|
+
"action": "risk.note",
|
|
1374
|
+
"target": "risk:permit-delay",
|
|
1375
|
+
"actor": "sam",
|
|
1376
|
+
"body": "Permit office confirmed still in review this week, and it's now the long pole ahead of site-prep sign-off — the survey package itself has been ready since last week. Raising to mitigating; the partial foundation-only permit in the contingency is what we'd request if this runs 10 more working days."
|
|
1377
|
+
},
|
|
1378
|
+
{
|
|
1379
|
+
"at": "A-66T10:00",
|
|
1380
|
+
"action": "risk.status",
|
|
1381
|
+
"target": "risk:permit-delay",
|
|
1382
|
+
"actor": "sam",
|
|
1383
|
+
"to": "MITIGATING"
|
|
1384
|
+
},
|
|
1385
|
+
{
|
|
1386
|
+
"at": "A-59T09:00",
|
|
1387
|
+
"action": "task.comment",
|
|
1388
|
+
"target": "task:bayside-sitework:2.1",
|
|
1389
|
+
"actor": "tom",
|
|
1390
|
+
"body": "Hit a soft layer at the east footing — ordering a geotech survey before we set rebar.",
|
|
1391
|
+
"slug": "east-soft-layer"
|
|
1392
|
+
},
|
|
1393
|
+
{
|
|
1394
|
+
"at": "A-59T09:30",
|
|
1395
|
+
"action": "risk.status",
|
|
1396
|
+
"target": "risk:soil-conditions",
|
|
1397
|
+
"actor": "tom",
|
|
1398
|
+
"to": "MITIGATING"
|
|
1399
|
+
},
|
|
1400
|
+
{
|
|
1401
|
+
"at": "A-57T16:00",
|
|
1402
|
+
"action": "risk.note",
|
|
1403
|
+
"target": "risk:soil-conditions",
|
|
1404
|
+
"actor": "tom",
|
|
1405
|
+
"body": "Geotech is back and it is not what we wanted: 1,800 psf allowable against a 2,500 psf design assumption, over about a third of the east footing. The survey did its job — we know exactly what is down there — but knowing does not make it buildable as drawn. Mitigation has not held; firing the contingency."
|
|
1406
|
+
},
|
|
1407
|
+
{
|
|
1408
|
+
"at": "A-56T08:00",
|
|
1409
|
+
"action": "task.comment",
|
|
1410
|
+
"target": "task:bayside-sitework:2.1",
|
|
1411
|
+
"actor": "tom",
|
|
1412
|
+
"body": "Over-excavating the soft zone and backfilling with engineered fill to take the east footing to competent strata. Re-estimating excavation at 8 days against the 5 we contracted — the delta comes out of the foundation contingency allowance, not a change order.",
|
|
1413
|
+
"reply_to": "east-soft-layer"
|
|
1414
|
+
},
|
|
1415
|
+
{
|
|
1416
|
+
"at": "A-56T08:30",
|
|
1417
|
+
"action": "task.estimate",
|
|
1418
|
+
"target": "task:bayside-sitework:2.1",
|
|
1419
|
+
"actor": "tom",
|
|
1420
|
+
"estimate": {
|
|
1421
|
+
"optimistic": 6,
|
|
1422
|
+
"most_likely": 8,
|
|
1423
|
+
"pessimistic": 15
|
|
1424
|
+
}
|
|
1425
|
+
},
|
|
1426
|
+
{
|
|
1427
|
+
"at": "A-52T13:30",
|
|
1428
|
+
"action": "risk.note",
|
|
1429
|
+
"target": "risk:soil-conditions",
|
|
1430
|
+
"actor": "tom",
|
|
1431
|
+
"body": "Plate-load re-test passed at depth. Three crew-days and the fill cost, all inside the allowance. Closing it — and the trigger stays on the register for the west footing, which sits off the same channel."
|
|
1432
|
+
},
|
|
1433
|
+
{
|
|
1434
|
+
"at": "A-52T14:00",
|
|
1435
|
+
"action": "risk.status",
|
|
1436
|
+
"target": "risk:soil-conditions",
|
|
1437
|
+
"actor": "tom",
|
|
1438
|
+
"to": "CLOSED"
|
|
1439
|
+
},
|
|
1440
|
+
{
|
|
1441
|
+
"at": "A-50T08:00",
|
|
1442
|
+
"action": "task.comment",
|
|
1443
|
+
"target": "task:bayside-sitework:2.2",
|
|
1444
|
+
"actor": "diego",
|
|
1445
|
+
"body": "Rebar cage and formwork up for the east footing."
|
|
1446
|
+
},
|
|
1447
|
+
{
|
|
1448
|
+
"at": "A-50T09:00",
|
|
1449
|
+
"action": "task.status",
|
|
1450
|
+
"target": "task:bayside-sitework:2.2",
|
|
1451
|
+
"actor": "diego",
|
|
1452
|
+
"to": "IN_PROGRESS"
|
|
1453
|
+
},
|
|
1454
|
+
{
|
|
1455
|
+
"at": "A-47T15:00",
|
|
1456
|
+
"action": "task.comment",
|
|
1457
|
+
"target": "task:bayside-sitework:2.2",
|
|
1458
|
+
"actor": "diego",
|
|
1459
|
+
"body": "Tied and shimmed. Calling for inspection."
|
|
1460
|
+
},
|
|
1461
|
+
{
|
|
1462
|
+
"at": "A-47T15:30",
|
|
1463
|
+
"action": "task.status",
|
|
1464
|
+
"target": "task:bayside-sitework:2.2",
|
|
1465
|
+
"actor": "diego",
|
|
1466
|
+
"to": "REVIEW"
|
|
1467
|
+
},
|
|
1468
|
+
{
|
|
1469
|
+
"at": "A-46T10:00",
|
|
1470
|
+
"action": "task.comment",
|
|
1471
|
+
"target": "task:bayside-sitework:2.2",
|
|
1472
|
+
"actor": "omar",
|
|
1473
|
+
"body": "Inspection: bar spacing on the north face is out of tolerance per the spec. Failing it — needs a re-tie. @bayside-diego",
|
|
1474
|
+
"slug": "footing-inspection-fail"
|
|
1475
|
+
},
|
|
1476
|
+
{
|
|
1477
|
+
"at": "A-46T10:30",
|
|
1478
|
+
"action": "task.status",
|
|
1479
|
+
"target": "task:bayside-sitework:2.2",
|
|
1480
|
+
"actor": "omar",
|
|
1481
|
+
"to": "IN_PROGRESS"
|
|
1482
|
+
},
|
|
1483
|
+
{
|
|
1484
|
+
"at": "A-46T10:45",
|
|
1485
|
+
"action": "risk.note",
|
|
1486
|
+
"target": "risk:inspection-fail",
|
|
1487
|
+
"actor": "diego",
|
|
1488
|
+
"body": "Program-level risk, tracked here on Sitework because the register has no program-level risk model yet — it's really the schedule that both projects share. The east-footing rebar failure above is a small, absorbable version of it: one re-tie cycle, no float lost. Accepting for now; the real exposure is a failure on the framing inspection itself, which is what cascades into fit-out."
|
|
1489
|
+
},
|
|
1490
|
+
{
|
|
1491
|
+
"at": "A-44T14:00",
|
|
1492
|
+
"action": "task.comment",
|
|
1493
|
+
"target": "task:bayside-sitework:2.2",
|
|
1494
|
+
"actor": "diego",
|
|
1495
|
+
"body": "Re-tied to spec and re-shot the spacing. Ready for re-inspection.",
|
|
1496
|
+
"reply_to": "footing-inspection-fail"
|
|
1497
|
+
},
|
|
1498
|
+
{
|
|
1499
|
+
"at": "A-44T14:30",
|
|
1500
|
+
"action": "task.status",
|
|
1501
|
+
"target": "task:bayside-sitework:2.2",
|
|
1502
|
+
"actor": "diego",
|
|
1503
|
+
"to": "REVIEW"
|
|
1504
|
+
},
|
|
1505
|
+
{
|
|
1506
|
+
"at": "A-43T09:00",
|
|
1507
|
+
"action": "task.comment",
|
|
1508
|
+
"target": "task:bayside-sitework:2.2",
|
|
1509
|
+
"actor": "omar",
|
|
1510
|
+
"body": "Re-inspection passed. Cleared to pour.",
|
|
1511
|
+
"reply_to": "footing-inspection-fail",
|
|
1512
|
+
"slug": "footing-reinspection-pass"
|
|
1513
|
+
},
|
|
1514
|
+
{
|
|
1515
|
+
"at": "A-43T09:30",
|
|
1516
|
+
"action": "task.status",
|
|
1517
|
+
"target": "task:bayside-sitework:2.2",
|
|
1518
|
+
"actor": "omar",
|
|
1519
|
+
"to": "COMPLETE"
|
|
1520
|
+
},
|
|
1521
|
+
{
|
|
1522
|
+
"at": "A-40T07:00",
|
|
1523
|
+
"action": "task.comment",
|
|
1524
|
+
"target": "task:bayside-sitework:2.3",
|
|
1525
|
+
"actor": "diego",
|
|
1526
|
+
"body": "Rain moving in for the pour window — coordinating to pour ahead of the front so we don't lose the day."
|
|
1527
|
+
},
|
|
1528
|
+
{
|
|
1529
|
+
"at": "A-34T08:00",
|
|
1530
|
+
"action": "task.comment",
|
|
1531
|
+
"target": "task:bayside-sitework:2.4",
|
|
1532
|
+
"actor": "diego",
|
|
1533
|
+
"body": "The pours belong with the concrete crew — @bayside-tom moving the west pour to you."
|
|
1534
|
+
},
|
|
1535
|
+
{
|
|
1536
|
+
"at": "A-34T08:05",
|
|
1537
|
+
"action": "task.assign",
|
|
1538
|
+
"target": "task:bayside-sitework:2.4",
|
|
1539
|
+
"actor": "diego",
|
|
1540
|
+
"assignee": "tom"
|
|
1541
|
+
},
|
|
1542
|
+
{
|
|
1543
|
+
"at": "A-34T08:15",
|
|
1544
|
+
"action": "risk.note",
|
|
1545
|
+
"target": "risk:labor",
|
|
1546
|
+
"actor": "diego",
|
|
1547
|
+
"body": "Tom is now carrying both the east and west pours after the reassignment above — stretched, but not yet short. If a third pour lands in the same window this becomes the trigger for bringing on a second crew rather than a hypothetical one."
|
|
1548
|
+
},
|
|
1549
|
+
{
|
|
1550
|
+
"at": "A-20T09:00",
|
|
1551
|
+
"action": "risk.status",
|
|
1552
|
+
"target": "risk:crane-availability",
|
|
1553
|
+
"actor": "tom",
|
|
1554
|
+
"to": "MITIGATING"
|
|
1555
|
+
},
|
|
1556
|
+
{
|
|
1557
|
+
"at": "A-13T20:45",
|
|
1558
|
+
"action": "risk.note",
|
|
1559
|
+
"target": "risk:crane-availability",
|
|
1560
|
+
"actor": "tom",
|
|
1561
|
+
"body": "Leasing yard confirmed and locked the tower crane booking through the end of the structural phase — no scheduling gap opened. The annual-inspection stand-down already carried on the site calendar is the only planned down time, and framing has the float to absorb it. Resolving; the mobile-crane fallback in the contingency wasn't needed."
|
|
1562
|
+
},
|
|
1563
|
+
{
|
|
1564
|
+
"at": "A-12T09:00",
|
|
1565
|
+
"action": "risk.status",
|
|
1566
|
+
"target": "risk:crane-availability",
|
|
1567
|
+
"actor": "tom",
|
|
1568
|
+
"to": "RESOLVED"
|
|
1569
|
+
},
|
|
1570
|
+
{
|
|
1571
|
+
"at": "A-18T08:00",
|
|
1572
|
+
"action": "task.comment",
|
|
1573
|
+
"target": "task:bayside-sitework:3.1",
|
|
1574
|
+
"actor": "diego",
|
|
1575
|
+
"body": "Crane is rigged and the first column line is bolted — steel erection is underway."
|
|
1576
|
+
},
|
|
1577
|
+
{
|
|
1578
|
+
"at": "A-18T08:30",
|
|
1579
|
+
"action": "task.status",
|
|
1580
|
+
"target": "task:bayside-sitework:3.1",
|
|
1581
|
+
"actor": "diego",
|
|
1582
|
+
"to": "IN_PROGRESS"
|
|
1583
|
+
},
|
|
1584
|
+
{
|
|
1585
|
+
"at": "A-18T08:45",
|
|
1586
|
+
"action": "risk.note",
|
|
1587
|
+
"target": "risk:material-escalation",
|
|
1588
|
+
"actor": "omar",
|
|
1589
|
+
"body": "This steel delivery came in at the price locked in the early procurement buy, so the escalation hasn't hit us yet on this pour. Accepting the risk as scoped — the buy-ahead on the remaining structural steel is what's carrying it, not a price hedge."
|
|
1590
|
+
},
|
|
1591
|
+
{
|
|
1592
|
+
"at": "A-16T09:00",
|
|
1593
|
+
"action": "task.comment",
|
|
1594
|
+
"target": "task:bayside-sitework:3.1",
|
|
1595
|
+
"actor": "diego",
|
|
1596
|
+
"body": "Steel is going up. @bayside-sam is still weighing a mezzanine design change — holding the final connections until it's resolved."
|
|
1597
|
+
},
|
|
1598
|
+
{
|
|
1599
|
+
"at": "A-14T10:45",
|
|
1600
|
+
"action": "risk.note",
|
|
1601
|
+
"target": "risk:design-change",
|
|
1602
|
+
"actor": "diego",
|
|
1603
|
+
"body": "The owner's mezzanine design change is now confirmed rather than under consideration — deck framing at grid C is added scope. Raising to mitigating; holding final steel connections until the change locked (rather than guessing) is what kept this from becoming rework."
|
|
1604
|
+
},
|
|
1605
|
+
{
|
|
1606
|
+
"at": "A-14T11:00",
|
|
1607
|
+
"action": "risk.status",
|
|
1608
|
+
"target": "risk:design-change",
|
|
1609
|
+
"actor": "diego",
|
|
1610
|
+
"to": "MITIGATING"
|
|
1611
|
+
},
|
|
1612
|
+
{
|
|
1613
|
+
"at": "A-13T09:00",
|
|
1614
|
+
"action": "task.comment",
|
|
1615
|
+
"target": "task:bayside-sitework:3.2",
|
|
1616
|
+
"actor": "diego",
|
|
1617
|
+
"body": "Mezzanine change adds deck framing at grid C — re-estimating floor decking and re-baselining so the contract dates stay on record."
|
|
1618
|
+
},
|
|
1619
|
+
{
|
|
1620
|
+
"at": "A-13T09:30",
|
|
1621
|
+
"action": "task.estimate",
|
|
1622
|
+
"target": "task:bayside-sitework:3.2",
|
|
1623
|
+
"actor": "diego",
|
|
1624
|
+
"estimate": {
|
|
1625
|
+
"optimistic": 6,
|
|
1626
|
+
"most_likely": 8,
|
|
1627
|
+
"pessimistic": 15
|
|
1628
|
+
}
|
|
1629
|
+
},
|
|
1630
|
+
{
|
|
1631
|
+
"at": "A-13T09:35",
|
|
1632
|
+
"action": "baseline.capture",
|
|
1633
|
+
"target": "project:bayside-sitework",
|
|
1634
|
+
"actor": "diego",
|
|
1635
|
+
"body": "Rebaseline — mezzanine change order",
|
|
1636
|
+
"is_active": true
|
|
1637
|
+
},
|
|
1638
|
+
{
|
|
1639
|
+
"at": "A-6T07:00",
|
|
1640
|
+
"action": "task.comment",
|
|
1641
|
+
"target": "task:bayside-sitework:3.3",
|
|
1642
|
+
"actor": "tom",
|
|
1643
|
+
"body": "High winds shut the crane two afternoons this week — roof steel and the framing inspection are running two days behind the mezzanine re-plan."
|
|
1644
|
+
},
|
|
1645
|
+
{
|
|
1646
|
+
"at": "A-2T14:00",
|
|
1647
|
+
"action": "task.comment",
|
|
1648
|
+
"target": "task:bayside-building:1.1",
|
|
1649
|
+
"actor": "nadia",
|
|
1650
|
+
"body": "Framing inspection is on the municipal calendar; electrical rough-in mobilizes three days ahead of the certificate so the fit-out project doesn't lose the overlap."
|
|
1651
|
+
},
|
|
1652
|
+
{
|
|
1653
|
+
"at": "A-2T14:15",
|
|
1654
|
+
"action": "risk.note",
|
|
1655
|
+
"target": "risk:structure-cascade",
|
|
1656
|
+
"actor": "sam",
|
|
1657
|
+
"body": "Program-level risk — the register has no program-level risk model yet, so it sits on Sitework, but it's really the cross-project edge above: electrical rough-in (Building 1.1) mobilizing three days ahead of the framing certificate. That -3 day lead already assumes the overlap in the contingency; widening it is the lever if the inspection date moves."
|
|
1658
|
+
},
|
|
1659
|
+
{
|
|
1660
|
+
"at": "A-2T14:30",
|
|
1661
|
+
"action": "risk.note",
|
|
1662
|
+
"target": "risk:electrical-inspection",
|
|
1663
|
+
"actor": "nadia",
|
|
1664
|
+
"body": "Rough-in mobilizes three days ahead of the framing certificate per the cross-project schedule above, which leaves no slack for a failed first inspection. Raising to mitigating; pre-walking the rough-in with the inspector before the formal call is the mitigation."
|
|
1665
|
+
},
|
|
1666
|
+
{
|
|
1667
|
+
"at": "A-3T07:30",
|
|
1668
|
+
"action": "task.comment",
|
|
1669
|
+
"target": "task:bayside-sitework:3.1",
|
|
1670
|
+
"actor": "tom",
|
|
1671
|
+
"body": "Final steel delivery hit the laydown yard this morning — crane picks resume at first light."
|
|
1672
|
+
},
|
|
1673
|
+
{
|
|
1674
|
+
"at": "A-1T10:45",
|
|
1675
|
+
"action": "risk.note",
|
|
1676
|
+
"target": "risk:weather",
|
|
1677
|
+
"actor": "sam",
|
|
1678
|
+
"body": "NWS is showing a hazardous-weather outlook over the site for the coming pour window on 2.3/2.4 — sustained gusts near the 25 mph trigger. Raising to mitigating; holding the pour a day if the outlook firms up rather than working through it, per the site calendar's weather allowance."
|
|
1679
|
+
},
|
|
1680
|
+
{
|
|
1681
|
+
"at": "A-1T11:00",
|
|
1682
|
+
"action": "risk.status",
|
|
1683
|
+
"target": "risk:weather",
|
|
1684
|
+
"actor": "sam",
|
|
1685
|
+
"to": "MITIGATING"
|
|
1686
|
+
},
|
|
1687
|
+
{
|
|
1688
|
+
"at": "A-5T10:00",
|
|
1689
|
+
"action": "task.comment",
|
|
1690
|
+
"target": "task:bayside-sitework:3.2",
|
|
1691
|
+
"actor": "tom",
|
|
1692
|
+
"body": "Leasing yard confirmed the tower crane goes back for its annual inspection mid-decking — that stand-down is on the site calendar now. Decking and the roof tail move with it, but framing has the float to carry it, so the occupancy date does not change."
|
|
1693
|
+
},
|
|
1694
|
+
{
|
|
1695
|
+
"at": "A-4T09:00",
|
|
1696
|
+
"action": "task.comment",
|
|
1697
|
+
"target": "task:bayside-building:2.5",
|
|
1698
|
+
"actor": "sam",
|
|
1699
|
+
"body": "Loaded the contract winter weather allowance onto the site calendar. It lands squarely on final inspection and handover, which is the thinnest float we have left, so the certificate of occupancy moves with it. Better to carry it in the plan than to argue it afterwards."
|
|
1700
|
+
},
|
|
1701
|
+
{
|
|
1702
|
+
"at": "A-4T09:15",
|
|
1703
|
+
"action": "risk.note",
|
|
1704
|
+
"target": "risk:commissioning-delay",
|
|
1705
|
+
"actor": "diego",
|
|
1706
|
+
"body": "Final inspection and handover is now the thinnest float on the project per the weather-allowance load above — commissioning has no room left to absorb its own slip on top of that. Watching the MEP rough-in finish dates most closely; that's what sets the earliest commissioning can start."
|
|
1707
|
+
},
|
|
1708
|
+
{
|
|
1709
|
+
"at": "A-4T09:30",
|
|
1710
|
+
"action": "risk.note",
|
|
1711
|
+
"target": "risk:subcontractor-default",
|
|
1712
|
+
"actor": "sam",
|
|
1713
|
+
"body": "No new signal this period — the bond is in place and the sub's payment applications are current. Leaving this open at probability 2 / impact 5 rather than closing it, since the bond transfers the financial exposure but not the 4-6 week schedule cost a replacement would carry."
|
|
1714
|
+
},
|
|
1715
|
+
{
|
|
1716
|
+
"at": "A-4T09:45",
|
|
1717
|
+
"action": "risk.note",
|
|
1718
|
+
"target": "risk:supply-chain",
|
|
1719
|
+
"actor": "nadia",
|
|
1720
|
+
"body": "Rooftop-unit vendor confirmed a ship date inside the 16-week quote — no trigger fired yet. Holding the alternate-manufacturer submittal ready in case that slips; the units still set after the building is dried in either way."
|
|
1721
|
+
},
|
|
1722
|
+
{
|
|
1723
|
+
"at": "A-59T09:30",
|
|
1724
|
+
"action": "task.ack",
|
|
1725
|
+
"target": "comment:east-soft-layer",
|
|
1726
|
+
"actor": "sam"
|
|
1727
|
+
},
|
|
1728
|
+
{
|
|
1729
|
+
"at": "A-46T10:30",
|
|
1730
|
+
"action": "task.ack",
|
|
1731
|
+
"target": "comment:footing-inspection-fail",
|
|
1732
|
+
"actor": "diego"
|
|
1733
|
+
},
|
|
1734
|
+
{
|
|
1735
|
+
"at": "A-43T09:30",
|
|
1736
|
+
"action": "task.react",
|
|
1737
|
+
"target": "comment:footing-reinspection-pass",
|
|
1738
|
+
"actor": "sam",
|
|
1739
|
+
"emoji": "👍"
|
|
1740
|
+
},
|
|
1741
|
+
{
|
|
1742
|
+
"at": "A-12T10:00",
|
|
1743
|
+
"action": "task.comment",
|
|
1744
|
+
"target": "task:bayside-sitework:3.2",
|
|
1745
|
+
"actor": "sam",
|
|
1746
|
+
"body": "@bayside-diego @bayside-raj re-estimate decking with the mezzanine framing in before we re-baseline — I want one change order, not two."
|
|
1747
|
+
},
|
|
1748
|
+
{
|
|
1749
|
+
"at": "A-5T11:00",
|
|
1750
|
+
"action": "task.comment",
|
|
1751
|
+
"target": "task:bayside-building:1.1",
|
|
1752
|
+
"actor": "raj",
|
|
1753
|
+
"body": "@bayside-nadia the crane inspection moves decking, which moves your rough-in start. Check the new date before you confirm the electrician."
|
|
1754
|
+
},
|
|
1755
|
+
{
|
|
1756
|
+
"at": "A-3T10:00",
|
|
1757
|
+
"action": "task.comment",
|
|
1758
|
+
"target": "task:bayside-building:1.2",
|
|
1759
|
+
"actor": "omar",
|
|
1760
|
+
"body": "Plumbing rough-in materials are staged. Waiting on the framing inspection like everyone else."
|
|
1761
|
+
},
|
|
1762
|
+
{
|
|
1763
|
+
"at": "A-2T09:00",
|
|
1764
|
+
"action": "task.comment",
|
|
1765
|
+
"target": "task:bayside-building:1.4",
|
|
1766
|
+
"actor": "tom",
|
|
1767
|
+
"body": "Rooftop units ship in two lots — the second lot lands the week after decking."
|
|
1768
|
+
},
|
|
1769
|
+
{
|
|
1770
|
+
"at": "A-1T10:00",
|
|
1771
|
+
"action": "task.comment",
|
|
1772
|
+
"target": "task:bayside-building:1.3",
|
|
1773
|
+
"actor": "diego",
|
|
1774
|
+
"body": "HVAC submittals came back approved as noted: two duct sizes change at the mezzanine."
|
|
1775
|
+
},
|
|
1776
|
+
{
|
|
1777
|
+
"at": "A-1T15:00",
|
|
1778
|
+
"action": "task.comment",
|
|
1779
|
+
"target": "task:bayside-building:1.5",
|
|
1780
|
+
"actor": "nadia",
|
|
1781
|
+
"body": "Booked the MEP inspector tentatively; I will firm it up once rough-in has a start date."
|
|
1782
|
+
},
|
|
1783
|
+
{
|
|
1784
|
+
"at": "A-56T08:10",
|
|
1785
|
+
"action": "task.note",
|
|
1786
|
+
"target": "task:bayside-sitework:2.1",
|
|
1787
|
+
"actor": "sam",
|
|
1788
|
+
"body": "Decision: over-excavate and backfill the east soft zone with engineered fill rather than redesign the footing. Accepts the excavation re-estimate and keeps the structural design unchanged.",
|
|
1789
|
+
"decision": true,
|
|
1790
|
+
"pinned": true
|
|
1791
|
+
},
|
|
1792
|
+
{
|
|
1793
|
+
"at": "A-13T09:10",
|
|
1794
|
+
"action": "task.note",
|
|
1795
|
+
"target": "task:bayside-sitework:3.2",
|
|
1796
|
+
"actor": "sam",
|
|
1797
|
+
"body": "Decision: the mezzanine goes in as one change order, with decking re-estimated and the schedule re-baselined against it.",
|
|
1798
|
+
"decision": true
|
|
1799
|
+
},
|
|
1800
|
+
{
|
|
1801
|
+
"at": "A-57T16:00",
|
|
1802
|
+
"action": "time.log",
|
|
1803
|
+
"target": "task:bayside-sitework:2.1",
|
|
1804
|
+
"actor": "omar",
|
|
1805
|
+
"minutes": 480,
|
|
1806
|
+
"note": "Over-excavation, east soft zone"
|
|
1807
|
+
},
|
|
1808
|
+
{
|
|
1809
|
+
"at": "A-44T15:30",
|
|
1810
|
+
"action": "time.log",
|
|
1811
|
+
"target": "task:bayside-sitework:2.2",
|
|
1812
|
+
"actor": "diego",
|
|
1813
|
+
"minutes": 360,
|
|
1814
|
+
"note": "Re-tie the north face to spec"
|
|
1815
|
+
},
|
|
1816
|
+
{
|
|
1817
|
+
"at": "A-5T10:30",
|
|
1818
|
+
"action": "task.block",
|
|
1819
|
+
"target": "task:bayside-building:1.4",
|
|
1820
|
+
"actor": "tom",
|
|
1821
|
+
"body": "The rooftop-unit manufacturer moved lot two's ship date out three weeks; no firm date until their next production slot is confirmed.",
|
|
1822
|
+
"blocker_type": "vendor"
|
|
1823
|
+
}
|
|
1824
|
+
]
|
|
1825
|
+
}
|