Skip to content

Commit 0b1010e

Browse files
committed
bd sync: 2026-01-06 10:58:04
1 parent c8b0f77 commit 0b1010e

1 file changed

Lines changed: 3 additions & 3 deletions

File tree

.beads/issues.jsonl

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
{"id":"vgi-python-084","title":"Change CatalogObject.tags from dict[str,str] to set[str]","description":"Change the tags field in CatalogObject (and all inheriting classes: SchemaInfo, TableInfo, ViewInfo, FunctionInfo) from dict[str, str] to set[str]. Update the Arrow schema from pa.map_(pa.string(), pa.string()) to pa.list_(pa.string()). Update all serialize/deserialize methods accordingly.","status":"in_progress","priority":2,"issue_type":"task","created_at":"2026-01-06T10:46:38.381623-05:00","created_by":"rusty","updated_at":"2026-01-06T10:49:42.623598-05:00"}
1+
{"id":"vgi-python-084","title":"Change CatalogObject.tags from dict[str,str] to set[str]","description":"Change the tags field in CatalogObject (and all inheriting classes: SchemaInfo, TableInfo, ViewInfo, FunctionInfo) from dict[str, str] to set[str]. Update the Arrow schema from pa.map_(pa.string(), pa.string()) to pa.list_(pa.string()). Update all serialize/deserialize methods accordingly.","status":"closed","priority":2,"issue_type":"task","created_at":"2026-01-06T10:46:38.381623-05:00","created_by":"rusty","updated_at":"2026-01-06T10:56:06.363156-05:00","closed_at":"2026-01-06T10:56:06.363156-05:00","close_reason":"Closed"}
22
{"id":"vgi-python-085","title":"Add serialize/deserialize methods to catalog dataclasses","description":"Add Arrow IPC serialization directly to the dataclasses in vgi/catalog/catalog_interface.py.\n\nAdd to each dataclass:\n- serialize() -\u003e bytes method\n- @classmethod deserialize(batch: pa.RecordBatch) -\u003e Self method\n- Arrow schema class variable for each type\n\nDataclasses to update:\n- CatalogAttachResult\n- SchemaInfo \n- TableInfo\n- ViewInfo\n- FunctionInfo\n- ScanFunctionResult\n\nSerialization rules from plan:\n- Single-row batches for scalar returns\n- Multi-row batches for streaming (Iterable returns)\n- None = 0-row/0-column batch\n- Column names match field names exactly\n- SerializedSchema fields use pa.binary()\n- tags fields use pa.map_(pa.string(), pa.string())\n\nAlso create vgi/catalog/__init__.py with package exports.","status":"closed","priority":1,"issue_type":"task","created_at":"2026-01-05T19:26:40.362177-05:00","created_by":"rusty","updated_at":"2026-01-05T19:39:06.385062-05:00","closed_at":"2026-01-05T19:39:06.385062-05:00","close_reason":"PR #24 created with serialize/deserialize methods"}
33
{"id":"vgi-python-0bo","title":"Add catalog lifecycle methods to mixin","description":"## Overview\nAdd catalog lifecycle methods to CatalogClientMixin.\n\n## Methods to Implement\n\n1. **catalogs() -\u003e list[str]**\n - Lists all catalog names available in the worker\n - Uses _catalog_invoke('catalogs')\n - Returns list extracted from result batch column 0\n\n2. **catalog_attach(name: str, options: dict) -\u003e CatalogAttachResult**\n - Attaches to a catalog with given name and options\n - Returns CatalogAttachResult with attach_id, supports_transactions, etc.\n - Uses CatalogAttachResult.deserialize() on result batch\n\n3. **catalog_detach(attach_id: AttachId) -\u003e None**\n - Detaches from a catalog\n - No return value\n\n4. **catalog_create(name: str, on_conflict: OnConflict, options: dict) -\u003e None**\n - Creates a new catalog\n - on_conflict controls behavior if catalog exists\n\n5. **catalog_drop(name: str) -\u003e None**\n - Drops a catalog\n\n6. **catalog_version(attach_id: AttachId, transaction_id: TransactionId | None) -\u003e int**\n - Gets current catalog version number\n - Returns 0 if result is empty\n\n## Reference\nSee vgi/client/catalog_client.py lines 270-327 for existing implementations.\nSee vgi/catalog/catalog_interface.py for method signatures and docstrings.\n\n## Files\n- MODIFY: vgi/client/catalog_mixin.py","status":"closed","priority":1,"issue_type":"feature","created_at":"2026-01-05T20:46:32.132747-05:00","created_by":"rusty","updated_at":"2026-01-05T20:53:53.78188-05:00","closed_at":"2026-01-05T20:53:53.78188-05:00","close_reason":"Closed","dependencies":[{"issue_id":"vgi-python-0bo","depends_on_id":"vgi-python-6kc","type":"blocks","created_at":"2026-01-05T20:47:33.609194-05:00","created_by":"rusty"}]}
44
{"id":"vgi-python-0fe","title":"Add is_varargs to ParameterInfo and metadata extraction","description":"In vgi/metadata.py:\n- Add is_varargs: bool = False to ParameterInfo\n- Update to_dict() and from_dict()\n- Add is_varargs field to _PARAMETER_STRUCT for Arrow serialization\n- Extract varargs flag in extract_parameters()\n- Add _validate_varargs() with rules:\n - Only one varargs parameter allowed\n - Must be positional (not named)\n - Must be last positional (before TableInput if present)\n - Cannot have default value","status":"closed","priority":2,"issue_type":"task","created_at":"2026-01-05T10:49:20.141375-05:00","created_by":"rusty","updated_at":"2026-01-05T10:58:21.242603-05:00","closed_at":"2026-01-05T10:58:21.242603-05:00","close_reason":"Added is_varargs to ParameterInfo, _PARAMETER_STRUCT, extract_parameters(), and _validate_varargs()","dependencies":[{"issue_id":"vgi-python-0fe","depends_on_id":"vgi-python-jrf","type":"blocks","created_at":"2026-01-05T10:49:26.421664-05:00","created_by":"rusty"}]}
@@ -90,7 +90,7 @@
9090
{"id":"vgi-python-kz4","title":"Rename TableInOutGeneratorFunction to TableInOutGenerator for consistency","description":"Naming inconsistency: TableFunctionGenerator uses *Generator suffix, but TableInOutGeneratorFunction uses *GeneratorFunction suffix. Rename TableInOutGeneratorFunction to TableInOutGenerator for consistency. Also consider renaming ScalarFunctionGenerator if needed.","status":"closed","priority":3,"issue_type":"task","created_at":"2026-01-04T20:06:41.581028-05:00","created_by":"rusty","updated_at":"2026-01-04T21:43:58.141038-05:00","closed_at":"2026-01-04T21:43:58.141038-05:00","close_reason":"PR #7 created: https://github.com/Query-farm/vgi-python/pull/7"}
9191
{"id":"vgi-python-l1u","title":"Consider custom __repr__ for ArgumentSpec","description":"The default dataclass __repr__ includes the full Arrow type repr which can be verbose. Consider a custom __repr__ that's more concise for debugging, e.g., 'ArgumentSpec(name=\"count\", pos=0, type=int64)' instead of showing the full pa.DataType object.","status":"closed","priority":4,"issue_type":"task","created_at":"2026-01-05T11:51:21.415976-05:00","created_by":"rusty","updated_at":"2026-01-05T12:15:02.029743-05:00","closed_at":"2026-01-05T12:15:02.029743-05:00","close_reason":"Closed"}
9292
{"id":"vgi-python-l5z","title":"Update existing tests that use arg_types parameter","description":"In tests/test_argument_spec.py:\n- Update all calls to extract_argument_specs() that pass arg_types\n- Remove the arg_types parameter from test function calls\n- Ensure tests still pass with auto-inference","status":"closed","priority":2,"issue_type":"task","created_at":"2026-01-05T15:44:56.81929-05:00","created_by":"rusty","updated_at":"2026-01-05T15:56:39.371768-05:00","closed_at":"2026-01-05T15:56:39.371768-05:00","close_reason":"Completed as part of PR #20","dependencies":[{"issue_id":"vgi-python-l5z","depends_on_id":"vgi-python-coi","type":"blocks","created_at":"2026-01-05T15:45:13.980985-05:00","created_by":"rusty"}]}
93-
{"id":"vgi-python-lcs","title":"Update _function_to_info to pass tags to FunctionInfo","description":"In ReadOnlyCatalogInterface._function_to_info(), pass the set[str] tags from ResolvedMetadata directly to FunctionInfo.tags (both are now set[str] after vgi-python-084).","status":"open","priority":2,"issue_type":"task","created_at":"2026-01-06T10:45:23.124258-05:00","created_by":"rusty","updated_at":"2026-01-06T10:46:45.539493-05:00","dependencies":[{"issue_id":"vgi-python-lcs","depends_on_id":"vgi-python-51m","type":"blocks","created_at":"2026-01-06T10:45:30.023843-05:00","created_by":"rusty"},{"issue_id":"vgi-python-lcs","depends_on_id":"vgi-python-084","type":"blocks","created_at":"2026-01-06T10:46:45.684885-05:00","created_by":"rusty"}]}
93+
{"id":"vgi-python-lcs","title":"Update _function_to_info to pass tags to FunctionInfo","description":"In ReadOnlyCatalogInterface._function_to_info(), pass the set[str] tags from ResolvedMetadata directly to FunctionInfo.tags (both are now set[str] after vgi-python-084).","status":"closed","priority":2,"issue_type":"task","created_at":"2026-01-06T10:45:23.124258-05:00","created_by":"rusty","updated_at":"2026-01-06T10:56:18.228831-05:00","closed_at":"2026-01-06T10:56:18.228831-05:00","close_reason":"Already completed as part of vgi-python-084","dependencies":[{"issue_id":"vgi-python-lcs","depends_on_id":"vgi-python-51m","type":"blocks","created_at":"2026-01-06T10:45:30.023843-05:00","created_by":"rusty"},{"issue_id":"vgi-python-lcs","depends_on_id":"vgi-python-084","type":"blocks","created_at":"2026-01-06T10:46:45.684885-05:00","created_by":"rusty"}]}
9494
{"id":"vgi-python-lec","title":"Add test coverage for testing.py helper edge cases","notes":"Coverage: 89% in vgi/testing.py. Missing tests for:\n- Lines 421-422, 450-451: StopIteration handling in _process_batch\n- Lines 468-472: FINISHED status during data phase\n- Lines 485-486, 502-503: _finalize edge cases\n\nLow priority since these are test helpers.","status":"closed","priority":4,"issue_type":"task","created_at":"2026-01-04T22:15:34.006563-05:00","created_by":"rusty","updated_at":"2026-01-05T12:07:48.026786-05:00","closed_at":"2026-01-05T12:07:48.026786-05:00","close_reason":"Closed"}
9595
{"id":"vgi-python-lzc","title":"Extract duplicated sort_key function in argument_spec","description":"The sort_key function is duplicated at lines 139-142 and 309-312 in argument_spec.py. Extract it to a module-level function to follow DRY principles.","status":"closed","priority":3,"issue_type":"task","created_at":"2026-01-05T11:51:19.141041-05:00","created_by":"rusty","updated_at":"2026-01-05T11:55:22.535816-05:00","closed_at":"2026-01-05T11:55:22.535816-05:00","close_reason":"Closed"}
9696
{"id":"vgi-python-m3z","title":"Add tags to _VALID_META_ATTRIBUTES in metadata.py","description":"Add 'tags' to the _VALID_META_ATTRIBUTES frozenset so that using tags in a Meta class doesn't trigger the 'unknown attributes' warning.","status":"closed","priority":2,"issue_type":"task","created_at":"2026-01-06T10:45:22.364181-05:00","created_by":"rusty","updated_at":"2026-01-06T10:49:13.581283-05:00","closed_at":"2026-01-06T10:49:13.581283-05:00","close_reason":"Already completed as part of vgi-python-twb"}
@@ -114,7 +114,7 @@
114114
{"id":"vgi-python-r3t","title":"Consolidate test client infrastructure in testing.py","description":"testing.py has three test client classes (FunctionTestClient, TableFunctionTestClient, ScalarFunctionTestClient) with shared infrastructure patterns. Extend _BaseTestClient pattern to reduce code duplication. Consider using a single unified client with method dispatch based on function type.","status":"closed","priority":3,"issue_type":"task","created_at":"2026-01-04T20:06:53.913912-05:00","created_by":"rusty","updated_at":"2026-01-04T22:02:51.368907-05:00","closed_at":"2026-01-04T22:02:51.368907-05:00","close_reason":"Not warranted - _BaseTestClient already provides shared infrastructure (context manager, log capture, logging). The three clients handle genuinely different protocols (TableInOut with finalize, TableFunction with no input, Scalar with different protocol). Unifying would add type detection complexity without real benefit."}
115115
{"id":"vgi-python-sby","title":"Update CLI schema commands for --attach-id and --catalog options","description":"Update `vgi/client/cli_schema.py` to change all commands from positional `attach_id` to options:\n\n**Changes for each command (list, get, create, drop, contents):**\n1. Replace positional `ATTACH_ID` argument with `--attach-id` option\n2. Add `--catalog` option as alternative (mutually exclusive with --attach-id)\n3. Add `--attach-options` option for passing JSON options when using --catalog\n4. Use helper from cli_utils to resolve attach_id\n5. Show warning if --catalog is used with a stateful catalog (attach_id_required=True)\n\n**Example new usage:**\n```bash\n# Using --catalog (auto-attach)\nvgi-client catalog schema list --catalog example --server ...\nvgi-client catalog schema contents --catalog example main --server ...\n\n# Using explicit --attach-id\nvgi-client catalog schema list --attach-id abc123 --server ...\n```\n\n**Validation:**\n- Error if neither --attach-id nor --catalog provided\n- Error if both --attach-id and --catalog provided","status":"closed","priority":2,"issue_type":"task","created_at":"2026-01-05T22:35:59.190315-05:00","created_by":"rusty","updated_at":"2026-01-05T22:46:30.150415-05:00","closed_at":"2026-01-05T22:46:30.150415-05:00","close_reason":"Closed","dependencies":[{"issue_id":"vgi-python-sby","depends_on_id":"vgi-python-nmu","type":"blocks","created_at":"2026-01-05T22:36:04.975696-05:00","created_by":"rusty"}]}
116116
{"id":"vgi-python-set","title":"Improve type annotations in testing.py test helpers","notes":"92.61% type coverage (70 Anys) in vgi/testing.py\n\nMain opportunities:\n- Lines 136-137, 641-642, 685-686, etc: `args: tuple[Any, ...]` and `kwargs: dict[str, Any]`\n Could use ParamSpec or more specific signatures\n- Lines 151-152: `positional: tuple[pa.Scalar[Any], ...]` - unavoidable (PyArrow)\n- Lines 761, 843: Log expectation dicts - could use TypedDict\n\nLower priority since these are test helpers and flexibility is intentional.","status":"closed","priority":4,"issue_type":"task","created_at":"2026-01-04T22:19:50.204524-05:00","created_by":"rusty","updated_at":"2026-01-05T12:09:36.813123-05:00","closed_at":"2026-01-05T12:09:36.813123-05:00","close_reason":"Closed"}
117-
{"id":"vgi-python-tpi","title":"Add example tags to example functions","description":"Add 'tags' attribute to some example function Meta classes for testing. Examples: SequenceFunction could have tags={'generator', 'utility'}, EchoFunction could have tags={'debug', 'passthrough'}, GeneratorExceptionFunction could have tags={'testing', 'error-handling'}.","status":"open","priority":2,"issue_type":"task","created_at":"2026-01-06T10:45:23.311159-05:00","created_by":"rusty","updated_at":"2026-01-06T10:45:23.311159-05:00","dependencies":[{"issue_id":"vgi-python-tpi","depends_on_id":"vgi-python-m3z","type":"blocks","created_at":"2026-01-06T10:45:30.062229-05:00","created_by":"rusty"}]}
117+
{"id":"vgi-python-tpi","title":"Add example tags to example functions","description":"Add 'tags' attribute to some example function Meta classes for testing. Examples: SequenceFunction could have tags={'generator', 'utility'}, EchoFunction could have tags={'debug', 'passthrough'}, GeneratorExceptionFunction could have tags={'testing', 'error-handling'}.","status":"closed","priority":2,"issue_type":"task","created_at":"2026-01-06T10:45:23.311159-05:00","created_by":"rusty","updated_at":"2026-01-06T10:57:55.279205-05:00","closed_at":"2026-01-06T10:57:55.279205-05:00","close_reason":"Closed","dependencies":[{"issue_id":"vgi-python-tpi","depends_on_id":"vgi-python-m3z","type":"blocks","created_at":"2026-01-06T10:45:30.062229-05:00","created_by":"rusty"}]}
118118
{"id":"vgi-python-tw7","title":"Create vgi/catalog/types.py - Type aliases and dataclasses","description":"Create the core type definitions for the catalog interface:\n\nFiles to create:\n- vgi/catalog/__init__.py (package exports)\n- vgi/catalog/types.py\n\nType aliases:\n- AttachId = NewType('AttachId', bytes)\n- TransactionId = NewType('TransactionId', bytes) \n- SerializedSchema = NewType('SerializedSchema', bytes)\n- SqlExpression = NewType('SqlExpression', str)\n\nEnums:\n- FunctionType (SCALAR, TABLE)\n- OnConflict (ERROR, IGNORE, REPLACE)\n- TimeTravelUnit (TIMESTAMP, VERSION)\n\nDataclasses:\n- CatalogAttachResult\n- CatalogObject (base with comment, tags)\n- CatalogSchemaObject (extends CatalogObject with name, schema_name)\n- SchemaInfo\n- TableInfo (with primary_key_columns: list[int])\n- ViewInfo\n- FunctionInfo\n- ScanFunctionResult\n\nAll dataclasses should be frozen=True for immutability.\nInclude tests for basic instantiation.","status":"closed","priority":1,"issue_type":"task","created_at":"2026-01-05T19:17:03.990547-05:00","created_by":"rusty","updated_at":"2026-01-05T19:21:50.07033-05:00","closed_at":"2026-01-05T19:21:50.07033-05:00","close_reason":"User requested closure"}
119119
{"id":"vgi-python-twb","title":"Add tags field to ResolvedMetadata in metadata.py","description":"Add a 'tags: set[str]' field to ResolvedMetadata dataclass. Tags are simple string labels (like 'deprecated', 'experimental', 'beta') that can be attached to functions for categorization. Different from 'categories' which organize functions, tags are more freeform labels.","status":"closed","priority":2,"issue_type":"task","created_at":"2026-01-06T10:45:01.385326-05:00","created_by":"rusty","updated_at":"2026-01-06T10:48:45.887193-05:00","closed_at":"2026-01-06T10:48:45.887193-05:00","close_reason":"Closed"}
120120
{"id":"vgi-python-uq8","title":"Add validation for missing arg_types in extract_argument_specs","description":"In extract_argument_specs(), if an argument name is missing from arg_types dict, it silently defaults to pa.null(). This could mask bugs where the caller forgot to provide a type. Consider raising an error or logging a warning when a type mapping is missing.","status":"closed","priority":2,"issue_type":"task","created_at":"2026-01-05T11:51:19.501577-05:00","created_by":"rusty","updated_at":"2026-01-05T11:53:52.594504-05:00","closed_at":"2026-01-05T11:53:52.594504-05:00","close_reason":"Closed"}

0 commit comments

Comments
 (0)