Program lifecycle: draft, active, sunset, archived

Every program on the Programs page carries one status: Draft, Active, Sunset, or Archived. That single field controls two things at once: what the program can do (whether franchisees can enroll aga…

9 min read·Updated July 14, 2026
On this page

What status controls

Every program on the Programs page carries one status: Draft, Active, Sunset, or Archived. That single field controls two things at once: what the program can do (whether franchisees can enroll against it, whether it counts toward the network totals in the hero) and where it physically shows up on the page (which of the three catalog rows renders its tile, or whether it disappears from the page entirely). This article walks through all four states, who can move a program between them, and exactly how status decides catalog placement. For what a program is and how the type-specific detail page works once you are inside one, see Programs.

Where to find it

Open Programs from the HQ sidebar at hq.verinode.ai/programs. The page opens on a hero panel, a row of type-filter tabs, and up to three rows of program tiles beneath it, one row per status. Above the tabs, admins see a Draft a program button; in the page header, admins also see a + New program button. Both create a new program in Draft status; neither is visible to non-admin HQ users, though non-admins can still see every row on the page read-only.

The type tabs read All, Vendors, Carriers, TPAs, Co-op, Training. Selecting one filters the tile rows to that type only; it does not change which status rows appear, it just narrows what is inside each one. Three of the eight program types (cert mandate, brand standard, safety) do not have their own tab yet; programs of those types still appear under All and inside the hero's network totals.

The hero panel

The hero's headline number is totalActive: the count of programs currently in Active status across the network (or across the filtered type, if a tab is selected). Beside it, a pill reads one of three things:

  • "{n} live" when at least one program is active.
  • "{n} in draft" when nothing is active yet but at least one draft exists.
  • "Nothing live" when there are no active or draft programs at all.

Under the headline, the sub-text reads "{n} approved part{y/ies} across the network · {n} franchisee enrollment{s}" once at least one program is active or drafted. Before that, on a brand-new network with nothing built yet, it reads the introductory line: "Programs let HQ codify what the network adopts, preferred vendors, carrier partnerships, TPA programs, training catalogs, and marketing co-op. Use the New program button to draft your first."

Three secondary tiles sit beside the headline:

  • Vendor approval, a count of programs of that type (any status except archived).
  • Carrier + TPA, the combined count of carrier and TPA programs.
  • Drafts, the total draft count network-wide, labeled "Pending activation."

These three counts are always network-wide totals, not filtered by the active type tab, so switching tabs narrows the tile rows below without changing the hero.

The four states

| Status | What it means | Who can set it | Where it shows on /programs | |---|---|---|---| | Draft | Created but not live. Nothing is enforced against franchisees yet. | Anyone with the admin role on the group, via + New program or Draft a program. | The Drafts row. | | Active | Live. Enrollment, KPI tracking, and audits run against it; it counts toward the hero's active total. | An HQ admin, moving the program out of Draft. | The Active row. | | Sunset | Wound down. The program keeps its history (approved parties, enrollments, audits) but is no longer being pushed as current. | An HQ admin, moving the program out of Active. | The Sunset row. | | Archived | Retired. Fully removed from the catalog view. | Reserved status; the network data has an archived_at column for it, but the Programs page does not currently expose a control to reach it. | Nowhere. Archived programs do not render in any of the three rows. |

Draft

A program is born in Draft. Two paths create one:

  1. + New program (header button, admin-only): a short modal asks for Type (a dropdown of Vendor approval program, Carrier program, TPA program, Marketing co-op, or Training, each with a one-line hint underneath), Name, and an optional Description. Below the fields, the modal states its defaults in plain text, for example "Defaults: enrollment approved_list · audit cadence annual · partner kind vendor. These flip later from the program detail surface." Saving requires a name; the system slugifies it and rejects a duplicate slug with "A program with the slug "x" already exists. Pick a different name."
  2. Draft a program (a guided three-step deck, admin-only, currently scoped to vendor-approval programs): step 1 picks the vendor area the program covers, step 2 asks what a vendor has to do to qualify (free-text priorities, which carriers it has to satisfy, what tools it needs to integrate with), and step 3 reviews the choices before creating the draft. Its own closing copy is explicit about the lifecycle: "Creates a draft program. Nothing goes live until you review the qualifying vendors and activate it."

Either way, the new row lands with status = 'draft' and appears on the Drafts row of the catalog (any HQ user can see it, not just admins). Each draft tile shows the program type as its label, the program name as its headline, the first 80 characters of its description as the sub-line (or "No description yet" if none was entered), and "Created {n} days ago" as its meta line. Clicking a draft tile opens its detail page, where an admin can add approved parties, build out the audit rubric or carrier KPI matrix, and generally get the program into a state worth going live with, all while it stays in Draft.

If there are no drafts, the row reads: "No programs in draft. Activate one from here when ready."

Note

Only vendor-approval programs get the guided Draft a program wizard today. Carrier, TPA, marketing co-op, and training programs are drafted through the shorter + New program modal.

Active

Moving a program from Draft to Active is restricted to the group admin role, the same gate that guards creation. Activating stamps activated_at to the moment it happens, which the catalog then uses to sort the Active row (most recently activated first) and to show "Activated {n} ago" on the tile instead of "Created {n} ago." It also flips the program into the count that drives the hero's headline number and its "{n} live" pill.

Status alone does not filter who can see the program, it filters what the program does. For a mandatory enrollment program (marketing co-op is the one shipped example), activation is what triggers every operator in the network to auto-attach an enrollment row. For an opt-in program (carrier, TPA, training), activation is what makes the program available for operators to self-attach from their own IQ Programs section; before that, there is nothing for them to opt into. For an approved-list program (vendor approval), activation does not move any existing approved parties, it just puts the program itself in front of the network as current.

On the Active row, each tile shows the type as its label, the program name as headline, and a sub-line built from whatever the program actually has: how many parties are approved, how many franchisees are enrolled, and how many of those are on probation, falling back to the program's description (or "Not yet wired up") when none of those numbers exist yet.

If there are no active programs (network-wide, or within the selected type tab), the row reads: "No active programs for this view. Activate a draft below or create a new program with the header affordance."

On the program's own detail page, the hero's status pill shows ACTIVE in green (the "expand" tone), and the primary headline switches to whichever count matters for that enrollment model, qualified approved parties for an approved-list program, or active enrollments for a mandatory/opt-in one.

Sunset

Sunsetting is the same admin-only gate as activation, applied in the other direction: an HQ admin moves a program from Active to Sunset. Nothing else changes automatically, existing approved parties, enrollments, audits, and violations all stay exactly as they were; sunset only removes the program from the Active row and drops it into its own Sunset row, and it stops counting toward the hero's active total.

On the catalog page, a sunset program's tile label reads "{Type} · Sunset" (for example, "Carrier program · Sunset"), with no meta line underneath. The sub-line still shows whatever counts the program has (approved parties, enrollments, probation), the same as an active tile, so you can see exactly what a sunset program still has attached to it.

If there are no sunset programs, the row reads simply: "No sunset programs."

On the program's own detail page, the status pill shows SUNSET in yellow (the "maintain" tone). The program's history stays fully readable, its approved parties, audit trail, and violations are all still there for reference, it just is not one HQ is actively pushing anymore.

Archived

Archived is the fourth value in the status field (the network data.status accepts draft, active, sunset, or archived), and the schema reserves an archived_at timestamp column for it. Structurally, it is meant to be the terminal state: the network rollup query that builds the catalog explicitly excludes archived programs (.neq("status", "archived")), both for the row-by-row tile list and for the hero's byType totals. In practice this means an archived program appears in none of the three catalog rows, not Active, not Draft, not Sunset, and does not count toward any of the hero's numbers. It is effectively invisible on /programs once it reaches that state.

How status decides catalog placement, at a glance

The Programs page never shows all programs in one list. It always splits them into (up to) three separate tile rows based on status, and the type tab you have selected narrows each row further:

  • Active row: status = 'active', optionally filtered to the selected type.
  • Drafts row: status = 'draft', optionally filtered to the selected type.
  • Sunset row: status = 'sunset', optionally filtered to the selected type.
  • Archived programs: excluded from the page entirely, in every view, regardless of type filter.

Clicking any tile, in any row, opens the same generic program detail page (for marketing co-op programs specifically, it redirects instead to the dedicated co-op ledger view). The detail page does not re-check status before rendering, so a program's full history stays reachable by direct link even after it moves to Sunset. Its hero pill just relabels itself to match whatever status the program is currently in.

Tip

If a program you expect to see is missing from every row, check whether someone sunset it (it would be in the Sunset row, not gone) versus whether it was truly archived (it would not be visible anywhere on the page). Sunset keeps a program's full audit and enrollment history one click away; archived removes it from view.

Heads up

Creating, activating, and sunsetting a program are all gated to the group admin role. An HQ user without the admin role can see every row on the Programs page and open any program's detail page, but the underlying actions return "Only group admins can create programs," "Only group admins can activate programs," or "Only group admins can sunset programs" if attempted without that role.

  • Programs, the full picture of what a program is and how the type-specific detail page works.
  • Standards, for the brand-standard side of program authoring.
  • Compliance, for how audits and violations roll up once a program is active.
  • Network health, for how program enrollment and probation feed the broader network picture.
Was this helpful?