mainsequence 9.0.30.dev73__tar.gz → 9.0.31.dev75__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.
Files changed (116) hide show
  1. {mainsequence-9.0.30.dev73/mainsequence.egg-info → mainsequence-9.0.31.dev75}/PKG-INFO +7 -5
  2. {mainsequence-9.0.30.dev73 → mainsequence-9.0.31.dev75}/README.md +6 -4
  3. {mainsequence-9.0.30.dev73 → mainsequence-9.0.31.dev75}/agent_scaffold/skills/application_surfaces/api_surfaces/SKILL.md +3 -3
  4. {mainsequence-9.0.30.dev73 → mainsequence-9.0.31.dev75}/agent_scaffold/skills/platform_operations/access_control_and_sharing/SKILL.md +53 -55
  5. {mainsequence-9.0.30.dev73 → mainsequence-9.0.31.dev75}/agent_scaffold/skills/platform_operations/orchestration_and_releases/SKILL.md +2 -2
  6. {mainsequence-9.0.30.dev73 → mainsequence-9.0.31.dev75}/agent_scaffold/skills/sdk_code_repository_execution/SKILL.md +1 -1
  7. {mainsequence-9.0.30.dev73 → mainsequence-9.0.31.dev75}/mainsequence/cli/cli.py +3 -3
  8. {mainsequence-9.0.30.dev73 → mainsequence-9.0.31.dev75}/mainsequence/client/base.py +0 -237
  9. {mainsequence-9.0.30.dev73 → mainsequence-9.0.31.dev75}/mainsequence/client/models_foundry.py +1 -1
  10. {mainsequence-9.0.30.dev73 → mainsequence-9.0.31.dev75}/mainsequence/client/models_user.py +10 -84
  11. {mainsequence-9.0.30.dev73 → mainsequence-9.0.31.dev75}/mainsequence/client/object_access.py +2 -2
  12. {mainsequence-9.0.30.dev73 → mainsequence-9.0.31.dev75/mainsequence.egg-info}/PKG-INFO +7 -5
  13. {mainsequence-9.0.30.dev73 → mainsequence-9.0.31.dev75}/pyproject.toml +1 -1
  14. {mainsequence-9.0.30.dev73 → mainsequence-9.0.31.dev75}/tests/test_canonical_api_route_contract.py +20 -0
  15. {mainsequence-9.0.30.dev73 → mainsequence-9.0.31.dev75}/tests/test_environment_resource_context.py +7 -4
  16. {mainsequence-9.0.30.dev73 → mainsequence-9.0.31.dev75}/LICENSE +0 -0
  17. {mainsequence-9.0.30.dev73 → mainsequence-9.0.31.dev75}/agent_scaffold/skills/a2a_sdk_execution/SKILL.md +0 -0
  18. {mainsequence-9.0.30.dev73 → mainsequence-9.0.31.dev75}/agent_scaffold/skills/mainsequence-inference/SKILL.md +0 -0
  19. {mainsequence-9.0.30.dev73 → mainsequence-9.0.31.dev75}/agent_scaffold/skills/maintenance/bug_auditor/SKILL.md +0 -0
  20. {mainsequence-9.0.30.dev73 → mainsequence-9.0.31.dev75}/agent_scaffold/skills/maintenance/code_repository_maintenance/SKILL.md +0 -0
  21. {mainsequence-9.0.30.dev73 → mainsequence-9.0.31.dev75}/agent_scaffold/skills/maintenance/metatables_transition/SKILL.md +0 -0
  22. {mainsequence-9.0.30.dev73 → mainsequence-9.0.31.dev75}/mainsequence/__init__.py +0 -0
  23. {mainsequence-9.0.30.dev73 → mainsequence-9.0.31.dev75}/mainsequence/__main__.py +0 -0
  24. {mainsequence-9.0.30.dev73 → mainsequence-9.0.31.dev75}/mainsequence/_request_identity.py +0 -0
  25. {mainsequence-9.0.30.dev73 → mainsequence-9.0.31.dev75}/mainsequence/_team_memberships.py +0 -0
  26. {mainsequence-9.0.30.dev73 → mainsequence-9.0.31.dev75}/mainsequence/_transport.py +0 -0
  27. {mainsequence-9.0.30.dev73 → mainsequence-9.0.31.dev75}/mainsequence/bootstrap.py +0 -0
  28. {mainsequence-9.0.30.dev73 → mainsequence-9.0.31.dev75}/mainsequence/cli/__init__.py +0 -0
  29. {mainsequence-9.0.30.dev73 → mainsequence-9.0.31.dev75}/mainsequence/cli/api.py +0 -0
  30. {mainsequence-9.0.30.dev73 → mainsequence-9.0.31.dev75}/mainsequence/cli/browser_auth.py +0 -0
  31. {mainsequence-9.0.30.dev73 → mainsequence-9.0.31.dev75}/mainsequence/cli/code_repository_status.py +0 -0
  32. {mainsequence-9.0.30.dev73 → mainsequence-9.0.31.dev75}/mainsequence/cli/config.py +0 -0
  33. {mainsequence-9.0.30.dev73 → mainsequence-9.0.31.dev75}/mainsequence/cli/docker_utils.py +0 -0
  34. {mainsequence-9.0.30.dev73 → mainsequence-9.0.31.dev75}/mainsequence/cli/doctor.py +0 -0
  35. {mainsequence-9.0.30.dev73 → mainsequence-9.0.31.dev75}/mainsequence/cli/local_ops.py +0 -0
  36. {mainsequence-9.0.30.dev73 → mainsequence-9.0.31.dev75}/mainsequence/cli/model_filters.py +0 -0
  37. {mainsequence-9.0.30.dev73 → mainsequence-9.0.31.dev75}/mainsequence/cli/pydantic_cli.py +0 -0
  38. {mainsequence-9.0.30.dev73 → mainsequence-9.0.31.dev75}/mainsequence/cli/sdk_utils.py +0 -0
  39. {mainsequence-9.0.30.dev73 → mainsequence-9.0.31.dev75}/mainsequence/cli/ssh_utils.py +0 -0
  40. {mainsequence-9.0.30.dev73 → mainsequence-9.0.31.dev75}/mainsequence/cli/ui.py +0 -0
  41. {mainsequence-9.0.30.dev73 → mainsequence-9.0.31.dev75}/mainsequence/client/__init__.py +0 -0
  42. {mainsequence-9.0.30.dev73 → mainsequence-9.0.31.dev75}/mainsequence/client/access_catalog.py +0 -0
  43. {mainsequence-9.0.30.dev73 → mainsequence-9.0.31.dev75}/mainsequence/client/agent_runtime_models.py +0 -0
  44. {mainsequence-9.0.30.dev73 → mainsequence-9.0.31.dev75}/mainsequence/client/client.py +0 -0
  45. {mainsequence-9.0.30.dev73 → mainsequence-9.0.31.dev75}/mainsequence/client/compute_validation.py +0 -0
  46. {mainsequence-9.0.30.dev73 → mainsequence-9.0.31.dev75}/mainsequence/client/exceptions.py +0 -0
  47. {mainsequence-9.0.30.dev73 → mainsequence-9.0.31.dev75}/mainsequence/client/github_issues.py +0 -0
  48. {mainsequence-9.0.30.dev73 → mainsequence-9.0.31.dev75}/mainsequence/client/inference.py +0 -0
  49. {mainsequence-9.0.30.dev73 → mainsequence-9.0.31.dev75}/mainsequence/client/models_helpers.py +0 -0
  50. {mainsequence-9.0.30.dev73 → mainsequence-9.0.31.dev75}/mainsequence/client/observability.py +0 -0
  51. {mainsequence-9.0.30.dev73 → mainsequence-9.0.31.dev75}/mainsequence/client/utils.py +0 -0
  52. {mainsequence-9.0.30.dev73 → mainsequence-9.0.31.dev75}/mainsequence/client/value_sets.py +0 -0
  53. {mainsequence-9.0.30.dev73 → mainsequence-9.0.31.dev75}/mainsequence/code_repository_context.py +0 -0
  54. {mainsequence-9.0.30.dev73 → mainsequence-9.0.31.dev75}/mainsequence/code_repository_skills.py +0 -0
  55. {mainsequence-9.0.30.dev73 → mainsequence-9.0.31.dev75}/mainsequence/defaults.py +0 -0
  56. {mainsequence-9.0.30.dev73 → mainsequence-9.0.31.dev75}/mainsequence/instrumentation/__init__.py +0 -0
  57. {mainsequence-9.0.30.dev73 → mainsequence-9.0.31.dev75}/mainsequence/instrumentation/utils.py +0 -0
  58. {mainsequence-9.0.30.dev73 → mainsequence-9.0.31.dev75}/mainsequence/logconf.py +0 -0
  59. {mainsequence-9.0.30.dev73 → mainsequence-9.0.31.dev75}/mainsequence/repository_identity_security.py +0 -0
  60. {mainsequence-9.0.30.dev73 → mainsequence-9.0.31.dev75}/mainsequence/runtime_credential_exchange.py +0 -0
  61. {mainsequence-9.0.30.dev73 → mainsequence-9.0.31.dev75}/mainsequence/runtime_flags.py +0 -0
  62. {mainsequence-9.0.30.dev73 → mainsequence-9.0.31.dev75}/mainsequence/scaffold_skills.py +0 -0
  63. {mainsequence-9.0.30.dev73 → mainsequence-9.0.31.dev75}/mainsequence/server/__init__.py +0 -0
  64. {mainsequence-9.0.30.dev73 → mainsequence-9.0.31.dev75}/mainsequence/server/_mcp_skills_upstream/__init__.py +0 -0
  65. {mainsequence-9.0.30.dev73 → mainsequence-9.0.31.dev75}/mainsequence/server/_mcp_skills_upstream/server.py +0 -0
  66. {mainsequence-9.0.30.dev73 → mainsequence-9.0.31.dev75}/mainsequence/server/_mcp_skills_upstream/shared.py +0 -0
  67. {mainsequence-9.0.30.dev73 → mainsequence-9.0.31.dev75}/mainsequence/server/caller_assertions.py +0 -0
  68. {mainsequence-9.0.30.dev73 → mainsequence-9.0.31.dev75}/mainsequence/server/fastapi.py +0 -0
  69. {mainsequence-9.0.30.dev73 → mainsequence-9.0.31.dev75}/mainsequence/server/mcp_skills.py +0 -0
  70. {mainsequence-9.0.30.dev73 → mainsequence-9.0.31.dev75}/mainsequence.egg-info/SOURCES.txt +0 -0
  71. {mainsequence-9.0.30.dev73 → mainsequence-9.0.31.dev75}/mainsequence.egg-info/dependency_links.txt +0 -0
  72. {mainsequence-9.0.30.dev73 → mainsequence-9.0.31.dev75}/mainsequence.egg-info/entry_points.txt +0 -0
  73. {mainsequence-9.0.30.dev73 → mainsequence-9.0.31.dev75}/mainsequence.egg-info/requires.txt +0 -0
  74. {mainsequence-9.0.30.dev73 → mainsequence-9.0.31.dev75}/mainsequence.egg-info/top_level.txt +0 -0
  75. {mainsequence-9.0.30.dev73 → mainsequence-9.0.31.dev75}/setup.cfg +0 -0
  76. {mainsequence-9.0.30.dev73 → mainsequence-9.0.31.dev75}/tests/test_access_catalog_client.py +0 -0
  77. {mainsequence-9.0.30.dev73 → mainsequence-9.0.31.dev75}/tests/test_auth_bootstrap.py +0 -0
  78. {mainsequence-9.0.30.dev73 → mainsequence-9.0.31.dev75}/tests/test_auth_precedence.py +0 -0
  79. {mainsequence-9.0.30.dev73 → mainsequence-9.0.31.dev75}/tests/test_caller_assertions.py +0 -0
  80. {mainsequence-9.0.30.dev73 → mainsequence-9.0.31.dev75}/tests/test_cli_auth_contract.py +0 -0
  81. {mainsequence-9.0.30.dev73 → mainsequence-9.0.31.dev75}/tests/test_cli_browser_auth.py +0 -0
  82. {mainsequence-9.0.30.dev73 → mainsequence-9.0.31.dev75}/tests/test_cli_request_budget.py +0 -0
  83. {mainsequence-9.0.30.dev73 → mainsequence-9.0.31.dev75}/tests/test_cli_secure_storage.py +0 -0
  84. {mainsequence-9.0.30.dev73 → mainsequence-9.0.31.dev75}/tests/test_client.py +0 -0
  85. {mainsequence-9.0.30.dev73 → mainsequence-9.0.31.dev75}/tests/test_code_repository_branch_contract.py +0 -0
  86. {mainsequence-9.0.30.dev73 → mainsequence-9.0.31.dev75}/tests/test_code_repository_documentation_contract.py +0 -0
  87. {mainsequence-9.0.30.dev73 → mainsequence-9.0.31.dev75}/tests/test_code_repository_runtime_context.py +0 -0
  88. {mainsequence-9.0.30.dev73 → mainsequence-9.0.31.dev75}/tests/test_code_repository_skills.py +0 -0
  89. {mainsequence-9.0.30.dev73 → mainsequence-9.0.31.dev75}/tests/test_credential_repr.py +0 -0
  90. {mainsequence-9.0.30.dev73 → mainsequence-9.0.31.dev75}/tests/test_dependency_extras.py +0 -0
  91. {mainsequence-9.0.30.dev73 → mainsequence-9.0.31.dev75}/tests/test_dev_release_version.py +0 -0
  92. {mainsequence-9.0.30.dev73 → mainsequence-9.0.31.dev75}/tests/test_environment_response_contracts.py +0 -0
  93. {mainsequence-9.0.30.dev73 → mainsequence-9.0.31.dev75}/tests/test_fastapi_mcp.py +0 -0
  94. {mainsequence-9.0.30.dev73 → mainsequence-9.0.31.dev75}/tests/test_fastapi_request_identity.py +0 -0
  95. {mainsequence-9.0.30.dev73 → mainsequence-9.0.31.dev75}/tests/test_github_issues_client.py +0 -0
  96. {mainsequence-9.0.30.dev73 → mainsequence-9.0.31.dev75}/tests/test_http_retry_budget.py +0 -0
  97. {mainsequence-9.0.30.dev73 → mainsequence-9.0.31.dev75}/tests/test_independent_context.py +0 -0
  98. {mainsequence-9.0.30.dev73 → mainsequence-9.0.31.dev75}/tests/test_inference_client.py +0 -0
  99. {mainsequence-9.0.30.dev73 → mainsequence-9.0.31.dev75}/tests/test_instrumentation.py +0 -0
  100. {mainsequence-9.0.30.dev73 → mainsequence-9.0.31.dev75}/tests/test_job_client.py +0 -0
  101. {mainsequence-9.0.30.dev73 → mainsequence-9.0.31.dev75}/tests/test_local_ops.py +0 -0
  102. {mainsequence-9.0.30.dev73 → mainsequence-9.0.31.dev75}/tests/test_logconf.py +0 -0
  103. {mainsequence-9.0.30.dev73 → mainsequence-9.0.31.dev75}/tests/test_mcp_skills.py +0 -0
  104. {mainsequence-9.0.30.dev73 → mainsequence-9.0.31.dev75}/tests/test_models_user_request_bound_auth.py +0 -0
  105. {mainsequence-9.0.30.dev73 → mainsequence-9.0.31.dev75}/tests/test_notification_uid_contract.py +0 -0
  106. {mainsequence-9.0.30.dev73 → mainsequence-9.0.31.dev75}/tests/test_object_access_client.py +0 -0
  107. {mainsequence-9.0.30.dev73 → mainsequence-9.0.31.dev75}/tests/test_observability_client.py +0 -0
  108. {mainsequence-9.0.30.dev73 → mainsequence-9.0.31.dev75}/tests/test_runtime_credential_exchange.py +0 -0
  109. {mainsequence-9.0.30.dev73 → mainsequence-9.0.31.dev75}/tests/test_scaffold_skills.py +0 -0
  110. {mainsequence-9.0.30.dev73 → mainsequence-9.0.31.dev75}/tests/test_secret_client_model.py +0 -0
  111. {mainsequence-9.0.30.dev73 → mainsequence-9.0.31.dev75}/tests/test_source_ownership.py +0 -0
  112. {mainsequence-9.0.30.dev73 → mainsequence-9.0.31.dev75}/tests/test_ssh_utils.py +0 -0
  113. {mainsequence-9.0.30.dev73 → mainsequence-9.0.31.dev75}/tests/test_team_memberships.py +0 -0
  114. {mainsequence-9.0.30.dev73 → mainsequence-9.0.31.dev75}/tests/test_tolerant_response_reading.py +0 -0
  115. {mainsequence-9.0.30.dev73 → mainsequence-9.0.31.dev75}/tests/test_tolerant_value_sets.py +0 -0
  116. {mainsequence-9.0.30.dev73 → mainsequence-9.0.31.dev75}/tests/test_user_application_facts.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: mainsequence
3
- Version: 9.0.30.dev73
3
+ Version: 9.0.31.dev75
4
4
  Summary: Main Sequence SDK
5
5
  Author-email: Main Sequence GmbH <dev@main-sequence.io>
6
6
  License-Expression: MIT
@@ -49,7 +49,8 @@ Dynamic: license-file
49
49
  The Main Sequence Python SDK is the client and development toolkit for the Main
50
50
  Sequence platform. It provides authentication, typed platform resources,
51
51
  CodeRepository development and release operations, Agent and A2A workflows,
52
- jobs, sharing, observability, logging, tracing, and reusable scaffold tooling.
52
+ jobs, access policies, observability, logging, tracing, and reusable scaffold
53
+ tooling.
53
54
 
54
55
  MetaTables is now an independent domain package, installed as
55
56
  `mainsequence-metatable` and imported as `metatables`. Table models, time-index
@@ -70,8 +71,8 @@ execution are no longer implemented by this distribution.
70
71
  Main package areas:
71
72
 
72
73
  - `mainsequence.client`: API client models for users, CodeRepositories, jobs,
73
- Agents, artifacts, constants, secrets, sharing, releases, and other platform
74
- resources
74
+ Agents, artifacts, constants, secrets, access policies, releases, and other
75
+ platform resources
75
76
  - `mainsequence.cli`: the complete `mainsequence` command-line interface for
76
77
  authentication, platform resources, and local CodeRepository operations
77
78
  - `mainsequence.instrumentation` and `mainsequence.logconf`: SDK tracing and
@@ -135,7 +136,8 @@ mainsequence code-repository build-local-venv --path .
135
136
  Use `mainsequence --help` and `mainsequence code-repository --help` for the
136
137
  installed command surface. The CLI includes Agent and AgentSession,
137
138
  CodeRepository, jobs and runs, images, resources and releases, constants,
138
- secrets, teams, sharing, scaffold, Docker, and local-development commands.
139
+ secrets, teams, access policies, scaffold, Docker, and local-development
140
+ commands.
139
141
 
140
142
  ## Python Client
141
143
 
@@ -12,7 +12,8 @@
12
12
  The Main Sequence Python SDK is the client and development toolkit for the Main
13
13
  Sequence platform. It provides authentication, typed platform resources,
14
14
  CodeRepository development and release operations, Agent and A2A workflows,
15
- jobs, sharing, observability, logging, tracing, and reusable scaffold tooling.
15
+ jobs, access policies, observability, logging, tracing, and reusable scaffold
16
+ tooling.
16
17
 
17
18
  MetaTables is now an independent domain package, installed as
18
19
  `mainsequence-metatable` and imported as `metatables`. Table models, time-index
@@ -33,8 +34,8 @@ execution are no longer implemented by this distribution.
33
34
  Main package areas:
34
35
 
35
36
  - `mainsequence.client`: API client models for users, CodeRepositories, jobs,
36
- Agents, artifacts, constants, secrets, sharing, releases, and other platform
37
- resources
37
+ Agents, artifacts, constants, secrets, access policies, releases, and other
38
+ platform resources
38
39
  - `mainsequence.cli`: the complete `mainsequence` command-line interface for
39
40
  authentication, platform resources, and local CodeRepository operations
40
41
  - `mainsequence.instrumentation` and `mainsequence.logconf`: SDK tracing and
@@ -98,7 +99,8 @@ mainsequence code-repository build-local-venv --path .
98
99
  Use `mainsequence --help` and `mainsequence code-repository --help` for the
99
100
  installed command surface. The CLI includes Agent and AgentSession,
100
101
  CodeRepository, jobs and runs, images, resources and releases, constants,
101
- secrets, teams, sharing, scaffold, Docker, and local-development commands.
102
+ secrets, teams, access policies, scaffold, Docker, and local-development
103
+ commands.
102
104
 
103
105
  ## Python Client
104
106
 
@@ -148,7 +148,7 @@ person, read `User.get_by_uid(uid)`: a workload identity has `identity_type`
148
148
  endpoint's application policy using the verified user UID.
149
149
 
150
150
  To list the people, Teams and workloads the caller can see, for example to
151
- offer sharing candidates, read inside `reads_as_caller()` from
151
+ offer access candidates, read inside `reads_as_caller()` from
152
152
  `mainsequence.server.fastapi`: `User.filter`, `User.get_by_uid`, `Team.filter`
153
153
  and `Team.get_by_uid` then answer with the caller's visibility, and workload
154
154
  rows carry `managed_by_caller`. Outside a signed HTTP request it raises
@@ -250,8 +250,8 @@ def acting_identity() -> RequestUserIdentity:
250
250
  caller on any other. Never combine the caller's grants with the person's,
251
251
  and never fall back to the caller's rights when the person may not.
252
252
  - Before a write, check the exact object and action; the example's
253
- team-membership check is not a general edit, run, share or delete grant. The
254
- getter verifies identity, not operation permission.
253
+ team-membership check is not a general grant to edit, run, delete or give
254
+ access. The getter verifies identity, not operation permission.
255
255
  - Never parse the assertion, headers or MCP `_meta`, never read a person's UID
256
256
  from the request body, a header or a query parameter, and never let a caller
257
257
  name whom it acts for. Anyone can write a UID there. Only the signed
@@ -1,28 +1,28 @@
1
1
  ---
2
2
  name: mainsequence-access-control-and-sharing
3
- description: Use this skill when the task is about RBAC, resource sharing, or access verification in a Main Sequence CodeRepository. This skill owns organization and team access concepts, the policies of each shareable resource, choosing the correct shareable resource boundary, access checks across CodeRepositories, constants, secrets, buckets, artifacts, Agents, releases and Jobs, and whether an application uses its own grants or acts for its requester (`acts_for_requester`). It does not own job scheduling, domain-package data behavior, or API route design.
3
+ description: Use this skill when the task is about RBAC, giving people, workloads or teams access to a resource, or access verification in a Main Sequence CodeRepository. This skill owns organization and team access concepts, the policies of each shareable resource, choosing the correct resource boundary, access checks across CodeRepositories, constants, secrets, buckets, artifacts, Agents, releases and Jobs, and whether an application uses its own grants or acts for its requester (`acts_for_requester`). It does not own job scheduling, domain-package data behavior, or API route design.
4
4
  ---
5
5
 
6
6
  # Main Sequence Access Control And Sharing
7
7
 
8
8
  ## Overview
9
9
 
10
- Use this skill when the task is about who can view, edit, maintain, or administer a resource in a Main Sequence CodeRepository.
10
+ Use this skill when the task is about who can see, use, change, maintain, or administer a resource in a Main Sequence CodeRepository.
11
11
 
12
12
  This skill is for:
13
13
 
14
14
  - RBAC reasoning
15
15
  - organization, user, role, and team access concepts
16
- - direct sharing vs team sharing
16
+ - direct access vs team access
17
17
  - choosing the policy a person, a workload or a team needs
18
- - deciding which resource is the real sharing boundary
18
+ - deciding which resource is the real access boundary
19
19
  - choosing between `Constant` and `Secret`
20
- - access verification for shared resources
20
+ - verifying who has access to a resource
21
21
 
22
22
  ## This Skill Can Do
23
23
 
24
24
  - explain the Main Sequence access model in operational terms
25
- - decide whether a resource should be shared directly to a user or to a team
25
+ - decide whether a policy should go directly to a user or to a team
26
26
  - decide which policy a user, a workload or a team needs
27
27
  - identify the correct shareable object boundary:
28
28
  - `CodeRepository`
@@ -36,10 +36,10 @@ This skill is for:
36
36
  - `ResourceRelease`
37
37
  - `Job`
38
38
  - choose whether configuration belongs in a `Constant` or a `Secret`
39
- - review CLI sharing flows for existing resources
39
+ - review CLI access commands for existing resources
40
40
  - manage a team's members and decide who controls the team, through the
41
41
  team's policies
42
- - verify access assumptions before claiming a workflow is shareable
42
+ - verify access assumptions before claiming other people can use a workflow
43
43
  - decide whether an application uses its own grants or acts for its
44
44
  requester, and explain what acting for the requester allows
45
45
 
@@ -78,15 +78,15 @@ This skill only reasons about access to deployed resources such as `ResourceRele
78
78
  and <https://mainsequence-sdk.github.io/mainsequence-sdk/knowledge/infrastructure/artifacts/>
79
79
  for releases, Jobs, buckets and Artifacts
80
80
 
81
- The pages above are the authoritative reference for access control and sharing.
81
+ The pages above are the authoritative reference for access control.
82
82
  If the task is specifically about a resource type, also read that resource's own
83
83
  page from the documentation root at <https://mainsequence-sdk.github.io/mainsequence-sdk/>.
84
84
 
85
85
  ## Inputs This Skill Needs
86
86
 
87
- Before changing access or advising on sharing, collect or infer:
87
+ Before changing access or advising on it, collect or infer:
88
88
 
89
- - the exact resource type being shared
89
+ - the exact resource type that access is given on
90
90
  - whether the actor is:
91
91
  - a user
92
92
  - a team
@@ -116,7 +116,7 @@ Before changing access or advising on sharing, collect or infer:
116
116
  - whether the resource contains sensitive configuration
117
117
  - whether the task is about the resource itself or about the workflow that uses it
118
118
 
119
- If the resource boundary or intended access level is unclear, stop before changing permissions.
119
+ If the resource boundary or the intended policy is unclear, stop before changing access.
120
120
 
121
121
  ## Required Decisions
122
122
 
@@ -138,15 +138,16 @@ For every non-trivial access task, decide:
138
138
 
139
139
  ## Build Rules
140
140
 
141
- ### 1. Share the real resource boundary
141
+ ### 1. Give access on the real resource boundary
142
142
 
143
- Do not speak loosely about sharing "the code" when the operational boundary is a platform object.
143
+ Do not speak loosely about giving access to "the code" when the operational boundary is a platform object.
144
144
 
145
145
  Examples:
146
146
 
147
- - sharing a deployed experience usually means a policy on the
147
+ - giving access to a deployed experience usually means a policy on the
148
148
  `ResourceRelease`, or on the `Agent` when the release backs one
149
- - sharing runtime configuration means sharing the `Constant` or `Secret`
149
+ - giving access to runtime configuration means a policy on the `Constant` or
150
+ `Secret`
150
151
 
151
152
  ### 2. Consumers get the narrowest policy, maintainers get `editor`
152
153
 
@@ -157,8 +158,7 @@ Use the simplest rule unless the task requires something more specific:
157
158
  - `editor` for people who need to maintain or update
158
159
  - `owner` only for the people who decide who has access
159
160
 
160
- Do not grant `editor` when a reading or using policy is enough. No resource
161
- uses view and edit sharing any more.
161
+ Do not grant `editor` when a reading or using policy is enough.
162
162
 
163
163
  A `Constant` is decided by its policies:
164
164
 
@@ -169,8 +169,8 @@ A `Constant` is decided by its policies:
169
169
  The person or workload that creates a constant holds `owner`. Give `reader` to
170
170
  consumers and `editor` to maintainers, with the access methods on `Constant`
171
171
  (`get_access()`, `attach_policy()`, `detach_policy()`, `explain_access()`) or
172
- `mainsequence constants access list|grant|revoke|explain`. A constant has no
173
- `add_to_view()` or `add_to_edit()`, and its access methods need no Environment.
172
+ `mainsequence constants access list|grant|revoke|explain`. Its access methods
173
+ need no Environment.
174
174
 
175
175
  A `Secret` is decided by its policies too:
176
176
 
@@ -186,15 +186,14 @@ The person or workload that creates a secret holds `owner`. Give
186
186
  use the secret but must never know it. A workload holding only `reader` cannot
187
187
  read the value: `Secret.get()` raises `PermissionDeniedError` with
188
188
  `required_action` `secrets.read_value`. Use the access methods on `Secret` or
189
- `mainsequence secrets access list|grant|revoke|explain`; a secret has no
190
- `add_to_view()` or `add_to_edit()`. A repository workflow file's `access` entry
191
- for a secret names the policy it gives (`policy: reader`, `value_reader`,
192
- `editor` or `owner`). A secret the platform manages, such as a hosted database
193
- password, cannot get a new value or be deleted.
189
+ `mainsequence secrets access list|grant|revoke|explain`. A repository workflow
190
+ file's `access` entry for a secret names the policy it gives (`policy: reader`,
191
+ `value_reader`, `editor` or `owner`). A secret the platform manages, such as a
192
+ hosted database password, cannot get a new value or be deleted.
194
193
 
195
194
  A `Bucket` is decided by its policies too:
196
195
 
197
- - `reader` browses its folders and the Artifacts in it shared with the person;
196
+ - `reader` browses its folders and the Artifacts in it that the person can see;
198
197
  - `contributor` also uploads Artifacts and creates folders;
199
198
  - `editor` also renames the bucket, renames and deletes folders, deletes the
200
199
  bucket with every Artifact in it and sees who has access;
@@ -205,10 +204,9 @@ Artifact upload creates it by name. Give `contributor` to the people and the
205
204
  workloads that upload into a bucket, and `editor` to maintainers. Uploading
206
205
  into an existing bucket without `contributor` raises `PermissionDeniedError`
207
206
  with `required_action` `buckets.add_artifact`. Use the access methods on
208
- `Bucket`; a bucket has no `add_to_view()` or `add_to_edit()`, and the CLI has
209
- no bucket commands. A repository workflow file's `access` entry for a bucket
210
- names the policy it gives (`policy: reader`, `contributor`, `editor` or
211
- `owner`).
207
+ `Bucket`; the CLI has no bucket commands. A repository workflow file's `access`
208
+ entry for a bucket names the policy it gives (`policy: reader`, `contributor`,
209
+ `editor` or `owner`).
212
210
 
213
211
  A `CodeRepository`, its `CodeRepositoryBranch` objects and an
214
212
  `OrganizationProject` are decided by their policies too, each with `reader`,
@@ -229,8 +227,8 @@ A `CodeRepository`, its `CodeRepositoryBranch` objects and an
229
227
  A repository's creator and a Project's creator hold `owner`; a branch's
230
228
  creator holds nothing for being its creator. Repository and Project policies
231
229
  pass down to the branches: `reader` gives branch `reader`, and `editor` and
232
- `owner` give branch `editor`, so share the repository or the Project when
233
- every branch should follow. Using a repository or a branch needs the
230
+ `owner` give branch `editor`, so give access on the repository or the Project
231
+ when every branch should follow. Using a repository or a branch needs the
234
232
  platform's `user` product role: without it every route, the access methods
235
233
  included, raises `PermissionDeniedError` with `code` `missing_product_role`,
236
234
  also through a Team, and no policy gives it. Use the access methods on
@@ -326,11 +324,11 @@ repository workflows and holds no policy on them. The access methods of all
326
324
  four take no Environment; with a workload's runtime credentials they reach
327
325
  only the objects of that workload's Environment.
328
326
 
329
- ### 3. Team sharing is for repeated access patterns
327
+ ### 3. Team access is for repeated access patterns
330
328
 
331
- Prefer team sharing when the same access needs to be reused across several people or resources.
329
+ Prefer giving access to a team when the same access needs to be reused across several people or resources.
332
330
 
333
- Prefer direct sharing when:
331
+ Prefer giving access directly when:
334
332
 
335
333
  - the access is one-off
336
334
  - the access is personal
@@ -342,11 +340,10 @@ Do not claim that a user can manage a team just because they inherit access thro
342
340
 
343
341
  Keep these separate:
344
342
 
345
- - inherited access to shared resources
343
+ - access inherited through the team's policies
346
344
  - administration of the team itself
347
345
 
348
- Membership is who is in the team. Control is the policies on the team, not view
349
- and edit sharing:
346
+ Membership is who is in the team. Control is the policies on the team:
350
347
 
351
348
  - `viewer` sees the team and its members;
352
349
  - `membership_manager` adds and removes members;
@@ -357,16 +354,16 @@ and edit sharing:
357
354
  Any person can create a team and becomes its owner and first member. Use
358
355
  `Team.add_member()`, `remove_member()`, `leave()` and the access methods
359
356
  (`get_access()`, `attach_policy()`, `detach_policy()`, `explain_access()`), or
360
- `mainsequence organization teams members ...`, `leave` and `access ...`. A
361
- team has no `add_to_view()` or `add_to_edit()`. Before saying who can change a
362
- team, read it with `team.get_access()` or `explain_access()`.
357
+ `mainsequence organization teams members ...`, `leave` and `access ...`. Before
358
+ saying who can change a team, read it with `team.get_access()` or
359
+ `explain_access()`.
363
360
 
364
361
  Working in an Organization Environment is a policy too: `member` works in it
365
362
  and creates Projects, Buckets, Constants, Secrets, model providers and
366
363
  repositories there; `observer` works in it without creating anything. Only
367
364
  Organization admins attach them, to people and Teams, with the access methods
368
- on `OrganizationEnvironment`. Admission never shows objects that are not shared
369
- with the person.
365
+ on `OrganizationEnvironment`. Admission never shows objects the person has no
366
+ access to.
370
367
 
371
368
  An application that checks whether its caller or requester belongs to a team
372
369
  uses `in_teams()`; the identity carries no team list. See
@@ -427,7 +424,7 @@ output is interpreted through public UID fields.
427
424
 
428
425
  ### 8. Access assumptions must be verified
429
426
 
430
- If the task claims a resource is shareable, readable, or maintainable by another actor, verify that path explicitly with the relevant CLI or client workflow.
427
+ If the task claims another actor can see, use, or maintain a resource, verify that path explicitly with the relevant CLI or client workflow.
431
428
 
432
429
  Do not claim access based only on naming, role titles, or intuition.
433
430
 
@@ -476,9 +473,9 @@ whose own request it is serving. The platform setting is `acts_for_requester`.
476
473
  who pushed it is an Organization admin. Otherwise that resource fails
477
474
  before it deploys.
478
475
  - An application that should act only for people, for example a data analyst
479
- Agent, holds no grants of its own. Do not share data with its workload User
480
- to make it work: everyone who can use the application could then reach that
481
- data through it.
476
+ Agent, holds no grants of its own. Do not give its workload User policies on
477
+ data to make it work: everyone who can use the application could then reach
478
+ that data through it.
482
479
 
483
480
  ### What the requester's access covers
484
481
 
@@ -487,7 +484,7 @@ no delegation, the caller's own ordinary permissions; with a valid delegation,
487
484
  the person's ordinary permissions, including administrative ones; an invalid or
488
485
  expired delegation is rejected, never switched to another identity.
489
486
 
490
- - The reads, creates, updates, runs, sharing changes and deletes the person
487
+ - The reads, creates, updates, runs, access changes and deletes the person
491
488
  may make through supported operations.
492
489
  - Check the person's permission for the exact object and operation on every
493
490
  call. A read grant or team membership alone does not authorize a write.
@@ -532,16 +529,17 @@ read-only or claim that it cannot change, share or delete anything.
532
529
 
533
530
  Explain the risk alongside the statement: a model-driven Agent can be steered
534
531
  by prompt injection. Its reads and writes can reach as far as the person's
535
- ordinary permissions allow, administrative ones included, such as sharing and
536
- deleting through supported operations, for at most 24 hours after the original
537
- request. Only Organization admins decide which Agents may receive this
538
- authority; the application's per-operation permission checks remain necessary.
532
+ ordinary permissions allow, administrative ones included, such as changing who
533
+ has access and deleting through supported operations, for at most 24 hours
534
+ after the original request. Only Organization admins decide which Agents may
535
+ receive this authority; the application's per-operation permission checks
536
+ remain necessary.
539
537
 
540
538
  ## Review Rules
541
539
 
542
540
  When reviewing an access-control task, look for:
543
541
 
544
- - sharing the wrong resource boundary
542
+ - giving access on the wrong resource boundary
545
543
  - granting `editor` or `owner` when a reading or using policy is sufficient
546
544
  - a policy on a release that backs an Agent instead of on the Agent
547
545
  - using direct user grants where a team should be used
@@ -585,7 +583,7 @@ Do not claim success until you have checked:
585
583
  - the task is using `Constant` vs `Secret` correctly
586
584
  - any `Constant` or `Secret` creation path first resolved existence by name when idempotency matters
587
585
  - the access claim was verified against the actual resource path
588
- - the task did not confuse sharing policy with orchestration or producer logic
586
+ - the task did not confuse access policy with orchestration or producer logic
589
587
  - an application that acts for its requester takes the person only from the
590
588
  platform, and its own grants are intentional
591
589
  - requester-bound writes enforce the person's permission for the operation,
@@ -597,7 +595,7 @@ Do not claim success until you have checked:
597
595
  - the actor should probably be a team, but team structure is unknown
598
596
  - the task mixes access policy with job scheduling or release mechanics
599
597
  - the task asks for sensitive data to be stored in a `Constant`
600
- - the task assumes cross-organization sharing without explicit documentation
598
+ - the task assumes cross-organization access without explicit documentation
601
599
  - the request requires a policy decision the user has not made
602
600
  - the task needs `acts_for_requester` and no Organization admin has decided to
603
601
  enable it
@@ -34,7 +34,7 @@ This skill must not claim ownership of:
34
34
 
35
35
  - domain-package data production and schema semantics
36
36
  - Command Center FastAPI wire contracts
37
- - RBAC or sharing policy
37
+ - RBAC or access policies
38
38
  - application UI implementation details
39
39
 
40
40
  ## Route Adjacent Work
@@ -43,7 +43,7 @@ This skill must not claim ownership of:
43
43
  package skills and documentation
44
44
  - Command Center FastAPI provider implementation and contract validation:
45
45
  `.agents/skills/mainsequence/application_surfaces/api_surfaces/SKILL.md`
46
- - RBAC and sharing:
46
+ - RBAC and access policies:
47
47
  `.agents/skills/mainsequence/platform_operations/access_control_and_sharing/SKILL.md`
48
48
 
49
49
  ## Read First
@@ -40,7 +40,7 @@ CodeRepository-to-Agent setup and other platform capabilities.
40
40
  `.agents/skills/mainsequence/application_surfaces/api_surfaces/SKILL.md`
41
41
  - Jobs, schedules, images, resources, releases, and Artifacts:
42
42
  `.agents/skills/mainsequence/platform_operations/orchestration_and_releases/SKILL.md`
43
- - RBAC, sharing, constants, secrets, and acting for a requester:
43
+ - RBAC, access policies, constants, secrets, and acting for a requester:
44
44
  `.agents/skills/mainsequence/platform_operations/access_control_and_sharing/SKILL.md`
45
45
  - Recorded model calls, structured extraction, provider options, history, and replay:
46
46
  `.agents/skills/mainsequence/mainsequence-inference/SKILL.md`
@@ -2526,7 +2526,7 @@ def _format_team_member(member: dict[str, object]) -> list[tuple[str, str]]:
2526
2526
  ("Kind", str(member.get("member_kind") or "-")),
2527
2527
  ("Username", str(member.get("username") or "-")),
2528
2528
  ("Email", str(member.get("email") or "-")),
2529
- ("Name", _render_shareable_user_name(member)),
2529
+ ("Name", _render_user_name(member)),
2530
2530
  ]
2531
2531
 
2532
2532
 
@@ -2591,7 +2591,7 @@ def _organization_team_members_list_impl(*, team_uid: str, timeout: int | None)
2591
2591
  str(member.get("uid") or "-"),
2592
2592
  str(member.get("member_kind") or "-"),
2593
2593
  str(member.get("email") or "-"),
2594
- _render_shareable_user_name(member),
2594
+ _render_user_name(member),
2595
2595
  ]
2596
2596
  for member in members
2597
2597
  ]
@@ -3488,7 +3488,7 @@ def _format_team_preview(team: dict[str, object]) -> list[tuple[str, str]]:
3488
3488
  ]
3489
3489
 
3490
3490
 
3491
- def _render_shareable_user_name(user: dict[str, object]) -> str:
3491
+ def _render_user_name(user: dict[str, object]) -> str:
3492
3492
  first_name = str(user.get("first_name") or "").strip()
3493
3493
  last_name = str(user.get("last_name") or "").strip()
3494
3494
  full_name = " ".join(part for part in (first_name, last_name) if part)