mainsequence 9.0.6.dev36__tar.gz → 9.0.6.dev38__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.
- {mainsequence-9.0.6.dev36/mainsequence.egg-info → mainsequence-9.0.6.dev38}/PKG-INFO +1 -1
- {mainsequence-9.0.6.dev36 → mainsequence-9.0.6.dev38}/agent_scaffold/skills/maintenance/code_repository_maintenance/SKILL.md +98 -0
- {mainsequence-9.0.6.dev36 → mainsequence-9.0.6.dev38/mainsequence.egg-info}/PKG-INFO +1 -1
- {mainsequence-9.0.6.dev36 → mainsequence-9.0.6.dev38}/pyproject.toml +1 -1
- {mainsequence-9.0.6.dev36 → mainsequence-9.0.6.dev38}/LICENSE +0 -0
- {mainsequence-9.0.6.dev36 → mainsequence-9.0.6.dev38}/README.md +0 -0
- {mainsequence-9.0.6.dev36 → mainsequence-9.0.6.dev38}/agent_scaffold/AGENTS.md +0 -0
- {mainsequence-9.0.6.dev36 → mainsequence-9.0.6.dev38}/agent_scaffold/skills/a2a_sdk_execution/SKILL.md +0 -0
- {mainsequence-9.0.6.dev36 → mainsequence-9.0.6.dev38}/agent_scaffold/skills/application_surfaces/api_surfaces/SKILL.md +0 -0
- {mainsequence-9.0.6.dev36 → mainsequence-9.0.6.dev38}/agent_scaffold/skills/mainsequence-inference/SKILL.md +0 -0
- {mainsequence-9.0.6.dev36 → mainsequence-9.0.6.dev38}/agent_scaffold/skills/maintenance/bug_auditor/SKILL.md +0 -0
- {mainsequence-9.0.6.dev36 → mainsequence-9.0.6.dev38}/agent_scaffold/skills/maintenance/metatables_transition/SKILL.md +0 -0
- {mainsequence-9.0.6.dev36 → mainsequence-9.0.6.dev38}/agent_scaffold/skills/platform_operations/access_control_and_sharing/SKILL.md +0 -0
- {mainsequence-9.0.6.dev36 → mainsequence-9.0.6.dev38}/agent_scaffold/skills/platform_operations/orchestration_and_releases/SKILL.md +0 -0
- {mainsequence-9.0.6.dev36 → mainsequence-9.0.6.dev38}/agent_scaffold/skills/sdk_code_repository_execution/SKILL.md +0 -0
- {mainsequence-9.0.6.dev36 → mainsequence-9.0.6.dev38}/mainsequence/__init__.py +0 -0
- {mainsequence-9.0.6.dev36 → mainsequence-9.0.6.dev38}/mainsequence/__main__.py +0 -0
- {mainsequence-9.0.6.dev36 → mainsequence-9.0.6.dev38}/mainsequence/_request_identity.py +0 -0
- {mainsequence-9.0.6.dev36 → mainsequence-9.0.6.dev38}/mainsequence/bootstrap.py +0 -0
- {mainsequence-9.0.6.dev36 → mainsequence-9.0.6.dev38}/mainsequence/cli/__init__.py +0 -0
- {mainsequence-9.0.6.dev36 → mainsequence-9.0.6.dev38}/mainsequence/cli/api.py +0 -0
- {mainsequence-9.0.6.dev36 → mainsequence-9.0.6.dev38}/mainsequence/cli/browser_auth.py +0 -0
- {mainsequence-9.0.6.dev36 → mainsequence-9.0.6.dev38}/mainsequence/cli/cli.py +0 -0
- {mainsequence-9.0.6.dev36 → mainsequence-9.0.6.dev38}/mainsequence/cli/code_repository_status.py +0 -0
- {mainsequence-9.0.6.dev36 → mainsequence-9.0.6.dev38}/mainsequence/cli/config.py +0 -0
- {mainsequence-9.0.6.dev36 → mainsequence-9.0.6.dev38}/mainsequence/cli/docker_utils.py +0 -0
- {mainsequence-9.0.6.dev36 → mainsequence-9.0.6.dev38}/mainsequence/cli/doctor.py +0 -0
- {mainsequence-9.0.6.dev36 → mainsequence-9.0.6.dev38}/mainsequence/cli/local_ops.py +0 -0
- {mainsequence-9.0.6.dev36 → mainsequence-9.0.6.dev38}/mainsequence/cli/model_filters.py +0 -0
- {mainsequence-9.0.6.dev36 → mainsequence-9.0.6.dev38}/mainsequence/cli/pydantic_cli.py +0 -0
- {mainsequence-9.0.6.dev36 → mainsequence-9.0.6.dev38}/mainsequence/cli/sdk_utils.py +0 -0
- {mainsequence-9.0.6.dev36 → mainsequence-9.0.6.dev38}/mainsequence/cli/ssh_utils.py +0 -0
- {mainsequence-9.0.6.dev36 → mainsequence-9.0.6.dev38}/mainsequence/cli/ui.py +0 -0
- {mainsequence-9.0.6.dev36 → mainsequence-9.0.6.dev38}/mainsequence/client/__init__.py +0 -0
- {mainsequence-9.0.6.dev36 → mainsequence-9.0.6.dev38}/mainsequence/client/agent_runtime_models.py +0 -0
- {mainsequence-9.0.6.dev36 → mainsequence-9.0.6.dev38}/mainsequence/client/base.py +0 -0
- {mainsequence-9.0.6.dev36 → mainsequence-9.0.6.dev38}/mainsequence/client/client.py +0 -0
- {mainsequence-9.0.6.dev36 → mainsequence-9.0.6.dev38}/mainsequence/client/compute_validation.py +0 -0
- {mainsequence-9.0.6.dev36 → mainsequence-9.0.6.dev38}/mainsequence/client/exceptions.py +0 -0
- {mainsequence-9.0.6.dev36 → mainsequence-9.0.6.dev38}/mainsequence/client/github_issues.py +0 -0
- {mainsequence-9.0.6.dev36 → mainsequence-9.0.6.dev38}/mainsequence/client/inference.py +0 -0
- {mainsequence-9.0.6.dev36 → mainsequence-9.0.6.dev38}/mainsequence/client/models_foundry.py +0 -0
- {mainsequence-9.0.6.dev36 → mainsequence-9.0.6.dev38}/mainsequence/client/models_helpers.py +0 -0
- {mainsequence-9.0.6.dev36 → mainsequence-9.0.6.dev38}/mainsequence/client/models_user.py +0 -0
- {mainsequence-9.0.6.dev36 → mainsequence-9.0.6.dev38}/mainsequence/client/observability.py +0 -0
- {mainsequence-9.0.6.dev36 → mainsequence-9.0.6.dev38}/mainsequence/client/utils.py +0 -0
- {mainsequence-9.0.6.dev36 → mainsequence-9.0.6.dev38}/mainsequence/client/value_sets.py +0 -0
- {mainsequence-9.0.6.dev36 → mainsequence-9.0.6.dev38}/mainsequence/code_repository_context.py +0 -0
- {mainsequence-9.0.6.dev36 → mainsequence-9.0.6.dev38}/mainsequence/code_repository_skills.py +0 -0
- {mainsequence-9.0.6.dev36 → mainsequence-9.0.6.dev38}/mainsequence/defaults.py +0 -0
- {mainsequence-9.0.6.dev36 → mainsequence-9.0.6.dev38}/mainsequence/instrumentation/__init__.py +0 -0
- {mainsequence-9.0.6.dev36 → mainsequence-9.0.6.dev38}/mainsequence/instrumentation/utils.py +0 -0
- {mainsequence-9.0.6.dev36 → mainsequence-9.0.6.dev38}/mainsequence/logconf.py +0 -0
- {mainsequence-9.0.6.dev36 → mainsequence-9.0.6.dev38}/mainsequence/repository_identity_security.py +0 -0
- {mainsequence-9.0.6.dev36 → mainsequence-9.0.6.dev38}/mainsequence/runtime_flags.py +0 -0
- {mainsequence-9.0.6.dev36 → mainsequence-9.0.6.dev38}/mainsequence/scaffold_skills.py +0 -0
- {mainsequence-9.0.6.dev36 → mainsequence-9.0.6.dev38}/mainsequence/server/__init__.py +0 -0
- {mainsequence-9.0.6.dev36 → mainsequence-9.0.6.dev38}/mainsequence/server/caller_assertions.py +0 -0
- {mainsequence-9.0.6.dev36 → mainsequence-9.0.6.dev38}/mainsequence/server/fastapi.py +0 -0
- {mainsequence-9.0.6.dev36 → mainsequence-9.0.6.dev38}/mainsequence.egg-info/SOURCES.txt +0 -0
- {mainsequence-9.0.6.dev36 → mainsequence-9.0.6.dev38}/mainsequence.egg-info/dependency_links.txt +0 -0
- {mainsequence-9.0.6.dev36 → mainsequence-9.0.6.dev38}/mainsequence.egg-info/entry_points.txt +0 -0
- {mainsequence-9.0.6.dev36 → mainsequence-9.0.6.dev38}/mainsequence.egg-info/requires.txt +0 -0
- {mainsequence-9.0.6.dev36 → mainsequence-9.0.6.dev38}/mainsequence.egg-info/top_level.txt +0 -0
- {mainsequence-9.0.6.dev36 → mainsequence-9.0.6.dev38}/setup.cfg +0 -0
- {mainsequence-9.0.6.dev36 → mainsequence-9.0.6.dev38}/tests/test_auth_bootstrap.py +0 -0
- {mainsequence-9.0.6.dev36 → mainsequence-9.0.6.dev38}/tests/test_auth_precedence.py +0 -0
- {mainsequence-9.0.6.dev36 → mainsequence-9.0.6.dev38}/tests/test_caller_assertions.py +0 -0
- {mainsequence-9.0.6.dev36 → mainsequence-9.0.6.dev38}/tests/test_canonical_api_route_contract.py +0 -0
- {mainsequence-9.0.6.dev36 → mainsequence-9.0.6.dev38}/tests/test_cli.py +0 -0
- {mainsequence-9.0.6.dev36 → mainsequence-9.0.6.dev38}/tests/test_cli_auth_contract.py +0 -0
- {mainsequence-9.0.6.dev36 → mainsequence-9.0.6.dev38}/tests/test_cli_browser_auth.py +0 -0
- {mainsequence-9.0.6.dev36 → mainsequence-9.0.6.dev38}/tests/test_cli_secure_storage.py +0 -0
- {mainsequence-9.0.6.dev36 → mainsequence-9.0.6.dev38}/tests/test_client.py +0 -0
- {mainsequence-9.0.6.dev36 → mainsequence-9.0.6.dev38}/tests/test_code_repository_branch_contract.py +0 -0
- {mainsequence-9.0.6.dev36 → mainsequence-9.0.6.dev38}/tests/test_code_repository_documentation_contract.py +0 -0
- {mainsequence-9.0.6.dev36 → mainsequence-9.0.6.dev38}/tests/test_code_repository_runtime_context.py +0 -0
- {mainsequence-9.0.6.dev36 → mainsequence-9.0.6.dev38}/tests/test_code_repository_skills.py +0 -0
- {mainsequence-9.0.6.dev36 → mainsequence-9.0.6.dev38}/tests/test_dependency_extras.py +0 -0
- {mainsequence-9.0.6.dev36 → mainsequence-9.0.6.dev38}/tests/test_dev_release_version.py +0 -0
- {mainsequence-9.0.6.dev36 → mainsequence-9.0.6.dev38}/tests/test_environment_resource_context.py +0 -0
- {mainsequence-9.0.6.dev36 → mainsequence-9.0.6.dev38}/tests/test_environment_response_contracts.py +0 -0
- {mainsequence-9.0.6.dev36 → mainsequence-9.0.6.dev38}/tests/test_fastapi_request_identity.py +0 -0
- {mainsequence-9.0.6.dev36 → mainsequence-9.0.6.dev38}/tests/test_filter_normalization.py +0 -0
- {mainsequence-9.0.6.dev36 → mainsequence-9.0.6.dev38}/tests/test_github_issues_client.py +0 -0
- {mainsequence-9.0.6.dev36 → mainsequence-9.0.6.dev38}/tests/test_independent_context.py +0 -0
- {mainsequence-9.0.6.dev36 → mainsequence-9.0.6.dev38}/tests/test_inference_client.py +0 -0
- {mainsequence-9.0.6.dev36 → mainsequence-9.0.6.dev38}/tests/test_instrumentation.py +0 -0
- {mainsequence-9.0.6.dev36 → mainsequence-9.0.6.dev38}/tests/test_job_client.py +0 -0
- {mainsequence-9.0.6.dev36 → mainsequence-9.0.6.dev38}/tests/test_local_ops.py +0 -0
- {mainsequence-9.0.6.dev36 → mainsequence-9.0.6.dev38}/tests/test_logconf.py +0 -0
- {mainsequence-9.0.6.dev36 → mainsequence-9.0.6.dev38}/tests/test_models_user_request_bound_auth.py +0 -0
- {mainsequence-9.0.6.dev36 → mainsequence-9.0.6.dev38}/tests/test_notification_uid_contract.py +0 -0
- {mainsequence-9.0.6.dev36 → mainsequence-9.0.6.dev38}/tests/test_observability_client.py +0 -0
- {mainsequence-9.0.6.dev36 → mainsequence-9.0.6.dev38}/tests/test_scaffold_skills.py +0 -0
- {mainsequence-9.0.6.dev36 → mainsequence-9.0.6.dev38}/tests/test_secret_client_model.py +0 -0
- {mainsequence-9.0.6.dev36 → mainsequence-9.0.6.dev38}/tests/test_source_ownership.py +0 -0
- {mainsequence-9.0.6.dev36 → mainsequence-9.0.6.dev38}/tests/test_ssh_utils.py +0 -0
- {mainsequence-9.0.6.dev36 → mainsequence-9.0.6.dev38}/tests/test_tolerant_response_reading.py +0 -0
- {mainsequence-9.0.6.dev36 → mainsequence-9.0.6.dev38}/tests/test_tolerant_value_sets.py +0 -0
- {mainsequence-9.0.6.dev36 → mainsequence-9.0.6.dev38}/tests/test_user_application_facts.py +0 -0
|
@@ -300,6 +300,104 @@ only the commits CI tagged. Details:
|
|
|
300
300
|
Do not call `sync-after-commit` or any backend repair endpoint. The GitHub
|
|
301
301
|
branch-push webhook owns backend repository reconciliation.
|
|
302
302
|
|
|
303
|
+
### Development Deploys Every Push, Production Deploys Tags
|
|
304
|
+
|
|
305
|
+
A common setup uses two workflow files scoped to Environments. On the
|
|
306
|
+
production branch only the first applies; on the development branch only the
|
|
307
|
+
second:
|
|
308
|
+
|
|
309
|
+
```yaml
|
|
310
|
+
# .mainsequence/workflows/api-production.yaml
|
|
311
|
+
api_version: "2.3.0"
|
|
312
|
+
name: api-production
|
|
313
|
+
scope:
|
|
314
|
+
environments: [production]
|
|
315
|
+
resources:
|
|
316
|
+
- key: api
|
|
317
|
+
kind: fastapi
|
|
318
|
+
spec:
|
|
319
|
+
source_path: api/main.py
|
|
320
|
+
automatic_deployment: true
|
|
321
|
+
automatic_redeployment:
|
|
322
|
+
enabled: true
|
|
323
|
+
tag_regex: "^v[0-9]+\\.[0-9]+\\.[0-9]+$"
|
|
324
|
+
```
|
|
325
|
+
|
|
326
|
+
```yaml
|
|
327
|
+
# .mainsequence/workflows/api-development.yaml
|
|
328
|
+
api_version: "2.3.0"
|
|
329
|
+
name: api-development
|
|
330
|
+
scope:
|
|
331
|
+
environments: [development] # the development Environment's exact name
|
|
332
|
+
resources:
|
|
333
|
+
- key: api
|
|
334
|
+
kind: fastapi
|
|
335
|
+
spec:
|
|
336
|
+
source_path: api/main.py
|
|
337
|
+
automatic_deployment: true
|
|
338
|
+
automatic_redeployment:
|
|
339
|
+
enabled: true
|
|
340
|
+
```
|
|
341
|
+
|
|
342
|
+
A push to the development branch deploys at once. A merge to `main` deploys
|
|
343
|
+
nothing until a matching tag points at a commit on `main`; with the release job
|
|
344
|
+
above, CI creates that tag after the tests pass. Take the exact fields from the
|
|
345
|
+
branch's workflow template and validate each file through the branch's
|
|
346
|
+
`validate-workflow` action before committing it, as the
|
|
347
|
+
`platform_operations/orchestration_and_releases` skill describes.
|
|
348
|
+
|
|
349
|
+
### Creating A Release Tag
|
|
350
|
+
|
|
351
|
+
The platform reacts to the tag push, however the tag was made. The short tag
|
|
352
|
+
name must fully match `tag_regex`, and the tagged commit must be on the
|
|
353
|
+
target's branch (its latest commit or an older one).
|
|
354
|
+
|
|
355
|
+
- CI, as in the release job above. This is the recommended path.
|
|
356
|
+
- By hand, only when the user asks for it:
|
|
357
|
+
|
|
358
|
+
```bash
|
|
359
|
+
git tag v1.3.0 <commit>
|
|
360
|
+
git push origin v1.3.0
|
|
361
|
+
```
|
|
362
|
+
|
|
363
|
+
Lightweight and annotated tags both work. Push one tag at a time: GitHub
|
|
364
|
+
sends no event when more than three tags are pushed at once, so
|
|
365
|
+
`git push --tags` can deploy nothing.
|
|
366
|
+
- A GitHub Release: publishing a release with a new tag, in the web UI or with
|
|
367
|
+
`gh release create v1.3.0 --target main`, creates the tag, and that tag
|
|
368
|
+
deploys like a pushed one.
|
|
369
|
+
|
|
370
|
+
A tag created with the Actions `GITHUB_TOKEN` starts no other GitHub Actions
|
|
371
|
+
workflow, but it still reaches Main Sequence. Deleting a tag deploys nothing
|
|
372
|
+
and removes nothing. A tag that does not match, or whose commit is only on
|
|
373
|
+
another branch, deploys nothing for that target.
|
|
374
|
+
|
|
375
|
+
### Going Back To An Older Version
|
|
376
|
+
|
|
377
|
+
Two ways work. Use either only when the user asks for it.
|
|
378
|
+
|
|
379
|
+
- Revert and release a new version: `git revert <commit>`, raise the patch
|
|
380
|
+
version with `uv version --bump patch`, commit, push, and let CI tag the
|
|
381
|
+
result. This works for every target, including every-push targets, and keeps
|
|
382
|
+
the version moving forward.
|
|
383
|
+
- For a target with a `tag_regex`, push the older version's tag again. GitHub
|
|
384
|
+
sends an event only when a tag is created, so delete the tag on GitHub and
|
|
385
|
+
push it again; it still points at the same commit:
|
|
386
|
+
|
|
387
|
+
```bash
|
|
388
|
+
git fetch --tags origin
|
|
389
|
+
git push origin :refs/tags/v1.2.0
|
|
390
|
+
git push origin v1.2.0
|
|
391
|
+
```
|
|
392
|
+
|
|
393
|
+
The target redeploys that commit exactly as it was released: its code, its
|
|
394
|
+
image and its workflow file, whose settings replace the current ones. The
|
|
395
|
+
commit must still be on the branch and the tag must match the target's
|
|
396
|
+
current `tag_regex`. Every-push targets ignore the tag. Re-pushing a tag
|
|
397
|
+
also re-runs any GitHub Actions workflow that the tag triggers, and a tag
|
|
398
|
+
ruleset may forbid deleting it; use the revert route then. The next release
|
|
399
|
+
tag deploys a newer version again.
|
|
400
|
+
|
|
303
401
|
## Diagnose Partial Completion Before Retrying
|
|
304
402
|
|
|
305
403
|
Never rerun an entire mutating workflow blindly.
|
|
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
|
{mainsequence-9.0.6.dev36 → mainsequence-9.0.6.dev38}/mainsequence/cli/code_repository_status.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
|
{mainsequence-9.0.6.dev36 → mainsequence-9.0.6.dev38}/mainsequence/client/agent_runtime_models.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{mainsequence-9.0.6.dev36 → mainsequence-9.0.6.dev38}/mainsequence/client/compute_validation.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
|
{mainsequence-9.0.6.dev36 → mainsequence-9.0.6.dev38}/mainsequence/code_repository_context.py
RENAMED
|
File without changes
|
{mainsequence-9.0.6.dev36 → mainsequence-9.0.6.dev38}/mainsequence/code_repository_skills.py
RENAMED
|
File without changes
|
|
File without changes
|
{mainsequence-9.0.6.dev36 → mainsequence-9.0.6.dev38}/mainsequence/instrumentation/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{mainsequence-9.0.6.dev36 → mainsequence-9.0.6.dev38}/mainsequence/repository_identity_security.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{mainsequence-9.0.6.dev36 → mainsequence-9.0.6.dev38}/mainsequence/server/caller_assertions.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{mainsequence-9.0.6.dev36 → mainsequence-9.0.6.dev38}/mainsequence.egg-info/dependency_links.txt
RENAMED
|
File without changes
|
{mainsequence-9.0.6.dev36 → mainsequence-9.0.6.dev38}/mainsequence.egg-info/entry_points.txt
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{mainsequence-9.0.6.dev36 → mainsequence-9.0.6.dev38}/tests/test_canonical_api_route_contract.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{mainsequence-9.0.6.dev36 → mainsequence-9.0.6.dev38}/tests/test_code_repository_branch_contract.py
RENAMED
|
File without changes
|
|
File without changes
|
{mainsequence-9.0.6.dev36 → mainsequence-9.0.6.dev38}/tests/test_code_repository_runtime_context.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{mainsequence-9.0.6.dev36 → mainsequence-9.0.6.dev38}/tests/test_environment_resource_context.py
RENAMED
|
File without changes
|
{mainsequence-9.0.6.dev36 → mainsequence-9.0.6.dev38}/tests/test_environment_response_contracts.py
RENAMED
|
File without changes
|
{mainsequence-9.0.6.dev36 → mainsequence-9.0.6.dev38}/tests/test_fastapi_request_identity.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
|
{mainsequence-9.0.6.dev36 → mainsequence-9.0.6.dev38}/tests/test_models_user_request_bound_auth.py
RENAMED
|
File without changes
|
{mainsequence-9.0.6.dev36 → mainsequence-9.0.6.dev38}/tests/test_notification_uid_contract.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{mainsequence-9.0.6.dev36 → mainsequence-9.0.6.dev38}/tests/test_tolerant_response_reading.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|