You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: DESIGN_ISSUES.md
+26Lines changed: 26 additions & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -124,6 +124,32 @@ lock before iterating, so later writes to the stream don't affect the snapshot m
124
124
125
125
---
126
126
127
+
### PS3 — `_combine` leaks `_content_hash` into the data schema on the second accumulating fetch
128
+
**Status:** resolved
129
+
**Severity:** high
130
+
**Issue:** ITL-616
131
+
132
+
`_combine` calls `as_table(all_info=True)` on both streams before concatenating them.
133
+
`all_info=True` resolves to `ColumnConfig.all()`, which includes `content_hash=True`.
134
+
In `ArrowTableStream.as_table()`, `content_hash=True` dynamically appends a `_content_hash`
135
+
column to the output table. This is a synthetic column — computed on demand, not stored in
136
+
`ArrowTableStream._table`.
137
+
138
+
`pa.concat_tables` then includes `_content_hash` in the combined table, which is passed
139
+
directly to `ArrowTableStream.__init__`. Since `_content_hash` has no recognized prefix
140
+
(`_tag::`, `_source_`, `_context_key`), it lands in `_data_columns` as if it were user data.
141
+
142
+
On the next `_combine` call, `_validate_combining_schemas` compares:
143
+
-`existing.keys()` → includes `_content_hash` in data keys (baked in from previous combine)
144
+
-`new_stream.keys()` → no `_content_hash` (freshly built from raw fetched data)
145
+
146
+
This raises `SchemaInconsistencyError`. A polling source emitting one new row per poll will
147
+
change its data schema on the second new-data poll and crash on the third.
148
+
149
+
**Fix:** Added `_STREAM_COMBINE_COLUMNS = ColumnConfig(system_tags=True, source=True, context=True)` constant and replaced `as_table(all_info=True)` with `as_table(columns=_STREAM_COMBINE_COLUMNS)` in `_combine`. `content_hash` is intentionally excluded — it is a synthetic output column, never a stored one.
150
+
151
+
---
152
+
127
153
## `src/orcapod/core/nodes/function_node.py`
128
154
129
155
### FN1 — `FunctionNodeBase.as_table()` returned empty schema when no data existed
0 commit comments