Skip to content

Commit 3ed9616

Browse files
authored
Merge branch 'stage' into fix/202-category-loop-error-handling
2 parents 3c9278d + 5dfdf17 commit 3ed9616

56 files changed

Lines changed: 6164 additions & 339 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

‎.claude-plugin/marketplace.json‎

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
{
2+
"name": "osw-python",
3+
"description": "Skills for working with OpenSemanticLab wikis through the osw CLI and MCP server.",
4+
"owner": {
5+
"name": "OpenSemanticLab",
6+
"url": "https://github.com/OpenSemanticLab"
7+
},
8+
"plugins": [
9+
{
10+
"name": "osl-tasks",
11+
"source": "./",
12+
"description": "Task and project management for OpenSemanticLab, driven by the osw CLI and MCP server."
13+
}
14+
]
15+
}

‎.claude-plugin/plugin.json‎

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
{
2+
"name": "osl-tasks",
3+
"displayName": "OSL task management",
4+
"description": "Task and project management for OpenSemanticLab, driven by the osw CLI and MCP server.",
5+
"version": "2.9.1",
6+
"author": {
7+
"name": "OpenSemanticLab"
8+
},
9+
"homepage": "https://github.com/OpenSemanticLab/osw-python",
10+
"repository": "https://github.com/OpenSemanticLab/osw-python",
11+
"license": "Apache-2.0",
12+
"keywords": ["opensemanticlab", "osl", "tasks", "wiki", "semantic-mediawiki"],
13+
"skills": ["./src/osw/skills/"]
14+
}

‎.github/workflows/integration.yml‎

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,16 +2,17 @@
22
# INTEGR_TEST_* secrets; where they are unavailable (e.g. forks), the
33
# credential fixtures make the tests skip instead of fail.
44
#
5-
# Runs on every pull request into main, so breaking changes surface before the
6-
# release job (gated separately by required review on the pypi environment)
7-
# ever starts. No push trigger: a push to main is already covered by the PR
8-
# that preceded it, so a second run would add nothing.
5+
# Runs on every pull request into main or stage, so breaking changes surface
6+
# before the release job (gated separately by required review on the pypi
7+
# environment) ever starts. stage collects reviewed pull requests before they
8+
# go to main together. No push trigger: a push to main is already covered by
9+
# the PR that preceded it, so a second run would add nothing.
910

1011
name: Integration
1112

1213
on:
1314
pull_request:
14-
branches: [main]
15+
branches: [main, stage]
1516
workflow_dispatch:
1617

1718
concurrency:

‎.github/workflows/main.yml‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ name: Main
22

33
on:
44
push:
5-
branches: [main]
5+
branches: [main, stage]
66
pull_request:
77
types: [opened, synchronize, reopened, ready_for_review]
88
workflow_dispatch:

‎.github/workflows/on-release-main.yml‎

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,10 @@
11
# Automated release: python-semantic-release analyzes the conventional
22
# commits on main, and when a release is due it bumps the static version in
3-
# pyproject.toml and CITATION.cff, updates CHANGELOG.md, relocks uv.lock,
4-
# commits, tags vX.Y.Z, pushes and creates the GitHub release. Publishing
5-
# happens in this same run: pushes made with GITHUB_TOKEN do not retrigger
6-
# workflows, so a tag-triggered publish would never fire.
3+
# pyproject.toml, CITATION.cff, the osl-tasks skill and the Claude Code
4+
# plugin manifest, updates CHANGELOG.md, relocks uv.lock, commits, tags
5+
# vX.Y.Z, pushes and creates the GitHub release. Publishing happens in this
6+
# same run: pushes made with GITHUB_TOKEN do not retrigger workflows, so a
7+
# tag-triggered publish would never fire.
78
#
89
# Filename and environment name are load-bearing: the PyPI trusted
910
# publisher (OIDC) references workflow "on-release-main.yml" and

‎CHANGELOG.md‎

Lines changed: 208 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,214 @@
1010
1111
<!-- version list -->
1212

13+
## v2.9.1 (2026-11-06)
14+
15+
### Bug Fixes
16+
17+
- **core**: Resolve bare $refs before dropping schema definitions
18+
([#164](https://github.com/OpenSemanticLab/osw-python/pull/164),
19+
[`d86ad31`](https://github.com/OpenSemanticLab/osw-python/commit/d86ad31b9531b027117707bfa159a36f8b5d0694))
20+
21+
22+
## v2.9.0 (2026-11-05)
23+
24+
### Features
25+
26+
- Make dask optional so osw imports without it
27+
([#219](https://github.com/OpenSemanticLab/osw-python/pull/219),
28+
[`897df83`](https://github.com/OpenSemanticLab/osw-python/commit/897df832a132c653886af8089a0285f41e951e09))
29+
30+
31+
## v2.8.2 (2026-10-10)
32+
33+
### Bug Fixes
34+
35+
- Detect CharacteristicType from the opensemantic packages too
36+
([`f195a97`](https://github.com/OpenSemanticLab/osw-python/commit/f195a973b141cf830c65656ab946ca454e7309aa))
37+
38+
39+
## v2.8.1 (2026-09-23)
40+
41+
### Bug Fixes
42+
43+
- **core**: Map an unresolved iri to None instead of omitting it
44+
([#208](https://github.com/OpenSemanticLab/osw-python/pull/208),
45+
[`a30dae1`](https://github.com/OpenSemanticLab/osw-python/commit/a30dae1b55f430818f329a5a2312c1bb0eb4d034))
46+
47+
- **core**: Return a list from load_entity and pair iris by title
48+
([#208](https://github.com/OpenSemanticLab/osw-python/pull/208),
49+
[`a30dae1`](https://github.com/OpenSemanticLab/osw-python/commit/a30dae1b55f430818f329a5a2312c1bb0eb4d034))
50+
51+
### Documentation
52+
53+
- Point repo links at the versioned /latest/ docs paths
54+
([#206](https://github.com/OpenSemanticLab/osw-python/pull/206),
55+
[`c21ad24`](https://github.com/OpenSemanticLab/osw-python/commit/c21ad241078e64d05171b9ae2907c007590384b1))
56+
57+
- **skill**: Note the CLI and MCP prerequisite and version skew
58+
([#210](https://github.com/OpenSemanticLab/osw-python/pull/210),
59+
[`11e8ce8`](https://github.com/OpenSemanticLab/osw-python/commit/11e8ce8fbb466c638cdaf8b3d7c4b7854b2cda69))
60+
61+
62+
## v2.8.0 (2026-09-22)
63+
64+
### Bug Fixes
65+
66+
- **service**: Reconcile validate_entity with the write path
67+
([#204](https://github.com/OpenSemanticLab/osw-python/pull/204),
68+
[`ddd4445`](https://github.com/OpenSemanticLab/osw-python/commit/ddd44450c47ec071b4cc2ebb6109a1a877101b19))
69+
70+
- **service**: Report created, updated and skipped pages separately
71+
([#204](https://github.com/OpenSemanticLab/osw-python/pull/204),
72+
[`ddd4445`](https://github.com/OpenSemanticLab/osw-python/commit/ddd44450c47ec071b4cc2ebb6109a1a877101b19))
73+
74+
- **skill**: Validate before the first write, and cover the task settings
75+
([#204](https://github.com/OpenSemanticLab/osw-python/pull/204),
76+
[`ddd4445`](https://github.com/OpenSemanticLab/osw-python/commit/ddd44450c47ec071b4cc2ebb6109a1a877101b19))
77+
78+
### Build System
79+
80+
- **release**: Stamp the osw version into the osl-tasks skill
81+
([#204](https://github.com/OpenSemanticLab/osw-python/pull/204),
82+
[`ddd4445`](https://github.com/OpenSemanticLab/osw-python/commit/ddd44450c47ec071b4cc2ebb6109a1a877101b19))
83+
84+
- **release**: Stamp the osw version into the plugin manifest too
85+
([#204](https://github.com/OpenSemanticLab/osw-python/pull/204),
86+
[`ddd4445`](https://github.com/OpenSemanticLab/osw-python/commit/ddd44450c47ec071b4cc2ebb6109a1a877101b19))
87+
88+
### Documentation
89+
90+
- **service**: Correct the cause of the emptied reference lists
91+
([#204](https://github.com/OpenSemanticLab/osw-python/pull/204),
92+
[`ddd4445`](https://github.com/OpenSemanticLab/osw-python/commit/ddd44450c47ec071b4cc2ebb6109a1a877101b19))
93+
94+
- **service**: Name the two terms that could desync the skipped check
95+
([#204](https://github.com/OpenSemanticLab/osw-python/pull/204),
96+
[`ddd4445`](https://github.com/OpenSemanticLab/osw-python/commit/ddd44450c47ec071b4cc2ebb6109a1a877101b19))
97+
98+
- **skill**: Drive osl-tasks from the generic operations
99+
([#204](https://github.com/OpenSemanticLab/osw-python/pull/204),
100+
[`ddd4445`](https://github.com/OpenSemanticLab/osw-python/commit/ddd44450c47ec071b4cc2ebb6109a1a877101b19))
101+
102+
### Features
103+
104+
- **service**: Add generic schema, search and validation operations
105+
([#204](https://github.com/OpenSemanticLab/osw-python/pull/204),
106+
[`ddd4445`](https://github.com/OpenSemanticLab/osw-python/commit/ddd44450c47ec071b4cc2ebb6109a1a877101b19))
107+
108+
- **service**: Add schema field-usage operation
109+
([#204](https://github.com/OpenSemanticLab/osw-python/pull/204),
110+
[`ddd4445`](https://github.com/OpenSemanticLab/osw-python/commit/ddd44450c47ec071b4cc2ebb6109a1a877101b19))
111+
112+
- **service**: Add task and project operations with a Claude skill
113+
([#204](https://github.com/OpenSemanticLab/osw-python/pull/204),
114+
[`ddd4445`](https://github.com/OpenSemanticLab/osw-python/commit/ddd44450c47ec071b4cc2ebb6109a1a877101b19))
115+
116+
- **service**: Derive SMW property names from the category @context
117+
([#204](https://github.com/OpenSemanticLab/osw-python/pull/204),
118+
[`ddd4445`](https://github.com/OpenSemanticLab/osw-python/commit/ddd44450c47ec071b4cc2ebb6109a1a877101b19))
119+
120+
- **service**: Generic schema and search operations with an osl-tasks skill
121+
([#204](https://github.com/OpenSemanticLab/osw-python/pull/204),
122+
[`ddd4445`](https://github.com/OpenSemanticLab/osw-python/commit/ddd44450c47ec071b4cc2ebb6109a1a877101b19))
123+
124+
### Refactoring
125+
126+
- **service**: Drop the task read and render operations
127+
([#204](https://github.com/OpenSemanticLab/osw-python/pull/204),
128+
[`ddd4445`](https://github.com/OpenSemanticLab/osw-python/commit/ddd44450c47ec071b4cc2ebb6109a1a877101b19))
129+
130+
- **service**: Remove the task service module
131+
([#204](https://github.com/OpenSemanticLab/osw-python/pull/204),
132+
[`ddd4445`](https://github.com/OpenSemanticLab/osw-python/commit/ddd44450c47ec071b4cc2ebb6109a1a877101b19))
133+
134+
### Testing
135+
136+
- **release**: Check the version bump touches only the skill frontmatter
137+
([#204](https://github.com/OpenSemanticLab/osw-python/pull/204),
138+
[`ddd4445`](https://github.com/OpenSemanticLab/osw-python/commit/ddd44450c47ec071b4cc2ebb6109a1a877101b19))
139+
140+
- **release**: Cover CITATION.cff in the version stamping guards
141+
([#204](https://github.com/OpenSemanticLab/osw-python/pull/204),
142+
[`ddd4445`](https://github.com/OpenSemanticLab/osw-python/commit/ddd44450c47ec071b4cc2ebb6109a1a877101b19))
143+
144+
- **release**: Drop the version equality check
145+
([#204](https://github.com/OpenSemanticLab/osw-python/pull/204),
146+
[`ddd4445`](https://github.com/OpenSemanticLab/osw-python/commit/ddd44450c47ec071b4cc2ebb6109a1a877101b19))
147+
148+
149+
## v2.7.1 (2026-09-22)
150+
151+
### Bug Fixes
152+
153+
- **mcp**: Include the wikitext extra in the mcp extra
154+
([#203](https://github.com/OpenSemanticLab/osw-python/pull/203),
155+
[`aafbe22`](https://github.com/OpenSemanticLab/osw-python/commit/aafbe229a88208578c387d9481da0198df3d8f2a))
156+
157+
- **mcp**: Include wikitext in the mcp extra, streamline tools docs
158+
([#203](https://github.com/OpenSemanticLab/osw-python/pull/203),
159+
[`aafbe22`](https://github.com/OpenSemanticLab/osw-python/commit/aafbe229a88208578c387d9481da0198df3d8f2a))
160+
161+
### Documentation
162+
163+
- **mcp**: Note that uvx reuses an installed osw tool
164+
([#203](https://github.com/OpenSemanticLab/osw-python/pull/203),
165+
[`aafbe22`](https://github.com/OpenSemanticLab/osw-python/commit/aafbe229a88208578c387d9481da0198df3d8f2a))
166+
167+
- **tools**: Document uv tool install for osw and osw-mcp
168+
([#203](https://github.com/OpenSemanticLab/osw-python/pull/203),
169+
[`aafbe22`](https://github.com/OpenSemanticLab/osw-python/commit/aafbe229a88208578c387d9481da0198df3d8f2a))
170+
171+
- **tools**: Streamline install and registration guidance
172+
([#203](https://github.com/OpenSemanticLab/osw-python/pull/203),
173+
[`aafbe22`](https://github.com/OpenSemanticLab/osw-python/commit/aafbe229a88208578c387d9481da0198df3d8f2a))
174+
175+
176+
## v2.7.0 (2026-09-22)
177+
178+
### Features
179+
180+
- **cli,mcp**: Accept -h and -V/--version
181+
([#200](https://github.com/OpenSemanticLab/osw-python/pull/200),
182+
[`41e0162`](https://github.com/OpenSemanticLab/osw-python/commit/41e0162695849869d0c6f51173a4a8cc1e96188f))
183+
184+
### Testing
185+
186+
- **cli**: Check -h on every command, not three sample paths
187+
([#200](https://github.com/OpenSemanticLab/osw-python/pull/200),
188+
[`41e0162`](https://github.com/OpenSemanticLab/osw-python/commit/41e0162695849869d0c6f51173a4a8cc1e96188f))
189+
190+
191+
## v2.6.2 (2026-09-22)
192+
193+
### Bug Fixes
194+
195+
- **cli,mcp**: UTF-8 stderr, a stdout guard, and OSW_CRED_FILEPATH paths
196+
([#196](https://github.com/OpenSemanticLab/osw-python/pull/196),
197+
[`0d0b2b6`](https://github.com/OpenSemanticLab/osw-python/commit/0d0b2b63cf36562d693592e07b2752fac84dc908))
198+
199+
- **config**: Expand a leading ~ in OSW_CRED_FILEPATH
200+
([#196](https://github.com/OpenSemanticLab/osw-python/pull/196),
201+
[`0d0b2b6`](https://github.com/OpenSemanticLab/osw-python/commit/0d0b2b63cf36562d693592e07b2752fac84dc908))
202+
203+
- **mcp**: Encode the osw-mcp startup report as UTF-8
204+
([#196](https://github.com/OpenSemanticLab/osw-python/pull/196),
205+
[`0d0b2b6`](https://github.com/OpenSemanticLab/osw-python/commit/0d0b2b63cf36562d693592e07b2752fac84dc908))
206+
207+
- **mcp**: Resolve a relative OSW_CRED_FILEPATH at startup
208+
([#196](https://github.com/OpenSemanticLab/osw-python/pull/196),
209+
[`0d0b2b6`](https://github.com/OpenSemanticLab/osw-python/commit/0d0b2b63cf36562d693592e07b2752fac84dc908))
210+
211+
212+
## v2.6.1 (2026-09-21)
213+
214+
### Bug Fixes
215+
216+
- **core**: Never write unparseable entity.py from fetch_schema
217+
([#167](https://github.com/OpenSemanticLab/osw-python/pull/167),
218+
[`8a830d9`](https://github.com/OpenSemanticLab/osw-python/commit/8a830d981c19eada131de5713350802d0f732df5))
219+
220+
13221
## v2.6.0 (2026-09-21)
14222

15223
### Bug Fixes

‎CITATION.cff‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ message: "If you use this software, please cite it as below."
33
type: software
44
title: "OpenSemanticWorld Python Package (osw-python)"
55
# Managed by python-semantic-release (version_variables). Do not edit by hand.
6-
version: 2.6.0
6+
version: 2.9.1
77
abstract: "Python toolset for data processing, queries, wikicode generation and page manipulation within OpenSemanticLab: work with OpenSemanticLab instances as typed pydantic entities, query with semantic search, generate models from wiki schemas, and write changes back."
88
repository-code: "https://github.com/OpenSemanticLab/osw-python"
99
url: "https://opensemanticlab.github.io/osw-python/"

‎CONTRIBUTING.md‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ make install # environment + pre-commit hooks
1919
4. Commit, push and open a pull request
2020

2121
`make help` lists all targets; the
22-
[development guide](https://opensemanticlab.github.io/osw-python/dev/)
22+
[development guide](https://opensemanticlab.github.io/osw-python/latest/dev/)
2323
covers details such as running the integration tests and serving the docs
2424
locally.
2525

‎README.md‎

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ pip install osw
2323

2424
Optional extras (`osw[wikitext]`, `osw[DB]`, `osw[S3]`, `osw[dataimport]`,
2525
`osw[UI]`, `osw[mcp]`, `osw[all]`) are described in the
26-
[Get Started guide](https://opensemanticlab.github.io/osw-python/get-started/).
26+
[Get Started guide](https://opensemanticlab.github.io/osw-python/latest/get-started/).
2727

2828
## Quickstart
2929

@@ -50,14 +50,14 @@ osw search ask '[[Category:Item]]' --limit 5
5050
```
5151

5252
Commands, tools and their configuration are described in the
53-
[Tools guide](https://opensemanticlab.github.io/osw-python/tools/).
53+
[Tools guide](https://opensemanticlab.github.io/osw-python/latest/tools/).
5454

5555
## Logging
5656

5757
osw reports what it is doing on the `osw` logger at INFO by default. Levels,
5858
the `OSW_LOG_LEVEL` environment variable and how to collect the records in your
5959
own logging setup are described in the
60-
[Get Started guide](https://opensemanticlab.github.io/osw-python/get-started/#logging).
60+
[Get Started guide](https://opensemanticlab.github.io/osw-python/latest/get-started/#logging).
6161

6262
## Contributing
6363

‎docs/dev.md‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -66,8 +66,8 @@ excluded by default:
6666

6767
Integration tests run against a live wiki and need credentials; tests
6868
whose credentials are missing skip instead of fail. CI runs them on every
69-
pull request into `main` (workflow `integration.yml`), so they gate the
70-
release rather than run after it.
69+
pull request into `main` or `stage` (workflow `integration.yml`), so they
70+
gate the release rather than run after it.
7171

7272
=== "make"
7373

0 commit comments

Comments
 (0)