Commit 5e66e32
Update state-backed component skill reference docs for clarity and accuracy (#22134)
Reorganize and expand state-backed component reference documentation in
the dagster-expert skill to reflect actual Dagster+ behavior and
operational details. The original docs were written from an OSS-first
perspective and omitted critical information about how the system works
in production on Dagster+.
## Key Changes
- Fixed DbtProjectComponent description to accurately explain
`shutil.copytree` behavior instead of misleading "writes manifest, reads
with dbt's manifest parser" text
- Reorganized VERSIONED_STATE_STORAGE into Dagster+ (automatic S3) and
OSS/self-hosted (manual configuration) distinct sections
- Added state storage availability section clarifying all processes
require DefsStateStorage access
- Added programmatic state refresh pattern showing how to trigger state
updates independently of deploys via custom jobs
- Added code location reload behavior section distinguishing Dagster+
(pinned versions, needs explicit refresh) from OSS (reads latest on
reload) with GraphQL mutation example
<details>
<summary>Files Changed</summary>
### Modified (4 files)
-
`public/skills/skills/dagster-expert/skills/dagster-expert/references/asset-selection.md`
- Formatting improvement (blank line)
-
`public/skills/skills/dagster-expert/skills/dagster-expert/references/components/state-backed/creating.md`
- Fixed DbtProjectComponent description accuracy
-
`public/skills/skills/dagster-expert/skills/dagster-expert/references/components/state-backed/using.md`
- Clarified Dagster+ vs OSS paths, added storage availability,
programmatic refresh, and reload behavior sections
-
`public/skills/skills/dagster-expert/skills/dagster-expert/references/components/subclassing-components.md`
- Added trailing newline
</details>
<details>
<summary>original-plan</summary>
# Update state-backed component skill reference docs
## Context
The dagster-expert skill's state-backed component reference docs led to
several wrong/misleading answers in a Q&A evaluation. The root cause is
that the docs are written from an OSS-first perspective, but
state-backed components are primarily used on Dagster+ where the
experience is simpler (automatic storage, managed infra). Several
operational details are also missing or inaccurate.
## Files to edit
-
`public/skills/skills/dagster-expert/skills/dagster-expert/references/components/state-backed/creating.md`
-
`public/skills/skills/dagster-expert/skills/dagster-expert/references/components/state-backed/using.md`
## Changes
### creating.md — 1 edit
**Fix DbtProjectComponent description** in the "Tool's native format"
section. Current text says it "writes dbt manifest, reads it with dbt's
manifest parser." Actually it copies the entire project directory into
the state path (via `shutil.copytree`), including running `dbt deps` if
necessary. `build_defs_from_state` then reads the manifest from within
that full project copy.
### using.md — 5 edits
**A. Rewrite VERSIONED_STATE_STORAGE to lead with Dagster+**
- Update strategy table: note that Dagster+ provides this automatically
- Split the section into "Dagster+ (automatic)" and "OSS/self-hosted
(manual config)"
- The dagster.yaml config block should be clearly labeled as OSS-only
- Dagster+ uploads/downloads state to an S3 bucket managed by Dagster
Labs — no user config needed
**B. Add error handling note** (new short subsection after
LEGACY_CODE_SERVER_SNAPSHOTS)
- If DefsStateStorage is unreachable during code location load → hard
failure (not graceful degradation)
- In Dagster+ this is not a practical concern since the bucket is
managed by Dagster Labs
**C. Add programmatic state refresh pattern** (new subsection under
CI/CD State Refresh)
- A component can produce a job with an op that calls its own
`write_state_to_path`
- That job can be triggered via manual runs, schedules, sensors, or
GraphQL
- This decouples state refresh from the deploy cycle entirely
**D. Add "Code Location Reloads and Versioned State" section** (new,
before Common Components)
- Dagster+: each code location load is pinned to specific defs state
versions; normal reload does NOT update them; separate GraphQL query
needed to pull in latest versions
- OSS: no version tracking; every reload pulls latest state
- This explains when definition changes from a state refresh become
visible
**E. Add migration guidance** (new short section, before Common
Components)
- Straightforward: swap management_type, rebuild state, verify
- Start with one component as proof of concept, then migrate the rest
- No data migration needed — refresh rebuilds from external systems
## Verification
After making edits, re-read both files to verify accuracy and that
they're not overly long (these load into LLM context). The docs should
answer these questions correctly:
- "Does Dagster+ Cloud provide DefsStateStorage automatically?" → Yes
- "What happens if storage is unreachable during load?" → Hard failure
- "Can I refresh state without redeploying?" → Yes, via job pattern
- "Does a normal code location reload pick up new state?" → In Dagster+
no, in OSS yes
</details>
<!-- WARNING: Machine-generated. Manual edits may break erk tooling. -->
<!-- erk:metadata-block:plan-header -->
<details>
<summary>plan-header</summary>
```yaml
schema_version: '2'
created_at: '2026-03-27T13:43:11.547466+00:00'
created_by: OwenKephart
plan_comment_id: null
last_dispatched_run_id: null
last_dispatched_node_id: null
last_dispatched_at: null
last_local_impl_at: '2026-03-27T20:47:36.979490+00:00'
last_local_impl_event: ended
last_local_impl_session: f7a9a515-e9d4-423a-81c9-26917f9311eb
last_local_impl_user: owen
last_remote_impl_at: null
last_remote_impl_run_id: null
last_remote_impl_session_id: null
branch_name: plnd/update-state-backed-docs-03-27-1343
created_from_session: 2d3d5cfe-d06c-476e-a35e-0eb02f4b6cc2
lifecycle_stage: impl
last_session_branch: planned-pr-context/22134
last_session_id: f7a9a515-e9d4-423a-81c9-26917f9311eb
last_session_at: '2026-03-27T13:47:41.425071+00:00'
last_session_source: local
worktree_name: erk-slot-04
```
</details>
<!-- /erk:metadata-block:plan-header -->
---
To replicate this PR locally, run:
```
erk pr teleport 22134
```
---------
Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Internal-RevId: 88546ea5a41bfe90ff121fb0b24a2713d83b6f321 parent 27af24b commit 5e66e32
4 files changed
Lines changed: 78 additions & 9 deletions
File tree
- skills/dagster-expert/skills/dagster-expert/references
- components
- state-backed
Lines changed: 1 addition & 0 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
89 | 89 | | |
90 | 90 | | |
91 | 91 | | |
| 92 | + | |
92 | 93 | | |
93 | 94 | | |
94 | 95 | | |
| |||
Lines changed: 1 addition & 1 deletion
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
160 | 160 | | |
161 | 161 | | |
162 | 162 | | |
163 | | - | |
| 163 | + | |
164 | 164 | | |
165 | 165 | | |
166 | 166 | | |
| |||
Lines changed: 75 additions & 7 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
17 | 17 | | |
18 | 18 | | |
19 | 19 | | |
20 | | - | |
21 | | - | |
22 | | - | |
23 | | - | |
24 | | - | |
| 20 | + | |
| 21 | + | |
| 22 | + | |
| 23 | + | |
| 24 | + | |
25 | 25 | | |
26 | 26 | | |
27 | 27 | | |
| |||
41 | 41 | | |
42 | 42 | | |
43 | 43 | | |
44 | | - | |
| 44 | + | |
| 45 | + | |
| 46 | + | |
| 47 | + | |
| 48 | + | |
| 49 | + | |
| 50 | + | |
| 51 | + | |
| 52 | + | |
45 | 53 | | |
46 | 54 | | |
47 | | - | |
| 55 | + | |
48 | 56 | | |
49 | 57 | | |
50 | 58 | | |
| |||
56 | 64 | | |
57 | 65 | | |
58 | 66 | | |
| 67 | + | |
| 68 | + | |
| 69 | + | |
| 70 | + | |
59 | 71 | | |
60 | 72 | | |
61 | 73 | | |
| |||
132 | 144 | | |
133 | 145 | | |
134 | 146 | | |
| 147 | + | |
| 148 | + | |
| 149 | + | |
| 150 | + | |
| 151 | + | |
| 152 | + | |
| 153 | + | |
| 154 | + | |
| 155 | + | |
| 156 | + | |
| 157 | + | |
| 158 | + | |
| 159 | + | |
| 160 | + | |
| 161 | + | |
| 162 | + | |
| 163 | + | |
| 164 | + | |
| 165 | + | |
| 166 | + | |
| 167 | + | |
| 168 | + | |
| 169 | + | |
| 170 | + | |
| 171 | + | |
| 172 | + | |
| 173 | + | |
| 174 | + | |
| 175 | + | |
| 176 | + | |
| 177 | + | |
| 178 | + | |
| 179 | + | |
| 180 | + | |
| 181 | + | |
| 182 | + | |
| 183 | + | |
| 184 | + | |
| 185 | + | |
| 186 | + | |
| 187 | + | |
| 188 | + | |
| 189 | + | |
| 190 | + | |
| 191 | + | |
| 192 | + | |
| 193 | + | |
| 194 | + | |
| 195 | + | |
| 196 | + | |
| 197 | + | |
| 198 | + | |
| 199 | + | |
| 200 | + | |
| 201 | + | |
| 202 | + | |
135 | 203 | | |
136 | 204 | | |
137 | 205 | | |
| |||
Lines changed: 1 addition & 1 deletion
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
76 | 76 | | |
77 | 77 | | |
78 | 78 | | |
79 | | - | |
| 79 | + | |
0 commit comments