ms-tau-sdk 2.0.15.dev63__tar.gz → 2.0.16.dev64__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {ms_tau_sdk-2.0.15.dev63 → ms_tau_sdk-2.0.16.dev64}/CHANGELOG.md +9 -0
- {ms_tau_sdk-2.0.15.dev63 → ms_tau_sdk-2.0.16.dev64}/PKG-INFO +1 -1
- {ms_tau_sdk-2.0.15.dev63 → ms_tau_sdk-2.0.16.dev64}/pyproject.toml +1 -1
- {ms_tau_sdk-2.0.15.dev63 → ms_tau_sdk-2.0.16.dev64}/src/ms_tau_sdk/agent_skills/tau_project_customization/SKILL.md +5 -4
- {ms_tau_sdk-2.0.15.dev63 → ms_tau_sdk-2.0.16.dev64}/src/ms_tau_sdk/agent_skills/tau_security_and_access/SKILL.md +27 -0
- {ms_tau_sdk-2.0.15.dev63 → ms_tau_sdk-2.0.16.dev64}/.gitignore +0 -0
- {ms_tau_sdk-2.0.15.dev63 → ms_tau_sdk-2.0.16.dev64}/README.md +0 -0
- {ms_tau_sdk-2.0.15.dev63 → ms_tau_sdk-2.0.16.dev64}/packages/tau-board/src/ms_tau_board/__init__.py +0 -0
- {ms_tau_sdk-2.0.15.dev63 → ms_tau_sdk-2.0.16.dev64}/packages/tau-board/src/ms_tau_board/app.py +0 -0
- {ms_tau_sdk-2.0.15.dev63 → ms_tau_sdk-2.0.16.dev64}/packages/tau-board/src/ms_tau_board/cli.py +0 -0
- {ms_tau_sdk-2.0.15.dev63 → ms_tau_sdk-2.0.16.dev64}/packages/tau-board/src/ms_tau_board/config.py +0 -0
- {ms_tau_sdk-2.0.15.dev63 → ms_tau_sdk-2.0.16.dev64}/packages/tau-board/src/ms_tau_board/env_file.py +0 -0
- {ms_tau_sdk-2.0.15.dev63 → ms_tau_sdk-2.0.16.dev64}/packages/tau-board/src/ms_tau_board/logs.py +0 -0
- {ms_tau_sdk-2.0.15.dev63 → ms_tau_sdk-2.0.16.dev64}/packages/tau-board/src/ms_tau_board/proxy.py +0 -0
- {ms_tau_sdk-2.0.15.dev63 → ms_tau_sdk-2.0.16.dev64}/packages/tau-board/src/ms_tau_board/state.py +0 -0
- {ms_tau_sdk-2.0.15.dev63 → ms_tau_sdk-2.0.16.dev64}/packages/tau-board/src/ms_tau_board/static/BULMA-LICENSE.txt +0 -0
- {ms_tau_sdk-2.0.15.dev63 → ms_tau_sdk-2.0.16.dev64}/packages/tau-board/src/ms_tau_board/static/app.js +0 -0
- {ms_tau_sdk-2.0.15.dev63 → ms_tau_sdk-2.0.16.dev64}/packages/tau-board/src/ms_tau_board/static/board.css +0 -0
- {ms_tau_sdk-2.0.15.dev63 → ms_tau_sdk-2.0.16.dev64}/packages/tau-board/src/ms_tau_board/static/bulma.min.css +0 -0
- {ms_tau_sdk-2.0.15.dev63 → ms_tau_sdk-2.0.16.dev64}/packages/tau-board/src/ms_tau_board/static/index.html +0 -0
- {ms_tau_sdk-2.0.15.dev63 → ms_tau_sdk-2.0.16.dev64}/src/ms_tau_sdk/__init__.py +0 -0
- {ms_tau_sdk-2.0.15.dev63 → ms_tau_sdk-2.0.16.dev64}/src/ms_tau_sdk/agent_skills/tau_a2a_runtime_adapter/SKILL.md +0 -0
- {ms_tau_sdk-2.0.15.dev63 → ms_tau_sdk-2.0.16.dev64}/src/ms_tau_sdk/agent_skills/tau_local_development/SKILL.md +0 -0
- {ms_tau_sdk-2.0.15.dev63 → ms_tau_sdk-2.0.16.dev64}/src/ms_tau_sdk/agent_skills/tau_repository_integration/SKILL.md +0 -0
- {ms_tau_sdk-2.0.15.dev63 → ms_tau_sdk-2.0.16.dev64}/src/ms_tau_sdk/api/__init__.py +0 -0
- {ms_tau_sdk-2.0.15.dev63 → ms_tau_sdk-2.0.16.dev64}/src/ms_tau_sdk/api/a2a.py +0 -0
- {ms_tau_sdk-2.0.15.dev63 → ms_tau_sdk-2.0.16.dev64}/src/ms_tau_sdk/api/chat.py +0 -0
- {ms_tau_sdk-2.0.15.dev63 → ms_tau_sdk-2.0.16.dev64}/src/ms_tau_sdk/api/conversations.py +0 -0
- {ms_tau_sdk-2.0.15.dev63 → ms_tau_sdk-2.0.16.dev64}/src/ms_tau_sdk/api/dependencies.py +0 -0
- {ms_tau_sdk-2.0.15.dev63 → ms_tau_sdk-2.0.16.dev64}/src/ms_tau_sdk/api/health.py +0 -0
- {ms_tau_sdk-2.0.15.dev63 → ms_tau_sdk-2.0.16.dev64}/src/ms_tau_sdk/api/inspection.py +0 -0
- {ms_tau_sdk-2.0.15.dev63 → ms_tau_sdk-2.0.16.dev64}/src/ms_tau_sdk/api/local_chat.py +0 -0
- {ms_tau_sdk-2.0.15.dev63 → ms_tau_sdk-2.0.16.dev64}/src/ms_tau_sdk/api/models.py +0 -0
- {ms_tau_sdk-2.0.15.dev63 → ms_tau_sdk-2.0.16.dev64}/src/ms_tau_sdk/api/request_identity.py +0 -0
- {ms_tau_sdk-2.0.15.dev63 → ms_tau_sdk-2.0.16.dev64}/src/ms_tau_sdk/api/sessions.py +0 -0
- {ms_tau_sdk-2.0.15.dev63 → ms_tau_sdk-2.0.16.dev64}/src/ms_tau_sdk/app.py +0 -0
- {ms_tau_sdk-2.0.15.dev63 → ms_tau_sdk-2.0.16.dev64}/src/ms_tau_sdk/application.py +0 -0
- {ms_tau_sdk-2.0.15.dev63 → ms_tau_sdk-2.0.16.dev64}/src/ms_tau_sdk/backend/__init__.py +0 -0
- {ms_tau_sdk-2.0.15.dev63 → ms_tau_sdk-2.0.16.dev64}/src/ms_tau_sdk/backend/assertions.py +0 -0
- {ms_tau_sdk-2.0.15.dev63 → ms_tau_sdk-2.0.16.dev64}/src/ms_tau_sdk/backend/auth.py +0 -0
- {ms_tau_sdk-2.0.15.dev63 → ms_tau_sdk-2.0.16.dev64}/src/ms_tau_sdk/backend/client.py +0 -0
- {ms_tau_sdk-2.0.15.dev63 → ms_tau_sdk-2.0.16.dev64}/src/ms_tau_sdk/backend/local.py +0 -0
- {ms_tau_sdk-2.0.15.dev63 → ms_tau_sdk-2.0.16.dev64}/src/ms_tau_sdk/backend/mcp.py +0 -0
- {ms_tau_sdk-2.0.15.dev63 → ms_tau_sdk-2.0.16.dev64}/src/ms_tau_sdk/backend/models.py +0 -0
- {ms_tau_sdk-2.0.15.dev63 → ms_tau_sdk-2.0.16.dev64}/src/ms_tau_sdk/backend/routes.py +0 -0
- {ms_tau_sdk-2.0.15.dev63 → ms_tau_sdk-2.0.16.dev64}/src/ms_tau_sdk/backend/team_memberships.py +0 -0
- {ms_tau_sdk-2.0.15.dev63 → ms_tau_sdk-2.0.16.dev64}/src/ms_tau_sdk/cli.py +0 -0
- {ms_tau_sdk-2.0.15.dev63 → ms_tau_sdk-2.0.16.dev64}/src/ms_tau_sdk/errors.py +0 -0
- {ms_tau_sdk-2.0.15.dev63 → ms_tau_sdk-2.0.16.dev64}/src/ms_tau_sdk/logging.py +0 -0
- {ms_tau_sdk-2.0.15.dev63 → ms_tau_sdk-2.0.16.dev64}/src/ms_tau_sdk/protocols/__init__.py +0 -0
- {ms_tau_sdk-2.0.15.dev63 → ms_tau_sdk-2.0.16.dev64}/src/ms_tau_sdk/protocols/a2a_failure.py +0 -0
- {ms_tau_sdk-2.0.15.dev63 → ms_tau_sdk-2.0.16.dev64}/src/ms_tau_sdk/protocols/a2a_message.py +0 -0
- {ms_tau_sdk-2.0.15.dev63 → ms_tau_sdk-2.0.16.dev64}/src/ms_tau_sdk/protocols/a2a_roles.py +0 -0
- {ms_tau_sdk-2.0.15.dev63 → ms_tau_sdk-2.0.16.dev64}/src/ms_tau_sdk/protocols/assistant_ui.py +0 -0
- {ms_tau_sdk-2.0.15.dev63 → ms_tau_sdk-2.0.16.dev64}/src/ms_tau_sdk/protocols/chat_history.py +0 -0
- {ms_tau_sdk-2.0.15.dev63 → ms_tau_sdk-2.0.16.dev64}/src/ms_tau_sdk/protocols/strict_json.py +0 -0
- {ms_tau_sdk-2.0.15.dev63 → ms_tau_sdk-2.0.16.dev64}/src/ms_tau_sdk/providers/__init__.py +0 -0
- {ms_tau_sdk-2.0.15.dev63 → ms_tau_sdk-2.0.16.dev64}/src/ms_tau_sdk/providers/definitions.py +0 -0
- {ms_tau_sdk-2.0.15.dev63 → ms_tau_sdk-2.0.16.dev64}/src/ms_tau_sdk/providers/factory.py +0 -0
- {ms_tau_sdk-2.0.15.dev63 → ms_tau_sdk-2.0.16.dev64}/src/ms_tau_sdk/providers/tau_compat.py +0 -0
- {ms_tau_sdk-2.0.15.dev63 → ms_tau_sdk-2.0.16.dev64}/src/ms_tau_sdk/resources/SYSTEM.md +0 -0
- {ms_tau_sdk-2.0.15.dev63 → ms_tau_sdk-2.0.16.dev64}/src/ms_tau_sdk/resources/__init__.py +0 -0
- {ms_tau_sdk-2.0.15.dev63 → ms_tau_sdk-2.0.16.dev64}/src/ms_tau_sdk/resources/loader.py +0 -0
- {ms_tau_sdk-2.0.15.dev63 → ms_tau_sdk-2.0.16.dev64}/src/ms_tau_sdk/resources/prompts/review-code-repository.md +0 -0
- {ms_tau_sdk-2.0.15.dev63 → ms_tau_sdk-2.0.16.dev64}/src/ms_tau_sdk/runtime/__init__.py +0 -0
- {ms_tau_sdk-2.0.15.dev63 → ms_tau_sdk-2.0.16.dev64}/src/ms_tau_sdk/runtime/deployment_health.py +0 -0
- {ms_tau_sdk-2.0.15.dev63 → ms_tau_sdk-2.0.16.dev64}/src/ms_tau_sdk/runtime/events.py +0 -0
- {ms_tau_sdk-2.0.15.dev63 → ms_tau_sdk-2.0.16.dev64}/src/ms_tau_sdk/runtime/extensions.py +0 -0
- {ms_tau_sdk-2.0.15.dev63 → ms_tau_sdk-2.0.16.dev64}/src/ms_tau_sdk/runtime/failures.py +0 -0
- {ms_tau_sdk-2.0.15.dev63 → ms_tau_sdk-2.0.16.dev64}/src/ms_tau_sdk/runtime/live_turns.py +0 -0
- {ms_tau_sdk-2.0.15.dev63 → ms_tau_sdk-2.0.16.dev64}/src/ms_tau_sdk/runtime/manager.py +0 -0
- {ms_tau_sdk-2.0.15.dev63 → ms_tau_sdk-2.0.16.dev64}/src/ms_tau_sdk/runtime/observability.py +0 -0
- {ms_tau_sdk-2.0.15.dev63 → ms_tau_sdk-2.0.16.dev64}/src/ms_tau_sdk/runtime/provenance.py +0 -0
- {ms_tau_sdk-2.0.15.dev63 → ms_tau_sdk-2.0.16.dev64}/src/ms_tau_sdk/runtime/requester.py +0 -0
- {ms_tau_sdk-2.0.15.dev63 → ms_tau_sdk-2.0.16.dev64}/src/ms_tau_sdk/runtime/session.py +0 -0
- {ms_tau_sdk-2.0.15.dev63 → ms_tau_sdk-2.0.16.dev64}/src/ms_tau_sdk/runtime/snapshots.py +0 -0
- {ms_tau_sdk-2.0.15.dev63 → ms_tau_sdk-2.0.16.dev64}/src/ms_tau_sdk/runtime/task_context.py +0 -0
- {ms_tau_sdk-2.0.15.dev63 → ms_tau_sdk-2.0.16.dev64}/src/ms_tau_sdk/sessions/__init__.py +0 -0
- {ms_tau_sdk-2.0.15.dev63 → ms_tau_sdk-2.0.16.dev64}/src/ms_tau_sdk/sessions/storage.py +0 -0
- {ms_tau_sdk-2.0.15.dev63 → ms_tau_sdk-2.0.16.dev64}/src/ms_tau_sdk/settings.py +0 -0
- {ms_tau_sdk-2.0.15.dev63 → ms_tau_sdk-2.0.16.dev64}/src/ms_tau_sdk/skills.py +0 -0
- {ms_tau_sdk-2.0.15.dev63 → ms_tau_sdk-2.0.16.dev64}/src/ms_tau_sdk/tools/__init__.py +0 -0
- {ms_tau_sdk-2.0.15.dev63 → ms_tau_sdk-2.0.16.dev64}/src/ms_tau_sdk/tools/mainsequence_mcp.py +0 -0
- {ms_tau_sdk-2.0.15.dev63 → ms_tau_sdk-2.0.16.dev64}/src/ms_tau_sdk/tools/mcp_applications.py +0 -0
- {ms_tau_sdk-2.0.15.dev63 → ms_tau_sdk-2.0.16.dev64}/src/ms_tau_sdk/tools/mcp_connection.py +0 -0
- {ms_tau_sdk-2.0.15.dev63 → ms_tau_sdk-2.0.16.dev64}/src/ms_tau_sdk/tools/skill_read.py +0 -0
- {ms_tau_sdk-2.0.15.dev63 → ms_tau_sdk-2.0.16.dev64}/src/ms_tau_sdk/tools/task_control.py +0 -0
|
@@ -1,5 +1,14 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## Unreleased
|
|
4
|
+
|
|
5
|
+
- **The Tau skills say when and how a tool checks the person's teams
|
|
6
|
+
([#103](https://github.com/mainsequence-sdk/ms-tau-sdk/issues/103)).** `tau_security_and_access`
|
|
7
|
+
has a section "Checking the person's teams". A delegated call already reaches what the person's
|
|
8
|
+
teams share, so a tool rarely checks teams itself; a tool whose own policy names teams asks with
|
|
9
|
+
`in_teams()`. That answers only while the person is the request's verified caller, and an error
|
|
10
|
+
is never a membership answer. `tau_project_customization` points to the section.
|
|
11
|
+
|
|
3
12
|
## 2.0.15 — 2026-10-15
|
|
4
13
|
|
|
5
14
|
- **Team membership on demand; the caller assertion's team list is deprecated
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: ms-tau-sdk
|
|
3
|
-
Version: 2.0.
|
|
3
|
+
Version: 2.0.16.dev64
|
|
4
4
|
Summary: Workspace-bound Tau application primitives for Main Sequence projects
|
|
5
5
|
Project-URL: Changelog, https://github.com/mainsequence-sdk/ms-tau-sdk/blob/development/CHANGELOG.md
|
|
6
6
|
Project-URL: Documentation, https://github.com/mainsequence-sdk/ms-tau-sdk/tree/development/docs
|
|
@@ -160,10 +160,11 @@ async def revenue_by_region(tool_call_id, arguments, signal=None, on_update=None
|
|
|
160
160
|
|
|
161
161
|
- `current_requester()` returns the person the turn serves, with `uid` and
|
|
162
162
|
`await in_teams(team_uids, *, max_age_seconds=None)`, or `None`. `in_teams()` answers while the
|
|
163
|
-
person is the verified caller of the turn's request
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
person's UID from tool arguments, the
|
|
163
|
+
person is the verified caller of the turn's request (see `tau_security_and_access`, "Checking the
|
|
164
|
+
person's teams"); `team_uids` is deprecated. The platform names that person when the turn
|
|
165
|
+
starts, whoever called; it is `None` when the platform names nobody, in local mode, and in code
|
|
166
|
+
outside a turn. Only it names the requester: never take a person's UID from tool arguments, the
|
|
167
|
+
prompt, history, or a header.
|
|
167
168
|
- `platform_client()` returns a client. `await client.request("GET", "/api/v1/...")` calls a
|
|
168
169
|
platform API path, and `await client.call_release(release_uid, method, path, ...)` calls another
|
|
169
170
|
platform application. Both return an `httpx.Response`.
|
|
@@ -207,6 +207,33 @@ How sharing works:
|
|
|
207
207
|
tool can use them when its design needs to, for example to refuse a team key where it expects a
|
|
208
208
|
personal one. That is a choice of the tool, not a platform rule.
|
|
209
209
|
|
|
210
|
+
## Checking the person's teams
|
|
211
|
+
|
|
212
|
+
A delegated call already reaches exactly what the person can, including what is shared with their
|
|
213
|
+
teams, so a tool rarely checks teams itself. When the tool's own policy names teams, ask the
|
|
214
|
+
platform with `in_teams()`:
|
|
215
|
+
|
|
216
|
+
```python
|
|
217
|
+
person = current_requester()
|
|
218
|
+
if person is None or REPORTS_TEAM_UID not in await person.in_teams([REPORTS_TEAM_UID]):
|
|
219
|
+
return AgentToolResult(content=[TextContent(text="These reports are for the team's members.")])
|
|
220
|
+
```
|
|
221
|
+
|
|
222
|
+
- `await in_teams(team_uids, *, max_age_seconds=None)` returns the subset of `team_uids` the
|
|
223
|
+
person is an active member of, as a `frozenset`. Unknown and inactive teams are left out.
|
|
224
|
+
- On the turn's requester it answers only while that person is the verified caller of the request
|
|
225
|
+
the turn runs in, such as a chat or A2A Message they sent. A turn with no such request raises
|
|
226
|
+
`TauSDKError`: a Task attempt the platform dispatches, a turn that resumes a caller delivery, or
|
|
227
|
+
work another Agent asked for. Refuse the action then; never read the error as a membership
|
|
228
|
+
answer. An HTTP handler asks for its caller with `await request.state.user.in_teams(...)`.
|
|
229
|
+
- The process reuses an answer across requests for `TAU_TEAM_MEMBERSHIP_CACHE_SECONDS` (default
|
|
230
|
+
`0`: only within its request); set it in `harness_agent.spec.env_vars`. `max_age_seconds=0`
|
|
231
|
+
always asks the platform: use it before a write that must see a removal at once.
|
|
232
|
+
- A check the platform cannot answer raises `BackendError`; it never answers "not a member".
|
|
233
|
+
- `team_uids` on the requester is deprecated and warns when read. It is empty when the turn does
|
|
234
|
+
not know the person's teams, and raises when the caller's assertion carried no team list, as
|
|
235
|
+
every assertion will once the platform stops signing them. Use `in_teams()`.
|
|
236
|
+
|
|
210
237
|
## What never reaches the model
|
|
211
238
|
|
|
212
239
|
Tool results, their `details`, and errors can reach the model provider and the session history.
|
|
File without changes
|
|
File without changes
|
{ms_tau_sdk-2.0.15.dev63 → ms_tau_sdk-2.0.16.dev64}/packages/tau-board/src/ms_tau_board/__init__.py
RENAMED
|
File without changes
|
{ms_tau_sdk-2.0.15.dev63 → ms_tau_sdk-2.0.16.dev64}/packages/tau-board/src/ms_tau_board/app.py
RENAMED
|
File without changes
|
{ms_tau_sdk-2.0.15.dev63 → ms_tau_sdk-2.0.16.dev64}/packages/tau-board/src/ms_tau_board/cli.py
RENAMED
|
File without changes
|
{ms_tau_sdk-2.0.15.dev63 → ms_tau_sdk-2.0.16.dev64}/packages/tau-board/src/ms_tau_board/config.py
RENAMED
|
File without changes
|
{ms_tau_sdk-2.0.15.dev63 → ms_tau_sdk-2.0.16.dev64}/packages/tau-board/src/ms_tau_board/env_file.py
RENAMED
|
File without changes
|
{ms_tau_sdk-2.0.15.dev63 → ms_tau_sdk-2.0.16.dev64}/packages/tau-board/src/ms_tau_board/logs.py
RENAMED
|
File without changes
|
{ms_tau_sdk-2.0.15.dev63 → ms_tau_sdk-2.0.16.dev64}/packages/tau-board/src/ms_tau_board/proxy.py
RENAMED
|
File without changes
|
{ms_tau_sdk-2.0.15.dev63 → ms_tau_sdk-2.0.16.dev64}/packages/tau-board/src/ms_tau_board/state.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{ms_tau_sdk-2.0.15.dev63 → ms_tau_sdk-2.0.16.dev64}/src/ms_tau_sdk/backend/team_memberships.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{ms_tau_sdk-2.0.15.dev63 → ms_tau_sdk-2.0.16.dev64}/src/ms_tau_sdk/protocols/assistant_ui.py
RENAMED
|
File without changes
|
{ms_tau_sdk-2.0.15.dev63 → ms_tau_sdk-2.0.16.dev64}/src/ms_tau_sdk/protocols/chat_history.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{ms_tau_sdk-2.0.15.dev63 → ms_tau_sdk-2.0.16.dev64}/src/ms_tau_sdk/runtime/deployment_health.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{ms_tau_sdk-2.0.15.dev63 → ms_tau_sdk-2.0.16.dev64}/src/ms_tau_sdk/tools/mainsequence_mcp.py
RENAMED
|
File without changes
|
{ms_tau_sdk-2.0.15.dev63 → ms_tau_sdk-2.0.16.dev64}/src/ms_tau_sdk/tools/mcp_applications.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|