Skip to content

Implement form/report design stream extraction#6

Merged
dominion525 merged 20 commits into
mainfrom
feature/form-report-design-export
Mar 12, 2026
Merged

Implement form/report design stream extraction#6
dominion525 merged 20 commits into
mainfrom
feature/form-report-design-export

Conversation

@dominion525

Copy link
Copy Markdown
Owner

Summary

  • Implement form/report binary stream (Blob, TypeInfo, PropData) extraction
  • Blob binary parser for form/control properties (RecordSource, ControlSource, Filter, events, etc.)
  • Add form CLI subcommand (list / dump / controls / props)
  • Improve test coverage across form, crypto, and CLI modules
  • Bump version 0.2.2 → 0.3.0

Changes

  • crates/jetdb/src/form.rs — Form stream extraction, TypeInfo/Blob parser, property analysis (1788 new lines)
  • crates/jetdb/src/storage.rs — MSysAccessStorage read support
  • crates/jetdb-cli/src/form.rs — form subcommand implementation (list/dump/controls/props)
  • Redesign test responsibility: move functional tests to library, thin CLI tests to flags/format/errors only
  • Crypto module: add tests for all AES key sizes and hash algorithms
  • Documentation: form-design spec, CI docs update, CLI/library docs update

🤖 Generated with Claude Code

dominion525 and others added 20 commits March 12, 2026 14:22
- Extract shared MSysAccessStorage infrastructure into storage.rs from vba.rs
- Add form.rs library module with list_forms(), read_form_stream(), read_form_type_info()
- Parse DirData to map form/report names to storage indices
- Parse TypeInfo stream (magic 0xACCDEAF7) to extract control names and type codes
- Add CLI form subcommand with list, dump, and controls sub-commands
- Add FormNotFound and InvalidFormData error variants to FileError
- Add encoding_rs dependency for Shift-JIS decoding in TypeInfo
- Update CLI docs (cli.md, cli.ja.md) and add form-design.ja.md research notes

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Record property entry format (prop_id + type + data) with fixed/variable length variants
- Add known property ID mapping (RecordSource, ControlSource, Filter, etc.)
- Document overall Blob layout (header → form-level → binary data → per-control blocks)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Add Blob binary parser to form.rs (form-level + per-control properties)
- Add public types: BlobValue, BlobProperty, ControlProperties, FormProperties
- Add `form props` CLI subcommand
- Add 12 synthetic binary unit tests + 1 integration test
- Add documentation to cli.md / cli.ja.md
- Document known limitations, prop_id mapping, and type support in form-design.ja.md

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Correct OnClick (0x007E), OnDblClick (0x00E0), OnMouseDown (0x006B), etc.
- Add OnKeyUp, OnMouseUp, OnMouseMove, OnGotFocus, OnLostFocus, OnEnter, OnExit
- Update prop_id mapping tables in docs/form-design.ja.md
- Add formPropTest.accdb test database (F_Table0, F_Table1, jp_フォーム_2, F_Buttons)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Add 12 library tests: empty form, RecordSource/Filter, ControlSource,
  calculated fields, Format, Japanese form, events (all 12 types)
- Add 8 CLI integration tests: form list, form props patterns
- All quality checks pass (94.34% coverage)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Add form section (list, dump, controls, props) to SKILL.md (EN/JA)
- Add form design inspection workflow pattern

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Add control_type_name() with 31 type code mappings based on
  analysis of all 81 forms/reports in IKP database
- Fix TypeInfo-Blob matching: use name-based lookup instead of
  array index (pre-existing mismatch bug)
- Update form controls and form props CLI output to show type names
  (unknown codes fall back to 0xXXXX)
- Add type code mapping table to docs/form-design.ja.md
- Update output examples in cli.md, cli.ja.md, SKILL.md, SKILL.ja.md

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Add 4 unit tests for control_type_name(): form controls, report
  controls, unknown codes, and Label variants
- Add index-based fallback when TypeInfo-Blob name matching fails

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Default to Select when ATTR_TYPE row is absent in MSysQueries,
  instead of silently dropping the query
- Skip ~sq_ prefixed embedded queries (auto-generated by Access for
  form/report RowSource and RecordSource)
- Add ACE format query tests using queryTestV2007.accdb
- Add regression test for formPropTest.accdb (ATTR_TYPE missing)
- Add docs/msysqueries.ja.md documenting MSysQueries internals,
  attribute constants, embedded query naming conventions

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Convert all plaintext tables to Markdown table syntax across docs
- form-design.ja.md: merge duplicate prop_id tables, remove
  SaveAsText and prior art sections

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Add Jet3, ACE12, and ACE14 tests for prop
- Add Jet3, ACE12, ACE14, and ACE17 tests for tables
- Add Jet3 and ACE14 tests for queries
- Add non-encrypted ACE12 tests for vba
- Add ACE17 test for ver
- Add ACE14 test for schema
- Add ACE14 test for form

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Verify Japanese table names, column names, data values, query names,
  and DDL identifier quoting across tables, schema, export, queries,
  and prop commands
- Use formPropTest.accdb Japanese content (jp_テーブル2, 商品名,
  jp_クエリ_02, etc.)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
…lity

- Add Japanese string tests to catalog, table, data, query, prop, and
  ddl modules using formPropTest.accdb (jp_テーブル2, 商品名, etc.)
- Strengthen existing read_queries_form_prop_test with query name and
  SQL content verification for jp_クエリ_02
- Fix false-positive risks in cli_export (unwrap_or → expect),
  cli_form (is_empty → len >= 2), cli_schema (overly broad assertion)
- Remove duplicate tests: form_list_ace14, schema_nonexistent_table
- Add concrete table/query name assertions to version-specific CLI
  tests (tables_jet3/ace12/ace14/ace17, queries_list_jet3/v2010)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
…hin CLI tests

- Add ACE17 (V2019) tests to library: catalog, table, data, file
- Add JET3/ACE14 query version tests to library: query.rs
- Remove version-compat, encryption, and i18n functional tests from CLI (-63 tests)
- Merge schema_single_table_columns into schema_single_table
- CLI tests now only cover flags, output format, and error messages

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- docs/form-design.md — Internal structure of form/report design definitions
- docs/lib.md — Library API documentation
- docs/msysqueries.md — Internal structure of MSysQueries

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Library: add Display tests for BlobValue::Double and BlobValue::Guid
- Library: add unit tests for parse_section_props type 0x04/0x06/0x08
- Library: add AES CBC/ECB roundtrip tests for all key sizes (128/192/256)
- Library: add Agile/Standard AES page decryption tests (192/256-bit)
- Library: add SHA384/SHA512 hash, derive_key, iterate_hash_sha1 tests
- CLI: add success-path tests for form controls and form props
- CLI: add tests for --forms-only, --reports-only, -d flags
- CLI: add tests for form dump with typeinfo/propdata streams

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Update coverage notes with current percentages (relationship.rs ~76%, vba.rs ~80%, crypto.rs ~88%)
- Add complexity-filter crate description to complexity metrics section
- Add quality check script (scripts/quality-check.sh) section
- Fix execution order to match actual script order (test→clippy→audit→doc→coverage→complexity)
- Keep English and Japanese versions in sync

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Fix parse_type_info reading entry_count from offset 8 (always 0xFFFFFFFF) instead of correct offset 12
- Add upper bound check on entry_count to return error instead of panic on invalid data
- Update TypeInfo header documentation to reflect accurate 32-byte structure
- Fix synthetic test data offsets

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
@dominion525 dominion525 merged commit f47aaa8 into main Mar 12, 2026
7 checks passed
@dominion525 dominion525 deleted the feature/form-report-design-export branch March 12, 2026 14:52
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant