Repository navigation
Conversation
- reference opensemantic PR #5 (664da4a), get_title uses name for Property - store_entity refuses a write when the uuid is on another Property: page - delete_entity uses get_title - create_or_update_entity reports the reason of a failed store
LukasGold
marked this pull request as ready for review
November 13, 2026 13:17
Contributor
Release previewMerging this PR would release v2.10.0 (current: Changelog preview (truncated)## v2.10.0 (2026-11-13)
### Bug Fixes
- A wiki file finds its session without a URL
([`f3f1080`](https://github.com/OpenSemanticLab/osw-python/commit/f3f1080106c0c4f8c18386bceb9d9eafac098182))
- Botfilter for user sync
([`4d6f440`](https://github.com/OpenSemanticLab/osw-python/commit/4d6f4401c63a148c924bef89963b8f18bc8d4b0c))
- Follow properties and items when collecting category templates
([#220](https://github.com/OpenSemanticLab/osw-python/pull/220),
[`55e500e`](https://github.com/OpenSemanticLab/osw-python/commit/55e500efb896f0a3d6bde98409b3a6f43a652bdc))
- Keep the stored jsonschema when store_entity regenerates it
([`9b76a8f`](https://github.com/OpenSemanticLab/osw-python/commit/9b76a8fbeb813b34c4881b54d329e9e837b08f95))
- One session per host and credential, named by host alone
([`f199283`](https://github.com/OpenSemanticLab/osw-python/commit/f1992832fa20969fc5a63d0a215ba59a9e796245))
- Path is a field again, in step with local_path
([`4ecbc7c`](https://github.com/OpenSemanticLab/osw-python/commit/4ecbc7caddb1558ac765ba38f654f37d55e1e58c))
- Select category templates from the schema allOf like the wiki
([#220](https://github.com/OpenSemanticLab/osw-python/pull/220),
[`9f606f4`](https://github.com/OpenSemanticLab/osw-python/commit/9f606f48fefd640cca48e6718f1a92eca118da6b))
- **core**: Address follow-up issues in the overwrite policy
([`10808a0`](https://github.com/OpenSemanticLab/osw-python/commit/10808a05d1c27c5cf4053e79169d39ceeac16f99))
- **core**: Do not warn when a registered subclass was set aside
([`c116199`](https://github.com/OpenSemanticLab/osw-python/commit/c1161990e1ef6ebed6372c814ba2133c80258f5c))
- **core**: Drop skipped pages from StoreEntityPartialError.stored
([`cf78de9`](https://github.com/OpenSemanticLab/osw-python/commit/cf78de9f253700a92b8b44761dd4baa75050695e))
- **core**: Guard the registry conflict check against a non-class
([`0017ef0`](https://github.com/OpenSemanticLab/osw-python/commit/0017ef094e009dd3fe04096f11eea880bd2a4142))
- **core**: Ignore registered subclasses of the canonical model class
([`4ee1e09`](https://github.com/OpenSemanticLab/osw-python/commit/4ee1e09ee54f39258fb4f03d4b74f11de4a4c451))
- **core**: Prefer a registered class over a generated one
([`90fa310`](https://github.com/OpenSemanticLab/osw-python/commit/90fa310a8e8f71b8ce58d95c0a575e4e6607a1dd))
- **core**: Restore the page cache state once per fetch_schema call
([`f09dcf6`](https://github.com/OpenSemanticLab/osw-python/commit/f09dcf6b9d0e0bf3baf04107d9e1acf56e755c8d))
- **core**: Skip a page whose category has no usable schema
([`3c9278d`](https://github.com/OpenSemanticLab/osw-python/commit/3c9278d24baadce753f868ff39cbddccf9418494))
- **core**: Skip non-class attributes when choosing a category class
([`0ea247c`](https://github.com/OpenSemanticLab/osw-python/commit/0ea247c3452b207942fe08a23b596ec6e2d52f96))
- **core**: Use the current class after fetch_schema reloads the module
([`e39a857`](https://github.com/OpenSemanticLab/osw-python/commit/e39a857a20604718ee5dd7d1ed300b509baa7f8c))
- **package**: Write packages.json pages in a deterministic order
([`467d11c`](https://github.com/OpenSemanticLab/osw-python/commit/467d11cc26a0a94f3a31936124740f33c31692c0))
- **user-sync**: Actually remove pruned fields via empty relations and remove_empty
([`87cf85b`](https://github.com/OpenSemanticLab/osw-python/commit/87cf85b31cbfec6b80e2e30b92852c359586133c))
- **user-sync**: Align with stage and the tools docs
([`bc6b0d6`](https://github.com/OpenSemanticLab/osw-python/commit/bc6b0d642f5697ca8048b4be05fd26c9ad2162f6))
- **user-sync**: Count and redirect only stored items
([#224](https://github.com/OpenSemanticLab/osw-python/pull/224),
[`0b8dc97`](https://github.com/OpenSemanticLab/osw-python/commit/0b8dc974e972e8adaa7a2bb03bd3ae4396589f40))
- **user-sync**: Drop python-dotenv, use default accounts.pwd.yaml
([`02570c8`](https://github.com/OpenSemanticLab/osw-python/commit/02570c8f88d6d27c58e1e595bc8bb13e90354fd4))
- **user-sync**: Prune a single-valued key stored with an empty value
([`ebda514`](https://github.com/OpenSemanticLab/osw-python/commit/ebda514c731718ab20a084b93288491b3b944627))
- **user-sync**: Prune by field type and decide from stored jsondata
([`9b36e4e`](https://github.com/OpenSemanticLab/osw-python/commit/9b36e4ef8417b8847ba304535a95c0eedaf628b9))
### Build SystemPreview via python-semantic-release and conventional commits. |
This branch has not been deployed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Create SMW properties through the generic entity path: an entity of a
Category:Propertysubclass is stored atProperty:<name>instead ofProperty:OSW<uuid>.Changes
pyproject.toml,uv.lock: reference opensemantic at commit 664da4a from feat: derive Property page title from name in get_title OpenSemanticWorld-Packages/opensemantic-python#5. There,get_titlereturnsmeta.wiki_page.title, elsenamefor Property instances, elseOSW<uuid>. Needsallow-direct-references = truefor hatch.src/osw/core.py:OSW._check_property_title_unchanged, called instore_entitybefore the page is loaded or edited, for thePropertynamespace and not offline. It queries[[HasUuid::<uuid>]]. If aProperty:page with this uuid exists under a different title, the write is refused with aValueError. The message names the uuid and both titles. It suggests moving the old page to the new title if a replacement is intended, or keeping the originalname. Titles are compared after MediaWiki normalization (underscore equals space, first letter upper case).delete_entityusesget_titleinstead of its own copy of the title rule.src/osw/service/errors.py,src/osw/service/ops/entities.py:create_or_update_entityconvertsStoreEntityPartialErrorinto the newStoreFailederror. Its message lists each failed title with its reason, so CLI and MCP callers see the refusal text. The MCP errortypestaysStoreEntityPartialErrorand the CLI exit code stays 1. This applies to every failed store, not only the refusal. Docstring updated.tests/test_property_title.py(new) and one CLI test intests/test_cli.py.Behavior to note
nameof a property is refused, because it would create a second page with the same uuid.Property:OSW<uuid>whosenamediffers from that title are also refused on update. On wiki-dev a title search finds 40 pages titledProperty:OSW...; the two checked (HasDirectoryTree,HasComponentRole) have anameand nometa. The owner moves the page toProperty:<name>once. Moving a page through the CLI or MCP is tracked in Move a wiki page through the CLI and MCP, with a skill for renaming entities #227.delete_entitytargetsProperty:<name>for a Property withoutmeta.wiki_page.title. It no longer reaches an oldProperty:OSW<uuid>page.osw entity delete <title>still deletes by title.Live test on wiki-dev.open-semantic-lab.org
AnnotationPropertythroughosw entity putwroteProperty:HasOswPyTitleTest1with the jsondata, header and footer slots.Has_typewas set fromproperty_type.nameupdated that page.nameexited with code 1 and the full error text. No second page was created.Category:OSW1b15ddcf042c4599bd9d431cbfdf3430andCategory:OSW2607ff65b0574f60996d41434d0e4fa4giveProperty:<name>(no write).OSW.delete_entitydeleted the test page. SMW locked the page withsmw-change-propagation-protectionfor about 27 minutes after the update, so the deletion succeeded only after retries.HasUuid. If it does, the check refuses the update after the suggested move.Required before the merge
pyproject.toml: replace the git reference withopensemantic>=<release>and removeallow-direct-references = trueuv.lockupdated (uv lock)PyPI rejects a release whose metadata contains a direct URL dependency, so this PR stays a draft until these are done.