Internal Documentation internal
TalkIDE internal documentation

Users can create, view, edit, archive, restore, and permanently delete projects. Archived projects are hidden from the main list but remain accessible in a filtered view. Projects progress through a defined lifecycle from DRAFT to PUBLISHED, with UPDATED representing unpublished local changes.

Naming: stav LIVE byl v ADR-022 (Stopa B.7) přejmenován na PUBLISHED — konzistence se semver “publish” terminologií. Kompletní design publish flow viz ADR-022 a Version Lifecycle Flow.

Project Status Lifecycle

stateDiagram-v2
    [*] --> DRAFT: Project created

    DRAFT --> BUILDING: User clicks Publish (first deploy)
    BUILDING --> PUBLISHED: Build + deploy succeeds
    BUILDING --> DRAFT: Build fails (project was never PUBLISHED)
    BUILDING --> UPDATED: Build fails (project was previously PUBLISHED)

    PUBLISHED --> UPDATED: New commit detected (post-commit hook, automatic)
    UPDATED --> BUILDING: User clicks Publish (update deploy)

    PUBLISHED --> PAUSED: User pauses project
    PAUSED --> PUBLISHED: User resumes project

    DRAFT --> ARCHIVED: User archives
    BUILDING --> ARCHIVED: User archives
    PUBLISHED --> ARCHIVED: User archives
    UPDATED --> ARCHIVED: User archives
    PAUSED --> ARCHIVED: User archives

    ARCHIVED --> DRAFT: User restores (previously DRAFT)
    ARCHIVED --> PUBLISHED: User restores (previously PUBLISHED)
    ARCHIVED --> PAUSED: User restores (previously PAUSED)
    ARCHIVED --> UPDATED: User restores (previously UPDATED)

States

StateDescriptionTransitions
DRAFTProject created but never deployed. User can make changes via conversations or editor; status stays DRAFT until user clicks Publish.BUILDING (Publish), ARCHIVED (Archive)
BUILDINGActive build + deploy process in progress. Progress tracking available (stub: always 0 in MVP).PUBLISHED (success), DRAFT (fail, never PUBLISHED), UPDATED (fail, was PUBLISHED), ARCHIVED (Archive)
PUBLISHEDDeployed to PROD and accessible at {slug}.talkide.app.UPDATED (automatic, on first new commit), PAUSED (Pause), ARCHIVED (Archive)
UPDATEDWas previously PUBLISHED, but has unpublished commits. Like a git working tree with new commits ahead of the production tag. User can continue making changes; status stays UPDATED until Publish.BUILDING (Publish), ARCHIVED (Archive)
PAUSEDTemporarily stopped by user. Can be resumed.PUBLISHED (Resume), ARCHIVED (Archive)
ARCHIVEDSoft-deleted. Not visible in default project list. Can be restored to previous status or permanently deleted.Previous status (Restore), permanent deletion (Delete)
stateDiagram-v2
    [*] --> PROJECT_LIST: User opens dashboard

    PROJECT_LIST --> PROJECT_DETAIL: User opens a project
    PROJECT_DETAIL --> PROJECT_LIST: User navigates back

    PROJECT_LIST --> ARCHIVED_LIST: User switches to archived view
    ARCHIVED_LIST --> PROJECT_LIST: User switches back

    PROJECT_DETAIL --> CONFIRM_ARCHIVE: User clicks "Archive"
    CONFIRM_ARCHIVE --> ARCHIVED_LIST: Confirmed

    ARCHIVED_LIST --> CONFIRM_RESTORE: User clicks "Restore"
    CONFIRM_RESTORE --> PROJECT_LIST: Confirmed

    ARCHIVED_LIST --> CONFIRM_DELETE: User clicks "Delete Permanently"
    CONFIRM_DELETE --> ARCHIVED_LIST: Confirmed

Business Rules

  • The default project list shows all non-ARCHIVED projects (DRAFT, BUILDING, PUBLISHED, UPDATED, PAUSED).
  • Archived projects are shown only when explicitly filtered by status=ARCHIVED.
  • Only ARCHIVED projects can be permanently deleted. Non-archived projects must be archived first.
  • Deleting a project is permanent and removes all conversations, messages, versions, and associated data (DB CASCADE).
  • A confirmation dialog is shown before archive, restore, and delete actions.
  • The transition PUBLISHED → UPDATED happens automatically when a new commit is detected (git post-commit hook on user, Mara, or Kai commit) — it is not a user-initiated action on the project entity. Bot bump commits ([skip-bump] marker) are excluded.
  • The transition DRAFT/UPDATED → BUILDING is triggered by an explicit “Publish” action by the user (POST /api/v1/projects/{slug}/publish). Hosting billing status (hosting_billing_account.status) is validated before transition — SUSPENDED account returns 402 HOSTING_BUDGET_EXCEEDED. (Note: legacy hostingCreditUsd prepaid check removed in be#142 — hosting is postpaid-only, DP-7.)
  • Concurrent Publish protection: status := BUILDING is set in a transaction with the precondition status IN (DRAFT, PUBLISHED, UPDATED) — a second concurrent Publish click returns 409 CONFLICT_PROJECT_STATUS.
  • Archived projects cannot start new conversations and cannot accept new commits (editor commit gesture is disabled).
  • The previous_status field tracks the status before archiving, enabling correct restoration. Supports all non-ARCHIVED states including PUBLISHED and UPDATED.
  • DEV preview URL ({projectUuid}.talkide.app) remains available regardless of project status (except ARCHIVED) — independent of PROD publish lifecycle.

Was this page helpful?

Thanks for the feedback.