> ## Documentation Index
> Fetch the complete documentation index at: https://docs.crewship.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Artifacts configuration

> Turn on Artifacts surfaces: workspace feature flags, instance startup switches and build-time UI variables, with one matrix per screen.

# Artifacts configuration

Every Artifacts surface beyond the classic Page list is **off by default**. A
surface appears only when each layer it depends on is switched on:

| Layer | Where it is set | When it takes effect | Scope |
| - | - | - | - |
| Workspace feature flag | `crewship feature-flag enable <key>` | Immediately | One workspace (or the instance default) |
| Server environment bypass | A `CREWSHIP_*_ENABLED` variable listed under [bypasses](#server-environment-bypasses) | Server restart | Every workspace on the instance |
| Instance startup switch | YAML config or `CREWSHIP_*_ENABLED` | Server restart | The whole instance |
| Build-time UI variable | `NEXT_PUBLIC_*` when the web UI is built | Rebuild and redeploy the UI | Every user of that build |

The server layers decide whether an endpoint answers. The build-time layer
decides whether the web UI shows the screen at all. A screen whose UI variable
is off stays hidden even when the workspace flag is on, and a screen whose UI
variable is on shows nothing until the server reports the feature available.

## Which switches each screen needs

| Screen | Build-time UI variable | Workspace flag | Instance switch |
| - | - | - | - |
| Artifacts library at `/artifacts`; the **Artifacts** sidebar link opens `/artifacts` instead of `/pages` | `NEXT_PUBLIC_ARTIFACTS_LIBRARY` | — | — |
| Old `/pages` addresses open the Artifacts library or the artifact at `/artifacts/<id>` | `NEXT_PUBLIC_ARTIFACTS_LIBRARY` | — | — |
| Artifact project cards and the side viewer in chat | `NEXT_PUBLIC_CHAT_ARTIFACT_PROJECTS` | `artifact_projects` | — |
| Dashboard with live data | `NEXT_PUBLIC_ARTIFACT_DASHBOARDS` and `NEXT_PUBLIC_CHAT_ARTIFACT_PROJECTS`; also `NEXT_PUBLIC_ARTIFACTS_LIBRARY` for the library route | `artifact_projects` and `artifact_dashboard_data` | — |
| Slides artifact preview and PDF export | `NEXT_PUBLIC_ARTIFACT_SLIDES` and `NEXT_PUBLIC_CHAT_ARTIFACT_PROJECTS`; also `NEXT_PUBLIC_ARTIFACTS_LIBRARY` for the library route | `artifact_projects` and `artifact_slides` | — |
| Design canvas | `NEXT_PUBLIC_ARTIFACTS_DESIGN` | `artifacts_design` | — |
| Design prototype playback (**Play**, **Link to screen**) | `NEXT_PUBLIC_ARTIFACTS_DESIGN` and `NEXT_PUBLIC_ARTIFACTS_DESIGN_PROTOTYPE` | `artifacts_design` | — |
| Design text style controls in **Properties** | `NEXT_PUBLIC_ARTIFACTS_DESIGN` and `NEXT_PUBLIC_ARTIFACTS_DESIGN_TEXT_STYLE` | `artifacts_design` | — |
| Design hide and lock buttons in **Layers** | `NEXT_PUBLIC_ARTIFACTS_DESIGN` and `NEXT_PUBLIC_ARTIFACTS_DESIGN_HIDE_LOCK` | `artifacts_design` | — |
| Design shape style (corner radius, stroke) in **Properties** | `NEXT_PUBLIC_ARTIFACTS_DESIGN` and `NEXT_PUBLIC_ARTIFACTS_DESIGN_SHAPE_STYLE` | `artifacts_design` | — |
| Craft edit lease bar and draft recovery in chat | `NEXT_PUBLIC_CHAT_CRAFT_LEASE` | — | `craft_native.enabled` with a Word or Sheet profile |
| Native Craft Word or Sheet editor at `/pages/craft/editor` and **New Doc** for native documents | — | — | `craft_native.enabled` with a qualified profile for that application |
| Creating a Word document (Docs) | — | — | `documents.enabled` |
| Live workbook editing | — | `gridcraft_editor` | `gridcraft.enabled` and `gridcraft.editor_enabled` |
| Native Slides editor on a Page | `NEXT_PUBLIC_SLIDES_EDITOR` | — | `slides.enabled` |

Dashboard and Slides project-backed previews need
`NEXT_PUBLIC_CHAT_ARTIFACT_PROJECTS` as well as their own UI variable. The
Artifacts library additionally needs `NEXT_PUBLIC_ARTIFACTS_LIBRARY`; enabling
the library alone does not enable project-backed previews. `NEXT_PUBLIC_ARTIFACTS_DESIGN` alone also opens `/artifacts`, so a
Design-only build can reach the canvas. Without either library variable, a saved
`/artifacts` link falls back to `/pages`. Artifacts is the main place for this
work: with the library on, old `/pages` addresses lead there too (see
[Pages addresses](https://docs.crewship.ai/guides/artifacts.md#one-address-per-artifact)).

## Workspace feature flags

These flags are stored in the database. Each one is created by a migration with
its instance default **off**, so upgrading an existing instance never turns a
surface on. A migration that runs again leaves a changed default alone. The one
exception is `artifact_projects`: Projects are a supported default, and a later
migration turns its instance default **on** unless an administrator had already
changed it (see [Turning Projects off](#turning-projects-off)).

| Key | Instance default | Turns on | Also needs |
| - | - | - | - |
| `artifact_projects` | **on** | Multi-screen HTML artifact projects with immutable versions and anchored comments, their availability check, and the artifact project cards in chat | — |
| `artifact_dashboard_data` | off | Dashboard datasets and reader-scoped data for Dashboard artifacts | `artifact_projects` |
| `artifact_slides` | off | Read-only Slides projections of an artifact version and vector PDF export | `artifact_projects` |
| `artifacts_design` | off | Collaborative Design artifacts | — |
| `gridcraft_editor` | off | Live workbook editing: editor sessions, cell edits and the commits feed | Instance switches `gridcraft.enabled` and `gridcraft.editor_enabled` |

The server resolves a flag in this order: the server environment bypass forces
it on, then a workspace override wins, then the instance default applies. A key
that does not exist reads as off. The flag check reads only the on/off value: the `percentage`
column shown by `crewship feature-flag list` does not change the result for
these keys.

Turn a flag on for the current workspace (OWNER or ADMIN). Select the
workspace with `--workspace <workspace-id>` or `CREWSHIP_WORKSPACE`:

```bash theme={null}
crewship feature-flag enable artifact_slides
crewship feature-flag enable artifact_dashboard_data
```

Return the workspace to the instance default, or turn it off explicitly:

```bash theme={null}
crewship feature-flag inherit artifact_slides
crewship feature-flag disable artifact_slides
```

Change the instance default for every workspace without an override. `--enabled`
is a boolean flag, so turning the default back off needs `--enabled=false`:

```bash theme={null}
crewship feature-flag update artifacts_design --enabled
crewship feature-flag update artifacts_design --enabled=false
```

Only an **instance administrator** may change a default: the account named by
`CREWSHIP_OWNER_EMAIL` on the server, or anyone named with
[`crewship admin instance add-admin`](https://docs.crewship.ai/cli/admin#crewship-admin-instance).
Being OWNER or ADMIN of a workspace is not enough; that role can only set the
workspace override.

The same operations are available as `PUT` and `DELETE`
`/api/v1/feature-flags/{key}/override` and `PATCH /api/v1/feature-flags/{key}`.
See [`crewship feature-flag`](https://docs.crewship.ai/cli/feature-flag) and the
[Feature flags API](https://docs.crewship.ai/api-reference/feature-flags.md).

### Turning Projects off

`artifact_projects` is on by default. Turning it off hides Projects; it does not
delete them. While it is off, the project routes answer `404`
(`artifact projects are not enabled`) and
`crewship page artifact availability` reports `{"enabled": false}`. Turning it
back on shows the existing projects and versions again.

For one workspace (OWNER or ADMIN of that workspace):

```bash theme={null}
crewship feature-flag disable artifact_projects --workspace <workspace-id>
crewship feature-flag inherit artifact_projects --workspace <workspace-id>   # back to the instance default
```

For every workspace without an override (instance administrator):

```bash theme={null}
crewship feature-flag update artifact_projects --enabled=false
crewship feature-flag update artifact_projects --enabled                     # on again
```

A workspace override wins over the instance default in both directions, so a
workspace that ran `enable` stays on after the instance default goes off.
`CREWSHIP_ARTIFACT_PROJECTS_ENABLED=true` forces Projects on for every workspace
and overrides both; leave it unset to let the flags decide.

**Upgrading from an earlier release.** Migration
`20261105094324_artifact_projects_default_on` turns the instance default on only
where the flag is still the untouched seed from
`20261027175100_artifact_project_comments`. If an administrator ever changed the
instance flag (`crewship feature-flag update`, `PATCH
/api/v1/feature-flags/artifact_projects` or a manifest apply), or deleted or
recreated it, the upgrade keeps that choice. Workspace overrides are not
touched: a workspace that was turned off stays off.

### Server environment bypasses

Four flags have a server environment variable that turns the feature on for
**every workspace** on the instance, whatever the database says. Use them for a
single-tenant or demo instance. The value must be exactly `true`; `1` is not
accepted.

| Variable | Same effect as |
| - | - |
| `CREWSHIP_ARTIFACT_PROJECTS_ENABLED` | `artifact_projects` |
| `CREWSHIP_ARTIFACT_DASHBOARD_DATA_ENABLED` | `artifact_dashboard_data` |
| `CREWSHIP_ARTIFACT_SLIDES_ENABLED` | `artifact_slides` |
| `CREWSHIP_ARTIFACTS_DESIGN_ENABLED` | `artifacts_design` |

The Dashboard data and Slides bypasses do not imply `artifact_projects`: that
flag, or its bypass, must still be on for the workspace. `gridcraft_editor` has
no bypass. A bypass cannot be turned off per workspace; remove the variable and
restart the server instead.

## Instance startup switches

These switches are read once when the server starts. Set them in the
[YAML configuration](https://docs.crewship.ai/configuration/yaml-config.md) file or as environment
variables; an environment variable overrides the YAML value. Boolean switches
accept `true` or `1`. Change them only with a restart. A switch that is off
removes or refuses its routes for every workspace.

The startup settings below have YAML keys. Workspace flags and their server
environment bypasses are separate mechanisms, and `NEXT_PUBLIC_*` variables
are build inputs, not YAML settings. This template needs real qualified engine
and bundle pins, installed bundles and running private services; it is not a
self-contained deployment:

```yaml theme={null}
documents:
  enabled: true
  authority_socket: /run/crewship/documents-authority.sock
  service_socket: /run/crewship/documents-service.sock
  service_token_file: /etc/crewship/documents-service.token
  max_documents_per_workspace: 128
  max_operations_per_window: 10000
  operation_window_seconds: 600
gridcraft:
  enabled: true
  editor_enabled: true
  service_socket: /run/crewship/gridcraft-service.sock
  service_token_file: /etc/crewship/gridcraft-service.token
  editor_bundle_dir: /opt/crewship/editor-bundles
  editor_bundles:
    - <bundle-sha256>
slides:
  enabled: true
mooring:
  enabled: true
  commands_enabled: false
craft_native:
  enabled: true
  agents_enabled: false
  editor_bundle_dir: /opt/crewship/editor-bundles
  profiles:
    wordcraft:
      application: wordcraft
      engine_revision: <engine-revision>
      cli_path: /opt/crewship/bin/wordcraft
      cli_sha256: <cli-sha256>
      editor_bundle: <bundle-sha256>
      editor_url: /_editor/b/<bundle-sha256>/index.html
```

| YAML key | Environment variable | Default | What it starts |
| - | - | - | - |
| `craft_native.enabled` | `CREWSHIP_CRAFT_NATIVE_ENABLED` | off | The per-Page Craft session and edit lease API for Pages that already use the whole-native profile; existing Pages are never converted. A Word or Sheet editor, native New Doc and `wordcraft_native` / `gridcraft_native` in the document status need a qualified profile for that application. |
| `craft_native.agents_enabled` | `CREWSHIP_CRAFT_NATIVE_AGENTS_ENABLED` | off | Agent editing in native Craft documents |
| `documents.enabled` | `CREWSHIP_DOCUMENTS_ENABLED` | off | The Docs (Word) document engine and document creation |
| `gridcraft.enabled` | `CREWSHIP_GRIDCRAFT_ENABLED` | off | The workbook (Sheet) engine; requires `service_socket` and `service_token_file` |
| `gridcraft.editor_enabled` | `CREWSHIP_GRIDCRAFT_EDITOR_ENABLED` | off | The live workbook editor. Requires `gridcraft.enabled` and the `gridcraft_editor` workspace flag. |
| `slides.enabled` | `CREWSHIP_SLIDES_ENABLED` | off | Native Slides read and initialize routes. See [Native Slides](https://docs.crewship.ai/guides/slides-native.md). |
| `mooring.enabled` | `CREWSHIP_MOORING_ENABLED` | off | Live collaborative editing transport. See [the Mooring spec](https://docs.crewship.ai/specs/mooring-session-transport). |
| `mooring.commands_enabled` | `CREWSHIP_MOORING_COMMANDS_ENABLED` | off | Command delivery over Mooring. Requires `mooring.enabled`. |

### Native Craft profiles

Native Craft runs only operator-qualified releases. Each application profile is
pinned at startup; requests cannot override it. In YAML a profile sits under
`craft_native.profiles.wordcraft` (Word) or `craft_native.profiles.gridcraft`
(Sheet), and its `application` must repeat that key. As environment variables,
`<APP>` is `WORD` (Word) or `GRID` (Sheet):

| YAML key | Variable | Meaning |
| - | - | - |
| `craft_native.editor_bundle_dir` | `CREWSHIP_CRAFT_NATIVE_EDITOR_BUNDLE_DIR` | Clean absolute directory that holds the qualified editor bundles |
| `engine_revision` | `CREWSHIP_CRAFT_NATIVE_<APP>_ENGINE_REVISION` | Engine revision of the qualified release |
| `cli_path` | `CREWSHIP_CRAFT_NATIVE_<APP>_CLI_PATH` | Absolute path of the engine command-line tool |
| `cli_sha256` | `CREWSHIP_CRAFT_NATIVE_<APP>_CLI_SHA256` | SHA-256 of that tool |
| `editor_bundle` | `CREWSHIP_CRAFT_NATIVE_<APP>_EDITOR_BUNDLE` | SHA-256 digest of the editor bundle |
| `editor_url` | `CREWSHIP_CRAFT_NATIVE_<APP>_EDITOR_URL` | Server-owned editor URL for that bundle: `/_editor/b/<bundle-sha256>/index.html`, or `https://<editor-origin>/b/<bundle-sha256>/index.html` with a dedicated editor origin |

The full names are `CREWSHIP_CRAFT_NATIVE_WORD_ENGINE_REVISION`,
`CREWSHIP_CRAFT_NATIVE_WORD_CLI_PATH`, `CREWSHIP_CRAFT_NATIVE_WORD_CLI_SHA256`,
`CREWSHIP_CRAFT_NATIVE_WORD_EDITOR_BUNDLE`, `CREWSHIP_CRAFT_NATIVE_WORD_EDITOR_URL`,
and the same five with `GRID` for Sheet. The server does not start when a
native pin is invalid. When legacy GridCraft editing or Mooring is also enabled,
`gridcraft.editor_bundle_dir` must explicitly equal
`craft_native.editor_bundle_dir`, as in the template. GridCraft also requires
its distinct clean absolute service socket and token-file paths (at most 100
bytes each); enabling its two booleans alone fails validation. The native and
legacy editor bundles together
may name at most four pins. The qualification rules are in the
[Craft native spec](https://docs.crewship.ai/specs/craft-native).

### Docs engine settings

`documents.enabled` needs three clean absolute paths of at most 100 bytes each,
all different from one another. The service token must be a regular file with
mode `0600`. The Docs engine needs Unix sockets, so it does
not start on Windows.

| YAML key (under `documents`) | Variable | Default | Meaning |
| - | - | - | - |
| `authority_socket` | `CREWSHIP_DOCUMENTS_AUTHORITY_SOCKET` | — | Socket of the private document authority |
| `service_socket` | `CREWSHIP_DOCUMENTS_SERVICE_SOCKET` | — | Socket of the document engine service |
| `service_token_file` | `CREWSHIP_DOCUMENTS_SERVICE_TOKEN_FILE` | — | File with the service token |
| `max_documents_per_workspace` | `CREWSHIP_DOCUMENTS_MAX_DOCUMENTS_PER_WORKSPACE` | 128 | Documents allowed per workspace |
| `max_operations_per_window` | `CREWSHIP_DOCUMENTS_MAX_OPERATIONS_PER_WINDOW` | 10000 | Saved operations per document per window |
| `operation_window_seconds` | `CREWSHIP_DOCUMENTS_OPERATION_WINDOW_SECONDS` | 600 | Length of that window, at most 86400 |

A limit set to `0` uses the default. With `documents.enabled`, a negative or
non-numeric limit stops the server from starting.

The workbook engine and editor use `CREWSHIP_GRIDCRAFT_SERVICE_SOCKET`,
`CREWSHIP_GRIDCRAFT_SERVICE_TOKEN_FILE`, `CREWSHIP_GRIDCRAFT_EDITOR_BUNDLE_DIR`,
`CREWSHIP_GRIDCRAFT_EDITOR_BUNDLES` and `CREWSHIP_EDITOR_RUNTIME_ORIGIN`
(YAML `gridcraft.service_socket`, `service_token_file`, `editor_bundle_dir`,
`editor_bundles` and `editor_origin`); see
[Environment variables](https://docs.crewship.ai/configuration/environment.md).

## Page limit

A workspace may hold at most 100 pages by default (archived pages count). Pages, Designs, artifact projects, Documents and
Workbooks all check the same limit and, when it is reached, refuse with `422` `pages_limit` and a message that states the
limit. It is not an environment variable or YAML key: an instance administrator sets it at runtime (10 to 10000) and the
value is kept in the database. Lowering it never deletes pages; it only blocks new ones.

```bash theme={null}
crewship admin instance page-limit get
crewship admin instance page-limit set 250
```

Pages marked as test items (`created_by_test`) still count toward the limit; excluding them is a possible follow-up. See
[Admin API](https://docs.crewship.ai/api-reference/admin.md) and [Admin CLI](https://docs.crewship.ai/cli/admin.md).

## Artifact storage limits

Every artifact family (versions, proposals, Design, Data, documents, Slides, GridCraft and Mooring) counts against one
aggregate budget: 32 GiB per workspace and 64 GiB per instance by default. When a limit is reached, writes are refused
with `413` `artifact_storage_quota` and nothing is deleted to make room. These are not environment variables or YAML keys: an
instance administrator sets them at runtime and the values are kept in the database.

```bash theme={null}
crewship admin instance artifact-storage get
crewship admin instance artifact-storage set --workspace-limit 16GiB --instance-limit 48GiB
```

Limits must be between 1 MiB and 1 PiB. Lowering a limit below current usage only refuses further growth. The counters are
maintained by database triggers; after a restore, or if `get` disagrees with what is stored, rebuild them with
`crewship admin instance artifact-storage recompute` (add `--dry-run` to preview the drift). It never deletes data. See
[Admin API](https://docs.crewship.ai/api-reference/admin.md) and [Admin CLI](https://docs.crewship.ai/cli/admin.md).

## Build-time UI variables

The web UI is a static export, so these variables are inlined when it is built.
Export them before `pnpm build` (or `make build`, which runs it) and deploy the
new binary with its embedded UI; changing them on a running server has no effect. Each one is on
only when its value is exactly `true`.

| Variable | Default | Shows |
| - | - | - |
| `NEXT_PUBLIC_ARTIFACTS_LIBRARY` | off | The Artifacts library at `/artifacts`. The **Artifacts** sidebar link is always shown; with this variable it opens `/artifacts` instead of `/pages`. |
| `NEXT_PUBLIC_ARTIFACTS_SERVER_CATALOG` | off | Pages the library's All view on the server (search, kind, privacy, version and folder filters, sort and paging of `GET /api/v1/pages`). Views and owner filters the server cannot express stay in the browser. Needs `NEXT_PUBLIC_ARTIFACTS_LIBRARY`. |
| `NEXT_PUBLIC_CHAT_ARTIFACT_PROJECTS` | off (`false` in `.env.production`) | Artifact project cards and the side viewer in chat |
| `NEXT_PUBLIC_CHAT_CRAFT_LEASE` | off (`false` in `.env.production`) | The Craft edit lease bar and local draft recovery in chat |
| `NEXT_PUBLIC_ARTIFACT_DASHBOARDS` | off | Live data previews in Dashboard artifacts, inside the library or the chat and Page viewer. No data requests while off. |
| `NEXT_PUBLIC_ARTIFACT_SLIDES` | off | Slides previews of artifact versions, inside the library or the chat and Page viewer |
| `NEXT_PUBLIC_ARTIFACTS_DESIGN` | off | The Design canvas |
| `NEXT_PUBLIC_ARTIFACTS_DESIGN_PROTOTYPE` | off | Prototype playback of linked Design screens: the **Play** button and the **Link to screen** field. Needs `NEXT_PUBLIC_ARTIFACTS_DESIGN`. |
| `NEXT_PUBLIC_ARTIFACTS_DESIGN_TEXT_STYLE` | off | Text style controls (font, weight, size, line height, alignment, wrap, clip) in Design **Properties**. Needs `NEXT_PUBLIC_ARTIFACTS_DESIGN` and a server with #5161; stored text style is drawn either way. |
| `NEXT_PUBLIC_ARTIFACTS_DESIGN_HIDE_LOCK` | off | Hide and lock buttons per layer in Design **Layers**. Needs `NEXT_PUBLIC_ARTIFACTS_DESIGN` and a server with #5218; stored hidden and locked layers are honoured either way. |
| `NEXT_PUBLIC_ARTIFACTS_DESIGN_SHAPE_STYLE` | off | Corner radius and stroke controls for Design rectangles and images in **Properties**. Needs `NEXT_PUBLIC_ARTIFACTS_DESIGN` and a server with #5219; stored shape style is drawn and exported either way. |
| `NEXT_PUBLIC_ARTIFACT_DESIGN_SYSTEM` | off | Read-only Design System token preview in the artifact viewer |
| `NEXT_PUBLIC_SLIDES_EDITOR` | off | The native Slides editor on a Page that has Slides. Edits stay a local draft. |
| `NEXT_PUBLIC_DOCUMENT_REVIEW_ACTIONS` | off | Development only. Leave off: the server does not serve the revert and proposal endpoints this client calls. |
| `NEXT_PUBLIC_CHAT_ARTIFACT_CONTEXT` | off | Development only. Leave off. |
| `NEXT_PUBLIC_ARTIFACT_COPY_MOVE` | off | Development only. Leave off. |
| `NEXT_PUBLIC_STATIC_APP_PREVIEW` | off | Development only. Leave off. |
| `NEXT_PUBLIC_ARTIFACTS_SHARING_MOCK` | off | Development only: runs library sharing against an in-browser mock. Never enable in a deployment. |

The repository's `.env.production` sets `NEXT_PUBLIC_CHAT_ARTIFACT_PROJECTS`
and `NEXT_PUBLIC_CHAT_CRAFT_LEASE` to `false` explicitly, and none of the
other variables. A default production build therefore hides every screen in the
matrix above that needs a build-time variable.

The build-profile line of that file names the profile, and the tests in
`lib/__tests__/build-profile.test.ts` and `lib/__tests__/feature-flags.test.ts`
hold it to one of three shapes:

| Profile | Where | Rule |
| - | - | - |
| `main` | `main`, every pull request to `main` and the merge queue | Release and unaccepted flags off |
| `release` | A release branch | Release flags on, unaccepted flags (Dashboards, Slides, Design System) off |
| `preview:<name>` | A shared development slot, never `main` | `.env.production` equals the declared `e2e/preview-profiles/<name>.env`, key for key and value for value |

A declared preview is reviewed like any other change. A branch built for the
slot carries it as `.env.production` unchanged, in a commit of its own.
`e2e/preview-profiles/dev2.env` is the dev2 preview. Code bound for `main` must
carry the `main` profile; an unknown ref counts as bound for `main`. CI on `main`
checks only the `main` profile; a release or preview profile is checked by the
same tests on its own branch.

These checks cover the checked-in file only. Values exported in the build
environment take precedence over that file, so a build that exports flags is
outside them:

```bash theme={null}
export NEXT_PUBLIC_ARTIFACTS_LIBRARY=true
export NEXT_PUBLIC_CHAT_ARTIFACT_PROJECTS=true
export NEXT_PUBLIC_ARTIFACT_DASHBOARDS=true
export NEXT_PUBLIC_ARTIFACT_SLIDES=true
export NEXT_PUBLIC_ARTIFACTS_DESIGN=true
make build
```

## Check what is on

List the workspace flags with their instance default, override and effective
value (columns abridged):

```bash theme={null}
crewship feature-flag list
```

```text theme={null}
KEY                      DEFAULT  WORKSPACE  EFFECTIVE
artifact_dashboard_data  off      on         on
artifact_projects        on       inherit    on
artifact_slides          off      on         on
artifacts_design         off      on         on
gridcraft_editor         off      inherit    off
```

Ask the server whether artifact projects are available to the current
workspace (`GET /api/v1/pages/artifacts/availability`). The answer includes the
environment bypass:

```bash theme={null}
crewship page artifact availability
```

```json theme={null}
{ "enabled": true }
```

Add `--agent <id>` (query `agent_id`) to ask whether that agent's crew may
create artifact projects under the workspace artifact-creation policy. The
answer then also carries `can_create`; a crew outside the policy returns
`can_create: false` with `code: "artifact_crew_not_allowed"`, and the chat
composer hides Project creation for that agent:

```bash theme={null}
crewship page artifact availability --agent <agent-id>
```

```json theme={null}
{ "enabled": true, "can_create": false, "code": "artifact_crew_not_allowed" }
```

Ask which document engines the instance serves (`GET /api/v1/documents/status`):

```bash theme={null}
crewship doc status
```

```json theme={null}
{"enabled":false,"gridcraft_native":false,"wordcraft_native":false}
```

`enabled` is true when the Docs engine is running. `wordcraft_native` and
`gridcraft_native` are true when native Craft is on with a qualified Word or
Sheet profile. A successful answer is not enough: the web UI offers **New Doc**
only when at least one of `enabled`, `wordcraft_native` or `gridcraft_native`
is `true` (or a separately qualified Mooring Word integration is available). The response above,
with every value `false`, offers nothing.

`gridcraft_native` reports the native Sheet profile, not the legacy live workbook
editor. Check that editor by opening an existing workbook with its workspace
flag enabled; `doc status` does not certify the legacy worker service.

## Upgrades

The flags on this page arrive through ordinary migrations and start off, except
`artifact_projects`, whose instance default an upgrade turns on unless an
administrator had changed it (see [Turning Projects off](#turning-projects-off)).
For the other surfaces, nothing changes for users until you enable the flags,
set the startup switches and deploy a UI build with the matching variables.

To roll a surface back, undo it in the layer that turned it on. Stored
artifacts stay in the database in every case.

| Turned on by | Roll back with |
| - | - |
| Workspace override | `crewship feature-flag disable <key>`, or `inherit <key>` when the instance default is off |
| Instance default | `crewship feature-flag update <key> --enabled=false` (instance administrator) |
| Server environment bypass | Remove the `CREWSHIP_*_ENABLED` variable and restart the server; per-workspace flags cannot override it |
| Instance startup switch | Set it to `false` in YAML or the environment and restart the server |
| Build-time UI variable | Rebuild the UI without it and deploy the build |


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.