gabriel / musehub public
chore BREAKING dev
AI Agent gabriel · 157 days ago · Apr 21, 2026 · Diff

chore: swap port to 1337 (was 10003)

Local dev and EC2 blue-green now use 1337/1338 instead of 10003/10004. Updated: docker-compose, entrypoint.sh, config.py, .env.example, deploy scripts (deploy.sh, setup-ec2.sh, setup-ec2-staging.sh), tests, and docs.

sha256:a88854503673dcad22463307411e1cc28e8c62b99ef5c8194ca642f1f99d101b sha
+1048 symbols
sha256:7c6dc3e0550bc3a986327d716d5c4bd920f34635c1c1a8bcaea936fbc77c1c02 snapshot
+1048
symbols added
0
dead code introduced
Semantic Changes 1048 symbols
+ _COLUMNS variable variable _COLUMNS L32–42
+ branch_labels variable variable branch_labels L29–29
+ depends_on variable variable depends_on L30–30
+ down_revision variable variable down_revision L28–28
+ downgrade function function downgrade L55–62
+ Union import import Union L22–22
+ annotations import import annotations L20–20
+ op import import op L25–25
+ sa import import sa L24–24
+ revision variable variable revision L27–27
+ upgrade function function upgrade L45–52
~ .env.example .example
~ README.md .md 37 symbols added
+ MuseHub section MuseHub L1–346
+ Agent Provenance section Agent Provenance L89–114
+ code[bash]@L94 variable variable code[bash]@L94 L94–101
+ table@L104 section table@L104 L104–111
+ Architecture section Architecture L306–331
+ code@L308 variable variable code@L308 L308–328
+ Auth section Auth L285–306
+ code@L287 variable variable code@L287 L287–290
+ code[toml]@L298 variable variable code[toml]@L298 L298–303
+ Connecting a Muse Repo section Connecting a Muse Repo L59–89
+ code[bash]@L61 variable variable code[bash]@L61 L61–71
+ code[bash]@L74 variable variable code[bash]@L74 L74–86
+ Developer Tools section Developer Tools L331–343
+ code[bash]@L333 variable variable code[bash]@L333 L333–340
+ License section License L343–346
+ MCP Integration section MCP Integration L151–285
+ Agent Onboarding Sequence section Agent Onboarding Sequence L181–195
+ code[python]@L183 variable variable code[python]@L183 L183–192
+ Cursor / VS Code Setup section Cursor / VS Code Setup L167–181
+ code[json]@L169 variable variable code[json]@L169 L169–180
+ Prompts — 10 total section Prompts — 10 total L266–285
+ table@L270 section table@L270 L270–280
+ Resources — 29 total section Resources — 29 total L241–266
+ code@L245 variable variable code@L245 L245–265
+ Tools — 40 total section Tools — 40 total L195–241
+ table@L199 section table@L199 L199–225
+ table@L228 section table@L228 L228–240
+ Transports section Transports L157–167
+ table@L159 section table@L159 L159–163
+ Quickstart section Quickstart L38–59
+ code[bash]@L40 variable variable code[bash]@L40 L40–50
+ Symbol Intelligence (Intel) section Symbol Intelligence (Intel) L114–132
+ code@L119 variable variable code@L119 L119–129
+ URL Scheme section URL Scheme L132–151
+ code@L134 variable variable code@L134 L134–148
+ Why MuseHub section Why MuseHub L18–38
+ table@L27 section table@L27 L27–35
~ deploy/deploy.sh .sh 26 symbols added
+ ACTIVE_SLOT variable variable ACTIVE_SLOT L88–88
+ APP_DIR variable variable APP_DIR L26–26
+ DB_PASSWORD variable variable DB_PASSWORD L117–117
+ ECR_IMAGE variable variable ECR_IMAGE L30–30
+ ECR_REGISTRY variable variable ECR_REGISTRY L29–29
+ FULL_IMAGE variable variable FULL_IMAGE L32–32
+ HEALTH_RETRIES variable variable HEALTH_RETRIES L36–36
+ HEALTH_URL variable variable HEALTH_URL L100–100
+ HEALTH_URL_BLUE variable variable HEALTH_URL_BLUE L34–34
+ HEALTH_URL_GREEN variable variable HEALTH_URL_GREEN L35–35
+ IMAGE_TAG variable variable IMAGE_TAG L31–31
+ NEW_CONTAINER variable variable NEW_CONTAINER L99–99
+ NEW_PORT variable variable NEW_PORT L97–97
+ NEW_SLOT variable variable NEW_SLOT L96–96
+ NGINX_PORT_FILE variable variable NGINX_PORT_FILE L28–28
+ OLD_CONTAINER variable variable OLD_CONTAINER L98–98
+ REGION variable variable REGION L33–33
+ SLOT_FILE variable variable SLOT_FILE L27–27
+ _alembic function function _alembic L119–126
+ die function function die L43–43
+ health_check function function health_check L45–57
+ log function function log L42–42
+ nginx_point_to function function nginx_point_to L59–64
+ port variable variable port L60–60
+ slot variable variable slot L47–47
+ url variable variable url L46–46
~ deploy/setup-ec2-staging.sh .sh 5 symbols added
+ APP_DIR variable variable APP_DIR L33–33
+ DB_PASSWORD variable variable DB_PASSWORD L92–92
+ DOMAIN variable variable DOMAIN L32–32
+ RUNNER_TOKEN variable variable RUNNER_TOKEN L94–94
+ WEBHOOK_SECRET_KEY variable variable WEBHOOK_SECRET_KEY L93–93
~ deploy/setup-ec2.sh .sh 5 symbols added
+ APP_DIR variable variable APP_DIR L26–26
+ DB_PASSWORD variable variable DB_PASSWORD L89–89
+ DOMAIN variable variable DOMAIN L24–24
+ SITE_NAME variable variable SITE_NAME L25–25
+ WEBHOOK_SECRET_KEY variable variable WEBHOOK_SECRET_KEY L90–90
~ docs/infrastructure.md .md 56 symbols added
+ MuseHub Cloud Infrastructure section MuseHub Cloud Infrastructure L1–425
+ Backups section Backups L374–391
+ code[bash]@L384 variable variable code[bash]@L384 L384–388
+ Costs (approximate, us-east-1, 2025 pricing) section Costs (approximate, us-east-1, 2025 pricing) L391–413
+ code[bash]@L403 variable variable code[bash]@L403 L403–408
+ table@L393 section table@L393 L393–400
+ Deployment Workflow section Deployment Workflow L268–374
+ Deploy pipeline overview section Deploy pipeline overview L273–296
+ code@L275 variable variable code@L275 L275–291
+ ECR Push — Use crane (not docker push) section ECR Push — Use crane (not docker push) L296–334
+ code[bash]@L309 variable variable code[bash]@L309 L309–312
+ code[bash]@L315 variable variable code[bash]@L315 L315–331
+ Emergency migration rollback (on instance via SSM) section Emergency migration rollback (on instance via SSM) L362–374
+ code[bash]@L364 variable variable code[bash]@L364 L364–371
+ Rollback section Rollback L347–362
+ code[bash]@L349 variable variable code[bash]@L349 L349–361
+ Standard deploy section Standard deploy L334–347
+ code[bash]@L336 variable variable code[bash]@L336 L336–346
+ Overview section Overview L7–22
+ table@L15 section table@L15 L15–19
+ Production Environment section Production Environment L46–169
+ env) variable section Environment variables (.env on instance at /opt/musehub/.env) L88–100
+ code@L90 variable variable code@L90 L90–99
+ Instance section Instance L54–63
+ Instance access (SSM — no SSH) section Instance access (SSM — no SSH) L114–129
+ code[bash]@L116 variable variable code[bash]@L116 L116–128
+ code@L56 variable variable code@L56 L56–62
+ ai) section Namecheap DNS (musehub.ai) L63–70
+ table@L65 section table@L65 L65–69
+ Nginx config section Nginx config L100–109
+ SSL section SSL L109–114
+ Stack section Stack L70–80
+ code@L72 variable variable code@L72 L72–79
+ Useful commands on the instance section Useful commands on the instance L129–169
+ code[bash]@L134 variable variable code[bash]@L134 L134–166
+ Volumes section Volumes L80–88
+ table@L82 section table@L82 L82–87
+ Secrets inventory section Secrets inventory L413–425
+ table@L417 section table@L417 L417–422
+ Shared AWS Resources section Shared AWS Resources L22–46
+ table@L24 section table@L24 L24–34
+ Staging Environment section Staging Environment L169–268
+ sh) section Instance (provisioned by aws-provision-staging.sh) L176–186
+ code@L178 variable variable code@L178 L178–185
+ Instance access (SSM — no SSH) section Instance access (SSM — no SSH) L259–268
+ code[bash]@L261 variable variable code[bash]@L261 L261–265
+ ai, Advanced DNS tab) section Namecheap DNS (musehub.ai, Advanced DNS tab) L186–192
+ table@L188 section table@L188 L188–191
+ Ongoing code deploys to staging section Ongoing code deploys to staging L218–225
+ code[bash]@L220 variable variable code[bash]@L220 L220–224
+ Provisioning (one-time, run locally) section Provisioning (one-time, run locally) L192–218
+ code[bash]@L194 variable variable code[bash]@L194 L194–217
+ Publishing a new muse CLI release section Publishing a new muse CLI release L225–259
+ code[bash]@L233 variable variable code[bash]@L233 L233–238
+ code[bash]@L251 variable variable code[bash]@L251 L251–258
+ Purpose section Purpose L171–176
~ docs/reference/type-contracts.md .md 626 symbols added
+ Musehub — Type Contracts Reference section Musehub — Type Contracts Reference L1–4812
+ Enums section Enums L22–89
+ py` section ContextDepth — `musehub/models/musehub_context.py` L50–63
+ table@L56 section table@L56 L56–61
+ py` section ContextFormat — `musehub/models/musehub_context.py` L63–75
+ table@L69 section table@L69 L69–73
+ py` section KeyAlgorithm — `musehub/crypto/keys.py` L38–50
+ table@L44 section table@L44 L44–48
+ py` section MuseHubDivergenceLevel — `musehub/services/musehub_divergence.py` L75–89
+ table@L81 section table@L81 L81–87
+ py` section Permission — `musehub/api/routes/musehub/collaborators.py` L24–38
+ table@L30 section table@L30 L30–36
+ Protocols section Protocols L4780–4812
+ py` section StorageBackend — `musehub/storage/backends.py` L4782–4791
+ py` section _S3Client — `musehub/storage/backends.py` L4791–4798
+ py` section _S3Response — `musehub/storage/backends.py` L4798–4805
+ py` section _StreamingBody — `musehub/storage/backends.py` L4805–4812
+ Pydantic Models section Pydantic Models L707–3904
+ py` section ActiveProposalContext — `musehub/models/musehub_context.py` L3387–3403
+ table@L3393 section table@L3393 L3393–3401
+ py` section ActivityEventResponse — `musehub/models/musehub.py` L1148–1165
+ table@L1154 section table@L1154 L1154–1163
+ py` section AgentCardEntry — `musehub/models/musehub.py` L1165–1181
+ table@L1171 section table@L1171 L1171–1179
+ py` section AgentContextResponse — `musehub/models/musehub_context.py` L3403–3422
+ table@L3409 section table@L3409 L3409–3420
+ py` section AgentFleetResponse — `musehub/models/musehub.py` L1181–1194
+ table@L1187 section table@L1187 L1187–1192
+ py` section AgentRegistrationRequest — `musehub/models/musehub_auth.py` L3280–3298
+ table@L3286 section table@L3286 L3286–3296
+ py` section AgentRegistrationResponse — `musehub/models/musehub_auth.py` L3298–3313
+ table@L3304 section table@L3304 L3304–3311
+ py` section AnalysisSummaryContext — `musehub/models/musehub_context.py` L3422–3438
+ table@L3428 section table@L3428 L3428–3436
+ py` section ApiChangeSummaryResponse — `musehub/models/musehub.py` L1194–1208
+ table@L1200 section table@L1200 L1200–1206
+ py` section AssignLabelsRequest — `musehub/api/routes/musehub/labels.py` L808–819
+ table@L814 section table@L814 L814–817
+ py` section AuthKeyResponse — `musehub/models/musehub_auth.py` L3313–3329
+ table@L3319 section table@L3319 L3319–3327
+ py` section BlobMetaResponse — `musehub/models/musehub.py` L1208–1227
+ table@L1214 section table@L1214 L1214–1225
+ py` section BranchDetailListResponse — `musehub/models/musehub.py` L1227–1239
+ table@L1233 section table@L1233 L1233–1237
+ py` section BranchDetailResponse — `musehub/models/musehub.py` L1239–1256
+ table@L1245 section table@L1245 L1245–1254
+ py` section BranchDivergenceScores — `musehub/models/musehub.py` L1256–1271
+ table@L1262 section table@L1262 L1262–1269
+ py` section BranchListResponse — `musehub/models/musehub.py` L1271–1282
+ table@L1277 section table@L1277 L1277–1280
+ py` section BranchResponse — `musehub/models/musehub.py` L1282–1295
+ table@L1288 section table@L1288 L1288–1293
+ py` section CamelModel — `musehub/models/base.py` L1058–1067
+ py` section ChallengeRequest — `musehub/models/musehub_auth.py` L3329–3341
+ table@L3335 section table@L3335 L3335–3339
+ py` section ChallengeResponse — `musehub/models/musehub_auth.py` L3341–3355
+ table@L3347 section table@L3347 L3347–3353
+ py` section ChangelogEntryResponse — `musehub/models/musehub.py` L1295–1311
+ table@L1301 section table@L1301 L1301–1309
+ py` section CollaboratorAccessResponse — `musehub/models/musehub.py` L1311–1324
+ table@L1317 section table@L1317 L1317–1322
+ py` section CollaboratorInviteRequest — `musehub/api/routes/musehub/collaborators.py` L741–753
+ table@L747 section table@L747 L747–751
+ py` section CollaboratorListResponse — `musehub/api/routes/musehub/collaborators.py` L753–765
+ table@L759 section table@L759 L759–763
+ py` section CollaboratorPermissionUpdate — `musehub/api/routes/musehub/collaborators.py` L765–776
+ table@L771 section table@L771 L771–774
+ py` section CollaboratorResponse — `musehub/api/routes/musehub/collaborators.py` L776–791
+ table@L782 section table@L782 L782–789
+ py` section CommitDiffDimensionScore — `musehub/models/musehub.py` L1324–1338
+ table@L1330 section table@L1330 L1330–1336
+ py` section CommitDiffSummaryResponse — `musehub/models/musehub.py` L1338–1352
+ table@L1344 section table@L1344 L1344–1350
+ py` section CommitInput — `musehub/models/musehub.py` L1352–1368
+ table@L1358 section table@L1358 L1358–1366
+ py` section CommitListResponse — `musehub/models/musehub.py` L1368–1381
+ table@L1374 section table@L1374 L1374–1379
+ py` section CommitResponse — `musehub/models/musehub.py` L1381–1398
+ table@L1387 section table@L1387 L1387–1396
+ py` section CompareResponse — `musehub/models/musehub.py` L1398–1417
+ table@L1404 section table@L1404 L1404–1415
+ py` section ContributionDay — `musehub/models/musehub.py` L1417–1429
+ table@L1423 section table@L1423 L1423–1427
+ py` section ContributorCredits — `musehub/models/musehub.py` L1429–1444
+ table@L1435 section table@L1435 L1435–1442
+ py` section CoordPollRequest — `musehub/models/coord.py` L1067–1080
+ table@L1073 section table@L1073 L1073–1078
+ py` section CoordPullResponse — `musehub/models/coord.py` L1080–1092
+ table@L1086 section table@L1086 L1086–1090
+ py` section CoordPushRequest — `musehub/models/coord.py` L1092–1103
+ table@L1098 section table@L1098 L1098–1101
+ py` section CoordPushResponse — `musehub/models/coord.py` L1103–1115
+ table@L1109 section table@L1109 L1109–1113
+ py` section CoordRecordIn — `musehub/models/coord.py` L1115–1130
+ table@L1121 section table@L1121 L1121–1128
+ py` section CoordRecordOut — `musehub/models/coord.py` L1130–1148
+ table@L1136 section table@L1136 L1136–1146
+ py` section CreateIdentityRequest — `musehub/api/routes/api/identities.py` L709–726
+ table@L713 section table@L713 L713–724
+ py` section CreateProfileBody — `musehub/api/routes/musehub/users.py` L957–970
+ table@L963 section table@L963 L963–968
+ py` section CreateRepoRequest — `musehub/models/musehub.py` L1444–1465
+ table@L1450 section table@L1450 L1450–1463
+ py` section CreditsResponse — `musehub/models/musehub.py` L1465–1479
+ table@L1471 section table@L1471 L1471–1477
+ py` section CuratedGroup — `musehub/api/routes/musehub/ui_topics.py` L932–944
+ table@L938 section table@L938 L938–942
+ py` section DagEdge — `musehub/models/musehub.py` L1479–1491
+ table@L1485 section table@L1485 L1485–1489
+ py` section DagGraphResponse — `musehub/models/musehub.py` L1491–1504
+ table@L1497 section table@L1497 L1497–1502
+ py` section DagNode — `musehub/models/musehub.py` L1504–1529
+ table@L1510 section table@L1510 L1510–1527
+ py` section DivergenceDimensionResponse — `musehub/models/musehub.py` L1529–1545
+ table@L1535 section table@L1535 L1535–1543
+ py` section DivergenceResponse — `musehub/models/musehub.py` L1545–1561
+ table@L1551 section table@L1551 L1551–1559
+ py` section EmotionDiffResponse — `musehub/models/musehub.py` L1561–1583
+ table@L1567 section table@L1567 L1567–1581
+ py` section ExploreRepoResult — `musehub/models/musehub.py` L1583–1603
+ table@L1589 section table@L1589 L1589–1601
+ py` section ExploreResponse — `musehub/models/musehub.py` L1603–1616
+ table@L1609 section table@L1609 L1609–1614
+ py` section FileHotspotResponse — `musehub/models/musehub.py` L1616–1629
+ table@L1622 section table@L1622 L1622–1627
+ py` section ForkNetworkNode — `musehub/models/musehub.py` L1629–1646
+ table@L1635 section table@L1635 L1635–1644
+ py` section ForkNetworkResponse — `musehub/models/musehub.py` L1646–1658
+ table@L1652 section table@L1652 L1652–1656
+ py` section ForkRepoRequest — `musehub/models/musehub.py` L1658–1671
+ table@L1664 section table@L1664 L1664–1669
+ py` section GlobalSearchCommitMatch — `musehub/models/musehub.py` L1671–1691
+ table@L1677 section table@L1677 L1677–1689
+ py` section GlobalSearchRepoGroup — `musehub/models/musehub.py` L1691–1708
+ table@L1697 section table@L1697 L1697–1706
+ py` section GlobalSearchResult — `musehub/models/musehub.py` L1708–1723
+ table@L1714 section table@L1714 L1714–1721
+ py` section GrooveCheckResponse — `musehub/models/musehub.py` L1723–1739
+ table@L1729 section table@L1729 L1729–1737
+ py` section GrooveCommitEntry — `musehub/models/musehub.py` L1739–1756
+ table@L1745 section table@L1745 L1745–1754
+ py` section HistoryEntryContext — `musehub/models/musehub_context.py` L3438–3453
+ table@L3444 section table@L3444 L3444–3451
+ py` section IssueAssignRequest — `musehub/models/musehub.py` L1756–1767
+ table@L1762 section table@L1762 L1762–1765
+ py` section IssueCommentCreate — `musehub/models/musehub.py` L1767–1779
+ table@L1773 section table@L1773 L1773–1777
+ py` section IssueCommentListResponse — `musehub/models/musehub.py` L1779–1792
+ table@L1785 section table@L1785 L1785–1790
+ py` section IssueCommentResponse — `musehub/models/musehub.py` L1792–1810
+ table@L1798 section table@L1798 L1798–1808
+ py` section IssueCreate — `musehub/models/musehub.py` L1810–1827
+ table@L1816 section table@L1816 L1816–1825
+ py` section IssueLabelAssignRequest — `musehub/models/musehub.py` L1827–1838
+ table@L1833 section table@L1833 L1833–1836
+ py` section IssueListResponse — `musehub/models/musehub.py` L1838–1851
+ table@L1844 section table@L1844 L1844–1849
+ py` section IssueResponse — `musehub/models/musehub.py` L1851–1876
+ table@L1857 section table@L1857 L1857–1874
+ py` section IssueUpdate — `musehub/models/musehub.py` L1876–1893
+ table@L1882 section table@L1882 L1882–1891
+ py` section LabelCreate — `musehub/api/routes/musehub/labels.py` L819–832
+ table@L825 section table@L825 L825–830
+ py` section LabelListResponse — `musehub/api/routes/musehub/labels.py` L832–844
+ table@L838 section table@L838 L838–842
+ py` section LabelResponse — `musehub/api/routes/musehub/labels.py` L844–859
+ table@L850 section table@L850 L850–857
+ py` section LabelUpdate — `musehub/api/routes/musehub/labels.py` L859–872
+ table@L865 section table@L865 L865–870
+ py` section LanguageStatResponse — `musehub/models/musehub.py` L1893–1906
+ table@L1899 section table@L1899 L1899–1904
+ py` section M — `tests/test_api_contracts_section37.py` L3838–3847
+ table@L3842 section table@L3842 L3842–3845
+ py` section MCPInputSchemaWire — `musehub/muse_contracts/mcp_types.py` L3778–3791
+ table@L3784 section table@L3784 L3784–3789
+ py` section MCPPropertyDefWire — `musehub/muse_contracts/mcp_types.py` L3791–3809
+ table@L3797 section table@L3797 L3797–3807
+ py` section MCPToolDefWire — `musehub/muse_contracts/mcp_types.py` L3809–3824
+ table@L3815 section table@L3815 L3815–3822
+ py` section MuseHubContextCommitInfo — `musehub/models/musehub.py` L1906–1921
+ table@L1912 section table@L1912 L1912–1919
+ py` section MuseHubContextHistoryEntry — `musehub/models/musehub.py` L1921–1936
+ table@L1927 section table@L1927 L1927–1934
+ py` section MuseHubContextMusicalState — `musehub/models/musehub.py` L1936–1947
+ table@L1942 section table@L1942 L1942–1945
+ py` section MuseHubContextResponse — `musehub/models/musehub.py` L1947–1964
+ table@L1953 section table@L1953 L1953–1962
+ py` section MusicalStateContext — `musehub/models/musehub_context.py` L3453–3464
+ table@L3459 section table@L3459 L3459–3462
+ py` section MyModel — `tests/test_api_contracts_section37.py` L3847–3856
+ table@L3851 section table@L3851 L3851–3854
+ py`@L3856 section MyModel — `tests/test_api_contracts_section37.py` L3856–3865
+ table@L3860 section table@L3860 L3860–3863
+ py`@L3865 section MyModel — `tests/test_api_contracts_section37.py` L3865–3874
+ table@L3869 section table@L3869 L3869–3872
+ py`@L3874 section MyModel — `tests/test_api_contracts_section37.py` L3874–3883
+ table@L3878 section table@L3878 L3878–3881
+ py`@L3883 section MyModel — `tests/test_api_contracts_section37.py` L3883–3892
+ table@L3887 section table@L3887 L3887–3890
+ py` section ObjectInput — `musehub/models/musehub.py` L1964–1977
+ table@L1970 section table@L1970 L1970–1975
+ py` section ObjectMetaListResponse — `musehub/models/musehub.py` L1977–1988
+ table@L1983 section table@L1983 L1983–1986
+ py` section ObjectMetaResponse — `musehub/models/musehub.py` L1988–2002
+ table@L1994 section table@L1994 L1994–2000
+ py` section ObjectResponse — `musehub/models/musehub.py` L2002–2015
+ table@L2008 section table@L2008 L2008–2013
+ py` section OpenIssueContext — `musehub/models/musehub_context.py` L3464–3479
+ table@L3470 section table@L3470 L3470–3477
+ py` section ProfileRepoSummary — `musehub/models/musehub.py` L2015–2033
+ table@L2021 section table@L2021 L2021–2031
+ py` section ProfileResponse — `musehub/models/musehub.py` L2033–2059
+ table@L2039 section table@L2039 L2039–2057
+ py` section ProfileUpdateRequest — `musehub/models/musehub.py` L2059–2076
+ table@L2065 section table@L2065 L2065–2074
+ py` section ProposalCommentCreate — `musehub/models/musehub.py` L2076–2094
+ table@L2082 section table@L2082 L2082–2092
+ py` section ProposalCommentListResponse — `musehub/models/musehub.py` L2094–2107
+ table@L2100 section table@L2100 L2100–2105
+ py` section ProposalCommentResponse — `musehub/models/musehub.py` L2107–2130
+ table@L2113 section table@L2113 L2113–2128
+ py` section ProposalCreate — `musehub/models/musehub.py` L2130–2144
+ table@L2136 section table@L2136 L2136–2142
+ py` section ProposalDiffDimensionScore — `musehub/models/musehub.py` L2144–2161
+ table@L2150 section table@L2150 L2150–2159
+ py` section ProposalDiffResponse — `musehub/models/musehub.py` L2161–2179
+ table@L2167 section table@L2167 L2167–2177
+ py` section ProposalListResponse — `musehub/models/musehub.py` L2179–2192
+ table@L2185 section table@L2185 L2185–2190
+ py` section ProposalMergeRequest — `musehub/models/musehub.py` L2192–2203
+ table@L2198 section table@L2198 L2198–2201
+ py` section ProposalMergeResponse — `musehub/models/musehub.py` L2203–2215
+ table@L2209 section table@L2209 L2209–2213
+ py` section ProposalResponse — `musehub/models/musehub.py` L2215–2236
+ table@L2221 section table@L2221 L2221–2234
+ py` section ProposalReviewCreate — `musehub/models/musehub.py` L2236–2248
+ table@L2242 section table@L2242 L2242–2246
+ py` section ProposalReviewListResponse — `musehub/models/musehub.py` L2248–2261
+ table@L2254 section table@L2254 L2254–2259
+ py` section ProposalReviewResponse — `musehub/models/musehub.py` L2261–2278
+ table@L2267 section table@L2267 L2267–2276
+ py` section ProposalReviewerRequest — `musehub/models/musehub.py` L2278–2289
+ table@L2284 section table@L2284 L2284–2287
+ py` section ProtocolInfoResponse — `musehub/protocol/responses.py` L3824–3838
+ table@L3830 section table@L3830 L3830–3836
+ py` section PullResponse — `musehub/models/musehub.py` L2289–2304
+ table@L2295 section table@L2295 L2295–2302
+ py` section PushResponse — `musehub/models/musehub.py` L2304–2316
+ table@L2310 section table@L2310 L2310–2314
+ py` section RefactorEventResponse — `musehub/models/musehub.py` L2316–2330
+ table@L2322 section table@L2322 L2322–2328
+ py` section RegisterDomainRequest — `musehub/api/routes/musehub/domains.py` L791–808
+ table@L797 section table@L797 L797–806
+ py` section ReleaseAssetCreate — `musehub/models/musehub.py` L2330–2345
+ table@L2336 section table@L2336 L2336–2343
+ py` section ReleaseAssetDownloadCount — `musehub/models/musehub.py` L2345–2359
+ table@L2351 section table@L2351 L2351–2357
+ py` section ReleaseAssetListResponse — `musehub/models/musehub.py` L2359–2374
+ table@L2365 section table@L2365 L2365–2372
+ py` section ReleaseAssetResponse — `musehub/models/musehub.py` L2374–2393
+ table@L2380 section table@L2380 L2380–2391
+ py` section ReleaseCreate — `musehub/models/musehub.py` L2393–2420
+ table@L2399 section table@L2399 L2399–2418
+ py` section ReleaseDownloadStatsResponse — `musehub/models/musehub.py` L2420–2434
+ table@L2426 section table@L2426 L2426–2432
+ py` section ReleaseDownloadUrls — `musehub/models/musehub.py` L2434–2445
+ table@L2440 section table@L2440 L2440–2443
+ py` section ReleaseListResponse — `musehub/models/musehub.py` L2445–2458
+ table@L2451 section table@L2451 L2451–2456
+ py` section ReleaseResponse — `musehub/models/musehub.py` L2458–2490
+ table@L2464 section table@L2464 L2464–2488
+ py` section RepoListResponse — `musehub/models/musehub.py` L2490–2503
+ table@L2496 section table@L2496 L2496–2501
+ py` section RepoResponse — `musehub/models/musehub.py` L2503–2526
+ table@L2509 section table@L2509 L2509–2524
+ py` section RepoSettingsPatch — `musehub/models/musehub.py` L2526–2551
+ table@L2532 section table@L2532 L2532–2549
+ py` section RepoSettingsResponse — `musehub/models/musehub.py` L2551–2576
+ table@L2557 section table@L2557 L2557–2574
+ py` section RepoStatsResponse — `musehub/models/musehub.py` L2576–2589
+ table@L2582 section table@L2582 L2582–2587
+ py` section SearchCommitMatch — `musehub/models/musehub.py` L2589–2606
+ table@L2595 section table@L2595 L2595–2604
+ py` section SearchResponse — `musehub/models/musehub.py` L2606–2621
+ table@L2612 section table@L2612 L2612–2619
+ py` section SemanticReleaseReportResponse — `musehub/models/musehub.py` L2621–2648
+ table@L2627 section table@L2627 L2627–2646
+ py` section SessionCreate — `musehub/models/musehub.py` L2648–2663
+ table@L2654 section table@L2654 L2654–2661
+ py` section SessionListResponse — `musehub/models/musehub.py` L2663–2676
+ table@L2669 section table@L2669 L2669–2674
+ py` section SessionResponse — `musehub/models/musehub.py` L2676–2697
+ table@L2682 section table@L2682 L2682–2695
+ py` section SessionStop — `musehub/models/musehub.py` L2697–2708
+ table@L2703 section table@L2703 L2703–2706
+ py` section SetTopicsRequest — `musehub/api/routes/musehub/topics.py` L872–883
+ table@L878 section table@L878 L878–881
+ py` section SetTopicsResponse — `musehub/api/routes/musehub/topics.py` L883–895
+ table@L889 section table@L889 L889–893
+ py` section Settings — `musehub/config.py` L1009–1058
+ table@L1015 section table@L1015 L1015–1056
+ py` section SnapshotBatchRequest — `musehub/models/musehub.py` L2708–2720
+ table@L2714 section table@L2714 L2714–2718
+ py` section SnapshotDiffEntry — `musehub/models/musehub.py` L2720–2736
+ table@L2726 section table@L2726 L2726–2734
+ py` section SnapshotDiffResponse — `musehub/models/musehub.py` L2736–2755
+ table@L2742 section table@L2742 L2742–2753
+ py` section SnapshotEntryListResponse — `musehub/models/musehub.py` L2755–2769
+ table@L2761 section table@L2761 L2761–2767
+ py` section SnapshotEntryResponse — `musehub/models/musehub.py` L2769–2782
+ table@L2775 section table@L2775 L2775–2780
+ py` section SnapshotInput — `musehub/models/musehub.py` L2782–2795
+ table@L2788 section table@L2788 L2788–2793
+ py` section SnapshotListResponse — `musehub/models/musehub.py` L2795–2808
+ table@L2801 section table@L2801 L2801–2806
+ py` section SnapshotResponse — `musehub/models/musehub.py` L2808–2825
+ table@L2814 section table@L2814 L2814–2823
+ py` section SnapshotSummaryResponse — `musehub/models/musehub.py` L2825–2841
+ table@L2831 section table@L2831 L2831–2839
+ py` section StarResponse — `musehub/models/musehub.py` L2841–2853
+ table@L2847 section table@L2847 L2847–2851
+ py` section StargazerEntry — `musehub/models/musehub.py` L2853–2865
+ table@L2859 section table@L2859 L2859–2863
+ py` section StargazerListResponse — `musehub/models/musehub.py` L2865–2877
+ table@L2871 section table@L2871 L2871–2875
+ py` section SymbolBlameEntry — `musehub/models/musehub.py` L2877–2899
+ table@L2883 section table@L2883 L2883–2897
+ py` section SymbolBlameResponse — `musehub/models/musehub.py` L2899–2912
+ table@L2905 section table@L2905 L2905–2910
+ py` section SymbolKindCountResponse — `musehub/models/musehub.py` L2912–2924
+ table@L2918 section table@L2918 L2918–2922
+ py` section TagListResponse — `musehub/models/musehub.py` L2924–2936
+ table@L2930 section table@L2930 L2930–2934
+ py` section TagResponse — `musehub/models/musehub.py` L2936–2951
+ table@L2942 section table@L2942 L2942–2949
+ py` section TimelineCommitEvent — `musehub/models/musehub.py` L2951–2968
+ table@L2957 section table@L2957 L2957–2966
+ py` section TimelineEmotionEvent — `musehub/models/musehub.py` L2968–2984
+ table@L2974 section table@L2974 L2974–2982
+ py` section TimelineResponse — `musehub/models/musehub.py` L2984–2999
+ table@L2990 section table@L2990 L2990–2997
+ py` section TimelineSectionEvent — `musehub/models/musehub.py` L2999–3014
+ table@L3005 section table@L3005 L3005–3012
+ py` section TimelineTrackEvent — `musehub/models/musehub.py` L3014–3029
+ table@L3020 section table@L3020 L3020–3027
+ py` section TopicItem — `musehub/api/routes/musehub/topics.py` L895–907
+ table@L901 section table@L901 L901–905
+ py` section TopicListResponse — `musehub/api/routes/musehub/topics.py` L907–918
+ table@L913 section table@L913 L913–916
+ py` section TopicReposResponse — `musehub/api/routes/musehub/topics.py` L918–932
+ table@L924 section table@L924 L924–930
+ py` section TopicsIndexResponse — `musehub/api/routes/musehub/ui_topics.py` L944–957
+ table@L950 section table@L950 L950–955
+ py` section TransferOwnershipRequest — `musehub/models/musehub.py` L3029–3040
+ table@L3035 section table@L3035 L3035–3038
+ py` section TreeEntryResponse — `musehub/models/musehub.py` L3040–3055
+ table@L3046 section table@L3046 L3046–3053
+ py` section TreeListResponse — `musehub/models/musehub.py` L3055–3070
+ table@L3061 section table@L3061 L3061–3068
+ py` section UpdateIdentityRequest — `musehub/api/routes/api/identities.py` L726–741
+ table@L730 section table@L730 L730–739
+ py` section UserActivityEventItem — `musehub/models/musehub.py` L3070–3086
+ table@L3076 section table@L3076 L3076–3084
+ py` section UserActivityFeedResponse — `musehub/models/musehub.py` L3086–3099
+ table@L3092 section table@L3092 L3092–3097
+ py` section UserCardResponse — `musehub/api/routes/musehub/users.py` L970–983
+ table@L976 section table@L976 L976–981
+ py` section UserForkedRepoEntry — `musehub/models/musehub.py` L3099–3114
+ table@L3105 section table@L3105 L3105–3112
+ py` section UserForksResponse — `musehub/models/musehub.py` L3114–3126
+ table@L3120 section table@L3120 L3120–3124
+ py` section UserStarredRepoEntry — `musehub/models/musehub.py` L3126–3139
+ table@L3132 section table@L3132 L3132–3137
+ py` section UserStarredResponse — `musehub/models/musehub.py` L3139–3151
+ table@L3145 section table@L3145 L3145–3149
+ py` section UserWatchedRepoEntry — `musehub/models/musehub.py` L3151–3164
+ table@L3157 section table@L3157 L3157–3162
+ py` section UserWatchedResponse — `musehub/models/musehub.py` L3164–3176
+ table@L3170 section table@L3170 L3170–3174
+ py` section VerifyRequest — `musehub/models/musehub_auth.py` L3355–3372
+ table@L3361 section table@L3361 L3361–3370
+ py` section VerifyResponse — `musehub/models/musehub_auth.py` L3372–3387
+ table@L3378 section table@L3378 L3378–3385
+ py` section WebhookCreate — `musehub/models/musehub.py` L3176–3189
+ table@L3182 section table@L3182 L3182–3187
+ py` section WebhookDeliveryListResponse — `musehub/models/musehub.py` L3189–3202
+ table@L3195 section table@L3195 L3195–3200
+ py` section WebhookDeliveryResponse — `musehub/models/musehub.py` L3202–3221
+ table@L3208 section table@L3208 L3208–3219
+ py` section WebhookListResponse — `musehub/models/musehub.py` L3221–3234
+ table@L3227 section table@L3227 L3227–3232
+ py` section WebhookRedeliverResponse — `musehub/models/musehub.py` L3234–3250
+ table@L3240 section table@L3240 L3240–3248
+ py` section WebhookResponse — `musehub/models/musehub.py` L3250–3266
+ table@L3256 section table@L3256 L3256–3264
+ py` section WireBundle — `musehub/models/wire.py` L3479–3493
+ table@L3485 section table@L3485 L3485–3491
+ py` section WireCommit — `musehub/models/wire.py` L3493–3526
+ table@L3499 section table@L3499 L3499–3524
+ py` section WireConfirmObjectsRequest — `musehub/models/wire.py` L3526–3538
+ table@L3532 section table@L3532 L3532–3536
+ py` section WireConfirmObjectsResponse — `musehub/models/wire.py` L3538–3550
+ table@L3544 section table@L3544 L3544–3548
+ py` section WireFetchObjectsRequest — `musehub/models/wire.py` L3550–3561
+ table@L3556 section table@L3556 L3556–3559
+ py` section WireFetchRequest — `musehub/models/wire.py` L3561–3573
+ table@L3567 section table@L3567 L3567–3571
+ py` section WireFetchResponse — `musehub/models/wire.py` L3573–3586
+ table@L3579 section table@L3579 L3579–3584
+ py` section WireFilterRequest — `musehub/models/wire.py` L3586–3598
+ table@L3592 section table@L3592 L3592–3596
+ py` section WireFilterResponse — `musehub/models/wire.py` L3598–3610
+ table@L3604 section table@L3604 L3604–3608
+ py` section WireNegotiateRequest — `musehub/models/wire.py` L3610–3622
+ table@L3616 section table@L3616 L3616–3620
+ py` section WireNegotiateResponse — `musehub/models/wire.py` L3622–3635
+ table@L3628 section table@L3628 L3628–3633
+ py` section WireObject — `musehub/models/wire.py` L3635–3650
+ table@L3641 section table@L3641 L3641–3648
+ py` section WireObjectPackRequest — `musehub/models/wire.py` L3650–3661
+ table@L3656 section table@L3656 L3656–3659
+ py` section WireObjectPackResponse — `musehub/models/wire.py` L3661–3673
+ table@L3667 section table@L3667 L3667–3671
+ py` section WireObjectsRequest — `musehub/models/wire.py` L3673–3684
+ table@L3679 section table@L3679 L3679–3682
+ py` section WireObjectsResponse — `musehub/models/wire.py` L3684–3696
+ table@L3690 section table@L3690 L3690–3694
+ py` section WirePresignRequest — `musehub/models/wire.py` L3696–3709
+ table@L3702 section table@L3702 L3702–3707
+ py` section WirePresignResponse — `musehub/models/wire.py` L3709–3721
+ table@L3715 section table@L3715 L3715–3719
+ py` section WirePushRequest — `musehub/models/wire.py` L3721–3735
+ table@L3727 section table@L3727 L3727–3733
+ py` section WirePushResponse — `musehub/models/wire.py` L3735–3749
+ table@L3741 section table@L3741 L3741–3747
+ py` section WireRefsResponse — `musehub/models/wire.py` L3749–3764
+ table@L3755 section table@L3755 L3755–3762
+ py` section WireSnapshot — `musehub/models/wire.py` L3764–3778
+ table@L3770 section table@L3770 L3770–3776
+ py` section WireTagInput — `musehub/models/musehub.py` L3266–3280
+ table@L3272 section table@L3272 L3272–3278
+ py` section _SampleModel — `tests/test_musehub_negotiate.py` L3892–3904
+ table@L3898 section table@L3898 L3898–3902
+ py` section _WorkerObjectEntry — `musehub/api/routes/wire.py` L983–996
+ table@L989 section table@L989 L989–994
+ py` section _WorkerRegisterRequest — `musehub/api/routes/wire.py` L996–1009
+ table@L1002 section table@L1002 L1002–1007
+ SQLAlchemy ORM Models section SQLAlchemy ORM Models L3904–4780
+ py` section MuseCliCommit — `musehub/db/muse_cli_models.py` L3971–3994
+ table@L3979 section table@L3979 L3979–3992
+ py` section MuseCliObject — `musehub/db/muse_cli_models.py` L3994–4009
+ table@L4002 section table@L4002 L4002–4007
+ py` section MuseCliSnapshot — `musehub/db/muse_cli_models.py` L4009–4024
+ table@L4017 section table@L4017 L4017–4022
+ py` section MuseCliTag — `musehub/db/muse_cli_models.py` L4024–4041
+ table@L4032 section table@L4032 L4032–4039
+ py` section MusehubAuthChallenge — `musehub/db/musehub_auth_models.py` L4041–4058
+ table@L4049 section table@L4049 L4049–4056
+ py` section MusehubAuthKey — `musehub/db/musehub_auth_models.py` L4058–4078
+ table@L4066 section table@L4066 L4066–4076
+ py` section MusehubBackgroundJob — `musehub/db/musehub_models.py` L4190–4212
+ table@L4198 section table@L4198 L4198–4210
+ py` section MusehubBranch — `musehub/db/musehub_models.py` L4212–4229
+ table@L4220 section table@L4220 L4220–4227
+ py` section MusehubCollaborator — `musehub/db/musehub_collaborator_models.py` L4078–4097
+ table@L4086 section table@L4086 L4086–4095
+ py` section MusehubCommit — `musehub/db/musehub_models.py` L4229–4252
+ table@L4237 section table@L4237 L4237–4250
+ py` section MusehubCoordRecord — `musehub/db/coord_models.py` L3906–3926
+ table@L3914 section table@L3914 L3914–3924
+ py` section MusehubCoordReservation — `musehub/db/coord_models.py` L3926–3947
+ table@L3934 section table@L3934 L3934–3945
+ py` section MusehubCoordTask — `musehub/db/coord_models.py` L3947–3971
+ table@L3955 section table@L3955 L3955–3969
+ py` section MusehubDomain — `musehub/db/musehub_domain_models.py` L4097–4124
+ table@L4105 section table@L4105 L4105–4122
+ py` section MusehubDomainInstall — `musehub/db/musehub_domain_models.py` L4124–4140
+ table@L4132 section table@L4132 L4132–4138
+ py` section MusehubFileIntelCache — `musehub/db/musehub_models.py` L4252–4271
+ table@L4260 section table@L4260 L4260–4269
+ py` section MusehubFork — `musehub/db/musehub_models.py` L4271–4288
+ table@L4279 section table@L4279 L4279–4286
+ py` section MusehubIdentity — `musehub/db/musehub_models.py` L4288–4323
+ table@L4296 section table@L4296 L4296–4321
+ py` section MusehubIssue — `musehub/db/musehub_models.py` L4323–4353
+ table@L4331 section table@L4331 L4331–4351
+ py` section MusehubIssueComment — `musehub/db/musehub_models.py` L4353–4375
+ table@L4361 section table@L4361 L4361–4373
+ py` section MusehubIssueEvent — `musehub/db/musehub_models.py` L4375–4395
+ table@L4383 section table@L4383 L4383–4393
+ py` section MusehubIssueLabel — `musehub/db/musehub_label_models.py` L4140–4155
+ table@L4148 section table@L4148 L4148–4153
+ py` section MusehubLabel — `musehub/db/musehub_label_models.py` L4155–4175
+ table@L4163 section table@L4163 L4163–4173
+ py` section MusehubObject — `musehub/db/musehub_models.py` L4395–4417
+ table@L4403 section table@L4403 L4403–4415
+ py` section MusehubProposal — `musehub/db/musehub_models.py` L4417–4452
+ table@L4425 section table@L4425 L4425–4450
+ py` section MusehubProposalComment — `musehub/db/musehub_models.py` L4452–4474
+ table@L4460 section table@L4460 L4460–4472
+ py` section MusehubProposalLabel — `musehub/db/musehub_label_models.py` L4175–4190
+ table@L4183 section table@L4183 L4183–4188
+ py` section MusehubProposalReview — `musehub/db/musehub_models.py` L4474–4494
+ table@L4482 section table@L4482 L4482–4492
+ py` section MusehubRelease — `musehub/db/musehub_models.py` L4494–4531
+ table@L4502 section table@L4502 L4502–4529
+ py` section MusehubReleaseAsset — `musehub/db/musehub_models.py` L4531–4554
+ table@L4539 section table@L4539 L4539–4552
+ py` section MusehubRepo — `musehub/db/musehub_models.py` L4554–4592
+ table@L4562 section table@L4562 L4562–4590
+ py` section MusehubSession — `musehub/db/musehub_models.py` L4592–4617
+ table@L4600 section table@L4600 L4600–4615
+ py` section MusehubSnapshot — `musehub/db/musehub_models.py` L4617–4636
+ table@L4625 section table@L4625 L4625–4633
+ py` section MusehubSymbolIndex — `musehub/db/musehub_models.py` L4636–4657
+ table@L4644 section table@L4644 L4644–4655
+ py` section MusehubWebhook — `musehub/db/musehub_models.py` L4657–4679
+ table@L4665 section table@L4665 L4665–4677
+ py` section MusehubWebhookDelivery — `musehub/db/musehub_models.py` L4679–4701
+ table@L4687 section table@L4687 L4687–4699
+ py` section MusehubWireTag — `musehub/db/musehub_models.py` L4701–4719
+ table@L4709 section table@L4709 L4709–4717
+ py` section _A — `tests/test_schema_check.py` L4719–4731
+ table@L4725 section table@L4725 L4725–4729
+ py`@L4731 section _A — `tests/test_schema_check.py` L4731–4743
+ table@L4737 section table@L4737 L4737–4741
+ py` section _B — `tests/test_schema_check.py` L4743–4755
+ table@L4749 section table@L4749 L4749–4753
+ py` section _Clean — `tests/test_schema_check.py` L4755–4767
+ table@L4761 section table@L4761 L4761–4765
+ py` section _Gadget — `tests/test_schema_check.py` L4767–4780
+ table@L4773 section table@L4773 L4773–4778
+ Table of Contents section Table of Contents L12–22
+ TypedDicts section TypedDicts L89–707
+ py` section DAWToolCallMessage — `musehub/muse_contracts/mcp_types.py` L266–280
+ table@L272 section table@L272 L272–278
+ py` section DAWToolResponse — `musehub/muse_contracts/mcp_types.py` L280–293
+ table@L286 section table@L286 L286–291
+ py` section ElicitationAction — `musehub/muse_contracts/mcp_types.py` L293–305
+ table@L299 section table@L299 L299–303
+ py` section ElicitationRequest — `musehub/muse_contracts/mcp_types.py` L305–320
+ table@L311 section table@L311 L311–318
+ py` section ElicitationResponse — `musehub/muse_contracts/mcp_types.py` L320–332
+ table@L326 section table@L326 L326–330
+ py` section IssueEventPayload — `musehub/models/musehub.py` L217–233
+ table@L223 section table@L223 L223–231
+ py` section MCPCallResponse — `musehub/muse_contracts/mcp_types.py` L332–345
+ table@L338 section table@L338 L338–343
+ py` section MCPCallResult — `musehub/muse_contracts/mcp_types.py` L345–357
+ table@L351 section table@L351 L351–355
+ py` section MCPCapabilities — `musehub/muse_contracts/mcp_types.py` L357–369
+ table@L363 section table@L363 L363–367
+ py` section MCPCapabilitiesResult — `musehub/muse_contracts/mcp_types.py` L369–380
+ table@L375 section table@L375 L375–378
+ py` section MCPContentBlock — `musehub/muse_contracts/mcp_types.py` L380–392
+ table@L386 section table@L386 L386–390
+ py` section MCPErrorDetail — `musehub/muse_contracts/mcp_types.py` L392–405
+ table@L398 section table@L398 L398–403
+ py` section MCPErrorResponse — `musehub/muse_contracts/mcp_types.py` L405–418
+ table@L411 section table@L411 L411–416
+ py` section MCPInitializeParams — `musehub/muse_contracts/mcp_types.py` L418–431
+ table@L424 section table@L424 L424–429
+ py` section MCPInitializeResponse — `musehub/muse_contracts/mcp_types.py` L431–444
+ table@L437 section table@L437 L437–442
+ py` section MCPInitializeResult — `musehub/muse_contracts/mcp_types.py` L444–457
+ table@L450 section table@L450 L450–455
+ py` section MCPInputSchema — `musehub/muse_contracts/mcp_types.py` L457–470
+ table@L463 section table@L463 L463–468
+ py` section MCPPromptArgument — `musehub/mcp/prompts.py` L114–127
+ table@L120 section table@L120 L120–125
+ py` section MCPPromptDef — `musehub/mcp/prompts.py` L127–140
+ table@L133 section table@L133 L133–138
+ py` section MCPPromptMessage — `musehub/mcp/prompts.py` L140–152
+ table@L146 section table@L146 L146–150
+ py` section MCPPromptMessageContent — `musehub/mcp/prompts.py` L152–164
+ table@L158 section table@L158 L158–162
+ py` section MCPPromptResult — `musehub/mcp/prompts.py` L164–176
+ table@L170 section table@L170 L170–174
+ py` section MCPPropertyDef — `musehub/muse_contracts/mcp_types.py` L470–488
+ table@L476 section table@L476 L476–486
+ py` section MCPRequest — `musehub/muse_contracts/mcp_types.py` L488–502
+ table@L494 section table@L494 L494–500
+ py` section MCPResource — `musehub/mcp/resources.py` L176–190
+ table@L182 section table@L182 L182–188
+ py` section MCPResourceContent — `musehub/mcp/resources.py` L190–203
+ table@L196 section table@L196 L196–201
+ py` section MCPResourceTemplate — `musehub/mcp/resources.py` L203–217
+ table@L209 section table@L209 L209–215
+ py` section MCPResourcesCapability — `musehub/muse_contracts/mcp_types.py` L502–511
+ py` section MCPServerInfo — `musehub/muse_contracts/mcp_types.py` L511–525
+ table@L517 section table@L517 L517–523
+ py` section MCPSuccessResponse — `musehub/muse_contracts/mcp_types.py` L525–538
+ table@L531 section table@L531 L531–536
+ py` section MCPToolAnnotations — `musehub/muse_contracts/mcp_types.py` L538–552
+ table@L544 section table@L544 L544–550
+ py` section MCPToolCallParams — `musehub/muse_contracts/mcp_types.py` L552–564
+ table@L558 section table@L558 L558–562
+ py` section MCPToolDef — `musehub/muse_contracts/mcp_types.py` L564–579
+ table@L570 section table@L570 L570–577
+ py` section MCPToolsCapability — `musehub/muse_contracts/mcp_types.py` L579–588
+ py` section MCPToolsListResponse — `musehub/muse_contracts/mcp_types.py` L588–601
+ table@L594 section table@L594 L594–599
+ py` section MCPToolsListResult — `musehub/muse_contracts/mcp_types.py` L601–612
+ table@L607 section table@L607 L607–610
+ py` section ProposalEventPayload — `musehub/models/musehub.py` L233–251
+ table@L239 section table@L239 L239–249
+ py` section PushEventPayload — `musehub/models/musehub.py` L251–266
+ table@L257 section table@L257 L257–264
+ py` section SessionInfo — `musehub/muse_contracts/mcp_types.py` L612–631
+ table@L618 section table@L618 L618–629
+ py` section _ChildOp — `tests/test_musehub_proposals_touched_symbols.py` L631–642
+ table@L635 section table@L635 L635–640
+ py` section _Delta — `tests/test_musehub_proposals_touched_symbols.py` L642–651
+ table@L646 section table@L646 L646–649
+ py` section _DeltaObjectPayload — `tests/test_wire_compression.py` L670–683
+ table@L674 section table@L674 L674–681
+ py` section _DeltaOp — `tests/test_musehub_proposals_touched_symbols.py` L651–661
+ table@L655 section table@L655 L655–659
+ py` section _IdentityDict — `musehub/api/routes/api/identities.py` L91–114
+ table@L95 section table@L95 L95–112
+ py` section _RawObjectPayload — `tests/test_wire_compression.py` L683–695
+ table@L687 section table@L687 L687–693
+ py` section _S3GetResponse — `tests/test_storage_backends_section33.py` L661–670
+ table@L665 section table@L665 L665–668
+ py` section _ZlibObjectPayload — `tests/test_wire_compression.py` L695–707
+ table@L699 section table@L699 L699–705
~ docs/secret-rotation-runbook.md .md 16 symbols added
+ Secret Rotation Runbook section Secret Rotation Runbook L1–215
+ DB_PASSWORD rotation section 1. DB_PASSWORD rotation L20–53
+ code[bash]@L24 variable variable code[bash]@L24 L24–50
+ WEBHOOKSECRETKEY rotation section 2. WEBHOOKSECRETKEY rotation L53–82
+ code[bash]@L61 variable variable code[bash]@L61 L61–79
+ RUNNER_TOKEN rotation section 3. RUNNER_TOKEN rotation L82–108
+ code[bash]@L89 variable variable code[bash]@L89 L89–105
+ R2 credentials rotation section 4. R2 credentials rotation L108–140
+ code[bash]@L112 variable variable code[bash]@L112 L112–137
+ Docker image layer audit section 5. Docker image layer audit L140–171
+ code[bash]@L144 variable variable code[bash]@L144 L144–166
+ First-time SSM bootstrap section 6. First-time SSM bootstrap L171–202
+ code[bash]@L175 variable variable code[bash]@L175 L175–199
+ Compromise response section 7. Compromise response L202–215
+ Overview section Overview L5–20
+ table@L11 section table@L11 L11–17
~ musehub/auth/request_signing.py .py 31 symbols added
+ MSignContext class class MSignContext L73–86
+ REPLAY_WINDOW_SECONDS variable variable REPLAY_WINDOW_SECONDS L52–52
+ _MSIGN_RE variable variable _MSIGN_RE L55–61
+ _STANDARD_PORTS variable variable _STANDARD_PORTS L64–64
+ _normalise_host function function _normalise_host L102–114
+ _parse_msign_header function function _parse_msign_header L94–99
+ _verify_msign function async_function _verify_msign L134–274
+ build_canonical_message function function build_canonical_message L117–131
+ AsyncSession import import AsyncSession L44–44
+ Awaitable import import Awaitable L39–39
+ Callable import import Callable L39–39
+ Depends import import Depends L42–42
+ HTTPException import import HTTPException L42–42
+ MusehubAuthKey import import MusehubAuthKey L47–47
+ MusehubIdentity import import MusehubIdentity L48–48
+ Request import import Request L42–42
+ annotations import import annotations L32–32
+ dataclass class import dataclass L40–40
+ datetime import import datetime L34–34
+ field import import field L40–40
+ get_db import import get_db L46–46
+ hashlib import import hashlib L35–35
+ logging import import logging L36–36
+ re import import re L37–37
+ select import import select L43–43
+ status import import status L42–42
+ time import import time L38–38
+ logger variable variable logger L50–50
+ optional_signed_request function async_function optional_signed_request L292–297
+ require_scope function function require_scope L300–325
+ require_signed_request function async_function require_signed_request L282–289
~ musehub/config.py .py 11 symbols added
+ Settings class class Settings L20–177
+ _warn_cors_wildcard_in_production method method _warn_cors_wildcard_in_production L55–62
+ _warn_missing_production_secrets method method _warn_missing_production_secrets L159–171
+ _app_version_from_package function function _app_version_from_package L14–17
+ get_settings function function get_settings L181–183
+ BaseSettings import import BaseSettings L11–11
+ SettingsConfigDict import import SettingsConfigDict L11–11
+ logging import import logging L7–7
+ lru_cache import import lru_cache L8–8
+ model_validator import import model_validator L10–10
+ settings variable variable settings L187–187
~ tests/test_api_contracts.py .py 107 symbols added
+ TestAPIContractsPerformance class class TestAPIContractsPerformance L593–678
+ test_1k_repo_responses_validated_under_500ms method method test_1k_repo_responses_validated_under_500ms L630–649
+ test_model_dump_by_alias_1k_under_200ms method method test_model_dump_by_alias_1k_under_200ms L660–678
+ test_openapi_cached_retrieval_under_10ms method method test_openapi_cached_retrieval_under_10ms L606–616
+ test_openapi_json_endpoint_under_200ms method async_method test_openapi_json_endpoint_under_200ms L651–658
+ test_openapi_schema_generation_under_1_second method method test_openapi_schema_generation_under_1_second L596–604
+ test_to_camel_10k_strings_under_100ms method method test_to_camel_10k_strings_under_100ms L618–628
+ TestAPIContractsSecurity class class TestAPIContractsSecurity L510–585
+ test_404_response_no_traceback method async_method test_404_response_no_traceback L566–568
+ test_422_response_has_detail_key method async_method test_422_response_has_detail_key L522–530
+ test_auth_required_route_returns_401_not_500 method async_method test_auth_required_route_returns_401_not_500 L570–573
+ test_error_body_no_python_exception_class class async_method test_error_body_no_python_exception_class L550–559
+ test_invalid_json_body_returns_422_not_500 method async_method test_invalid_json_body_returns_422_not_500 L513–520
+ test_method_not_allowed_returns_405 method async_method test_method_not_allowed_returns_405 L575–578
+ test_missing_required_body_field_returns_422 method async_method test_missing_required_body_field_returns_422 L532–539
+ test_openapi_json_no_stack_trace method async_method test_openapi_json_no_stack_trace L541–548
+ test_openapi_json_not_exposing_server_internals method async_method test_openapi_json_not_exposing_server_internals L580–585
+ test_unknown_api_route_returns_404 method async_method test_unknown_api_route_returns_404 L561–564
+ TestCamelCaseRoundTrip class class TestCamelCaseRoundTrip L401–502
+ _make_repo method method _make_repo L404–418
+ test_alias_generator_consistent method method test_alias_generator_consistent L498–502
+ test_branch_camel_keys method method test_branch_camel_keys L484–488
+ test_camelmodel_requires_snake_or_camel_on_input method method test_camelmodel_requires_snake_or_camel_on_input L490–496
+ test_commit_camel_keys method method test_commit_camel_keys L438–452
+ test_issue_camel_keys method method test_issue_camel_keys L454–470
+ test_repo_camel_keys method method test_repo_camel_keys L420–425
+ test_repo_round_trip method method test_repo_round_trip L427–431
+ test_repo_snake_dump_no_camel method method test_repo_snake_dump_no_camel L433–436
+ test_tag_camel_keys method method test_tag_camel_keys L472–482
+ TestCamelModelConfig class class TestCamelModelConfig L77–122
+ test_alias_generator_set method method test_alias_generator_set L80–81
+ test_camel_dump_by_alias method method test_camel_dump_by_alias L117–122
+ test_populate_by_camel_alias method method test_populate_by_camel_alias L102–107
+ test_populate_by_name_enabled method method test_populate_by_name_enabled L83–84
+ test_populate_by_snake_name method method test_populate_by_snake_name L95–100
+ test_snake_dump_default method method test_snake_dump_default L109–115
+ test_subclass_inherits_alias_generator class method test_subclass_inherits_alias_generator L86–93
+ TestModelFieldValidation class class TestModelFieldValidation L125–165
+ test_branch_response_required_fields method method test_branch_response_required_fields L154–157
+ test_commit_response_json_schema_generated method method test_commit_response_json_schema_generated L163–165
+ test_commit_response_required_fields method method test_commit_response_required_fields L134–137
+ test_issue_response_required_fields method method test_issue_response_required_fields L139–142
+ test_release_response_required_fields method method test_release_response_required_fields L144–147
+ test_repo_response_json_schema_has_properties method method test_repo_response_json_schema_has_properties L159–161
+ test_repo_response_required_fields method method test_repo_response_required_fields L128–132
+ test_tag_response_required_fields method method test_tag_response_required_fields L149–152
+ TestOpenAPIEndpointsE2E class class TestOpenAPIEndpointsE2E L260–317
+ test_docs_returns_200 method async_method test_docs_returns_200 L287–289
+ test_docs_returns_html method async_method test_docs_returns_html L291–293
+ test_openapi_json_commit_response_in_schemas method async_method test_openapi_json_commit_response_in_schemas L304–307
+ test_openapi_json_content_type method async_method test_openapi_json_content_type L267–269
+ test_openapi_json_has_components method async_method test_openapi_json_has_components L281–285
+ test_openapi_json_has_paths method async_method test_openapi_json_has_paths L271–275
+ test_openapi_json_issue_response_in_schemas method async_method test_openapi_json_issue_response_in_schemas L309–312
+ test_openapi_json_release_response_in_schemas method async_method test_openapi_json_release_response_in_schemas L314–317
+ test_openapi_json_repo_response_in_schemas method async_method test_openapi_json_repo_response_in_schemas L299–302
+ test_openapi_json_returns_200 method async_method test_openapi_json_returns_200 L263–265
+ test_openapi_json_version_3_1 method async_method test_openapi_json_version_3_1 L277–279
+ test_redoc_returns_200 method async_method test_redoc_returns_200 L295–297
+ TestOpenAPISchemaGeneration class class TestOpenAPISchemaGeneration L181–252
+ test_all_operations_have_2xx_response method method test_all_operations_have_2xx_response L207–218
+ test_all_operations_have_summary method method test_all_operations_have_summary L198–205
+ test_component_schema_count_at_least_130 method method test_component_schema_count_at_least_130 L194–196
+ test_has_info_block method method test_has_info_block L187–189
+ test_key_response_models_in_components method method test_key_response_models_in_components L239–242
+ test_openapi_version_is_3_1 method method test_openapi_version_is_3_1 L184–185
+ test_path_count_at_least_170 method method test_path_count_at_least_170 L191–192
+ test_schema_has_components_key method method test_schema_has_components_key L226–227
+ test_schema_has_paths_key method method test_schema_has_paths_key L223–224
+ test_schema_is_dict method method test_schema_is_dict L220–221
+ test_schema_serialisable_to_json method method test_schema_serialisable_to_json L248–252
+ test_total_operation_count method method test_total_operation_count L229–237
+ test_validation_error_schema_present method method test_validation_error_schema_present L244–246
+ TestOpenAPIStress class class TestOpenAPIStress L325–393
+ test_bulk_commit_response_serialisation method method test_bulk_commit_response_serialisation L363–376
+ test_bulk_repo_response_serialisation method method test_bulk_repo_response_serialisation L341–361
+ test_model_json_schema_repeated method method test_model_json_schema_repeated L388–393
+ test_schema_generation_idempotent method method test_schema_generation_idempotent L328–333
+ test_schema_path_count_stable_across_calls method method test_schema_path_count_stable_across_calls L335–339
+ test_to_camel_bulk method method test_to_camel_bulk L378–386
+ TestToCamel class class TestToCamel L40–74
+ test_all_caps_word method method test_all_caps_word L55–57
+ test_already_camel_unchanged method method test_already_camel_unchanged L62–64
+ test_empty_string method method test_empty_string L59–60
+ test_is_prefix method method test_is_prefix L52–53
+ test_multiple_underscores method method test_multiple_underscores L70–71
+ test_return_type_is_str method method test_return_type_is_str L73–74
+ test_single_word_unchanged method method test_single_word_unchanged L43–44
+ test_three_word_snake method method test_three_word_snake L49–50
+ test_trailing_underscore method method test_trailing_underscore L66–68
+ test_two_word_snake method method test_two_word_snake L46–47
+ Any import import Any L17–17
+ BranchResponse import import BranchResponse L26–26
+ CamelModel import import CamelModel L25–25
+ CommitResponse import import CommitResponse L26–26
+ IssueResponse import import IssueResponse L26–26
+ ReleaseResponse import import ReleaseResponse L26–26
+ RepoResponse import import RepoResponse L26–26
+ TagResponse import import TagResponse L26–26
+ annotations import import annotations L12–12
+ datetime import import datetime L16–16
+ pytest import import pytest L19–19
+ time import import time L14–14
+ timezone import import timezone L16–16
+ to_camel import import to_camel L25–25
+ warnings import import warnings L15–15
+ openapi_schema function function openapi_schema L174–178
~ tests/test_install_script.py .py 102 symbols added
+ TestBuildSdistUrlUnit class class TestBuildSdistUrlUnit L80–102
+ test_basic_url method method test_basic_url L83–85
+ test_ends_with_tar_gz method method test_ends_with_tar_gz L87–89
+ test_no_platform_in_url method method test_no_platform_in_url L99–102
+ test_under_releases_path method method test_under_releases_path L95–97
+ test_version_embedded method method test_version_embedded L91–93
+ TestGenerateInstallScriptUnit class class TestGenerateInstallScriptUnit L105–160
+ test_contains_muse_version method method test_contains_muse_version L122–124
+ test_contains_musehub_url method method test_contains_musehub_url L112–115
+ test_contains_set_euf method method test_contains_set_euf L126–128
+ test_contains_tar_gz_archive_reference method method test_contains_tar_gz_archive_reference L130–132
+ test_creates_symlink method method test_creates_symlink L146–148
+ test_creates_venv method method test_creates_venv L138–140
+ test_custom_version_embedded method method test_custom_version_embedded L158–160
+ test_no_eval_in_script method method test_no_eval_in_script L150–152
+ test_raises_for_unsafe_url method method test_raises_for_unsafe_url L154–156
+ test_requires_python_314 method method test_requires_python_314 L134–136
+ test_starts_with_shebang method method test_starts_with_shebang L108–110
+ test_url_is_double_quoted_in_assignment method method test_url_is_double_quoted_in_assignment L117–120
+ test_uses_pip_install method method test_uses_pip_install L142–144
+ TestGenerateUninstallScriptUnit class class TestGenerateUninstallScriptUnit L163–191
+ test_contains_set_euf method method test_contains_set_euf L170–172
+ test_does_not_rm_rf_muse_dir method method test_does_not_rm_rf_muse_dir L179–186
+ test_mentions_muse_dir_preserved method method test_mentions_muse_dir_preserved L174–177
+ test_removes_symlink_and_venv method method test_removes_symlink_and_venv L188–191
+ test_starts_with_shebang method method test_starts_with_shebang L166–168
+ TestInstallScriptDataIntegrity class class TestInstallScriptDataIntegrity L368–407
+ test_install_script_cleans_up_tmp_on_exit method method test_install_script_cleans_up_tmp_on_exit L401–403
+ test_install_script_creates_bin_dir_with_mkdir_p method method test_install_script_creates_bin_dir_with_mkdir_p L405–407
+ test_install_script_deterministic_same_url method method test_install_script_deterministic_same_url L381–383
+ test_install_script_different_for_different_urls method method test_install_script_different_for_different_urls L385–388
+ test_install_script_is_valid_utf8 method method test_install_script_is_valid_utf8 L371–374
+ test_install_script_uses_mktemp_for_tmp_dir method method test_install_script_uses_mktemp_for_tmp_dir L397–399
+ test_sdist_url_unique_per_version method method test_sdist_url_unique_per_version L390–392
+ test_uninstall_script_does_not_change_between_calls method method test_uninstall_script_does_not_change_between_calls L394–395
+ test_uninstall_script_is_valid_utf8 method method test_uninstall_script_is_valid_utf8 L376–379
+ TestInstallScriptE2E class class TestInstallScriptE2E L254–320
+ test_get_install_sh_contains_muse_version method async_method test_get_install_sh_contains_muse_version L274–276
+ test_get_install_sh_contains_set_euf method async_method test_get_install_sh_contains_set_euf L270–272
+ test_get_install_sh_contains_tar_gz method async_method test_get_install_sh_contains_tar_gz L278–280
+ test_get_install_sh_contains_venv method async_method test_get_install_sh_contains_venv L282–284
+ test_get_install_sh_content_type_is_shell method async_method test_get_install_sh_content_type_is_shell L261–264
+ test_get_install_sh_no_auth_required method async_method test_get_install_sh_no_auth_required L286–288
+ test_get_install_sh_returns_200 method async_method test_get_install_sh_returns_200 L257–259
+ test_get_install_sh_starts_with_shebang method async_method test_get_install_sh_starts_with_shebang L266–268
+ test_get_uninstall_sh_content_type_is_shell method async_method test_get_uninstall_sh_content_type_is_shell L294–297
+ test_get_uninstall_sh_does_not_rm_muse_dir method async_method test_get_uninstall_sh_does_not_rm_muse_dir L307–314
+ test_get_uninstall_sh_mentions_muse_dir_preserved method async_method test_get_uninstall_sh_mentions_muse_dir_preserved L316–320
+ test_get_uninstall_sh_no_auth_required method async_method test_get_uninstall_sh_no_auth_required L303–305
+ test_get_uninstall_sh_returns_200 method async_method test_get_uninstall_sh_returns_200 L290–292
+ test_get_uninstall_sh_starts_with_shebang method async_method test_get_uninstall_sh_starts_with_shebang L299–301
+ TestInstallScriptIntegration class class TestInstallScriptIntegration L199–246
+ test_build_sdist_url_with_current_version method method test_build_sdist_url_with_current_version L241–246
+ test_generate_install_script_version_matches_muse_version_default method method test_generate_install_script_version_matches_muse_version_default L232–234
+ test_install_script_contains_sdist_url_pattern method method test_install_script_contains_sdist_url_pattern L202–209
+ test_safe_url_re_pattern_matches_valid_urls method method test_safe_url_re_pattern_matches_valid_urls L211–219
+ test_safe_url_re_pattern_rejects_metacharacters method method test_safe_url_re_pattern_rejects_metacharacters L221–230
+ test_uninstall_does_not_reference_musehub_url method method test_uninstall_does_not_reference_musehub_url L236–239
+ TestInstallScriptPerformance class class TestInstallScriptPerformance L484–520
+ test_generate_install_script_under_5ms method method test_generate_install_script_under_5ms L487–492
+ test_generate_uninstall_script_under_1ms method method test_generate_uninstall_script_under_1ms L494–498
+ test_get_install_sh_under_100ms method async_method test_get_install_sh_under_100ms L508–513
+ test_get_uninstall_sh_under_100ms method async_method test_get_uninstall_sh_under_100ms L515–520
+ test_sanitize_url_under_1ms_per_call method method test_sanitize_url_under_1ms_per_call L500–506
+ TestInstallScriptSecurity class class TestInstallScriptSecurity L415–476
+ test_endpoints_no_stack_trace method async_method test_endpoints_no_stack_trace L468–471
+ test_endpoints_return_200_not_500 method async_method test_endpoints_return_200_not_500 L463–466
+ test_generate_install_raises_for_injection method method test_generate_install_raises_for_injection L435–437
+ test_install_script_musehub_url_quoted method method test_install_script_musehub_url_quoted L473–476
+ test_install_script_no_eval method method test_install_script_no_eval L448–453
+ test_install_script_no_source_untrusted method method test_install_script_no_source_untrusted L455–461
+ test_sanitize_rejects_injection_url method method test_sanitize_rejects_injection_url L427–429
+ test_uninstall_script_never_removes_muse_dir method method test_uninstall_script_never_removes_muse_dir L439–446
+ TestInstallScriptStress class class TestInstallScriptStress L328–360
+ test_build_sdist_url_1000_times method method test_build_sdist_url_1000_times L348–351
+ test_generate_install_script_1000_times_identical method method test_generate_install_script_1000_times_identical L331–335
+ test_generate_uninstall_script_1000_times_identical method method test_generate_uninstall_script_1000_times_identical L337–340
+ test_get_install_sh_20_sequential_requests_identical method async_method test_get_install_sh_20_sequential_requests_identical L353–360
+ test_sanitize_url_10000_valid_urls method method test_sanitize_url_10000_valid_urls L342–346
+ TestSanitizeMusehubUrlUnit class class TestSanitizeMusehubUrlUnit L30–77
+ test_accepts_http_url method method test_accepts_http_url L33–34
+ test_accepts_https_url method method test_accepts_https_url L36–37
+ test_accepts_url_with_path method method test_accepts_url_with_path L39–41
+ test_rejects_empty_string method method test_rejects_empty_string L75–77
+ test_rejects_non_http_scheme method method test_rejects_non_http_scheme L71–73
+ test_rejects_url_with_backtick method method test_rejects_url_with_backtick L55–57
+ test_rejects_url_with_dollar method method test_rejects_url_with_dollar L59–61
+ test_rejects_url_with_double_quote method method test_rejects_url_with_double_quote L47–49
+ test_rejects_url_with_newline method method test_rejects_url_with_newline L67–69
+ test_rejects_url_with_semicolon method method test_rejects_url_with_semicolon L63–65
+ test_rejects_url_with_single_quote method method test_rejects_url_with_single_quote L51–53
+ test_strips_trailing_slash method method test_strips_trailing_slash L43–45
+ MUSE_VERSION import import MUSE_VERSION L22–22
+ _SAFE_URL_RE import import _SAFE_URL_RE L15–15
+ annotations import import annotations L8–8
+ build_sdist_url import import build_sdist_url L15–15
+ generate_install_script import import generate_install_script L15–15
+ generate_uninstall_script import import generate_uninstall_script L15–15
+ pytest import import pytest L13–13
+ re import import re L10–10
+ sanitize_musehub_url import import sanitize_musehub_url L15–15
+ time import import time L11–11
~ tests/test_network_transport.py .py 15 symbols added
+ AsyncClient import import AsyncClient L11–11
+ annotations import import annotations L8–8
+ pytest import import pytest L10–10
+ test_cors_config_explicit_headers function function test_cors_config_explicit_headers L137–150
+ test_cors_config_explicit_methods method function test_cors_config_explicit_methods L119–133
+ test_cors_does_not_echo_wildcard_origin_with_credentials function async_function test_cors_does_not_echo_wildcard_origin_with_credentials L100–116
+ test_cors_preflight_allows_explicit_methods method async_function test_cors_preflight_allows_explicit_methods L80–97
+ test_csp_frame_ancestors_none function async_function test_csp_frame_ancestors_none L35–39
+ test_csp_header_present function async_function test_csp_header_present L28–32
+ test_csp_no_unsafe_inline_scripts function async_function test_csp_no_unsafe_inline_scripts L42–54
+ test_csp_upgrade_insecure_requests function async_function test_csp_upgrade_insecure_requests L57–61
+ test_referrer_policy_set function async_function test_referrer_policy_set L64–67
+ test_security_headers_on_api_endpoint function async_function test_security_headers_on_api_endpoint L70–75
+ test_x_content_type_options_nosniff function async_function test_x_content_type_options_nosniff L16–19
+ test_x_frame_options_deny function async_function test_x_frame_options_deny L22–25
← Older Oldest on dev
All commits
Newer → Latest on dev

0 comments

No comments yet. Be the first to start the discussion.

To add a comment, use the Muse CLI: muse hub commit comment sha256:a88854503673dcad22463307411e1cc28e8c62b99ef5c8194ca642f1f99d101b --body "your comment"