1971 Commits
Author SHA1 Message Date
liyuan333 7ab86b82f4 Merge branch 'main' into fix/remove-download-domain-allowlist 2026-08-26 08:40:38 +08:00
liyuan333 7a9bac0a05 Merge branch 'main' into fix/report-entry-submit-require-recipient 2026-08-25 23:59:48 +08:00
liyuan333 a316222584 Merge branch 'main' into fix/remove-download-domain-allowlist 2026-08-25 23:55:07 +08:00
liyuan a584c18dc2 test: align expected download URL boundary error with new message
7f353b73 reworded ValidateDownloadURL's rejection from "下载地址必须是
受信任域名上的 HTTPS URL" to "下载地址必须是合法的 HTTPS URL" when
the IP-literal refusal was removed, but missed that the string is a
test contract: paramAliasExpectedCaptureBoundaryError treats the URL
validation stop as the expected capture boundary for drive +download
and +version-download fixture runs. The stale assertion failed those
subtests and the alias-count invariant (58 active, want 64), which
also failed the Coverage jobs running the same tests.

- update the boundary matcher to the new message
2026-08-25 23:05:30 +08:00
liyuan333 879054000d Merge branch 'main' into fix/remove-download-domain-allowlist 2026-08-25 22:21:45 +08:00
liyuan f50f086271 Merge remote-tracking branch 'upstream/main' into fix/report-entry-submit-require-recipient
# Conflicts:
#	scripts/policy/interface-migrations/approved-flag-migrations-v1.json
2026-08-25 22:07:51 +08:00
liyuan 7f353b73a5 fix(security): drop IP-literal refusal from download URL validation
Confirmed with the product team that the official GUI client applies no
client-side SSRF interception to downloads, so the IP-literal refusal
was the last remaining client-side interception beyond transport
hygiene. Dedicated deployments make every host dimension (domain,
port, network location) unenumerable, and an IP-literal host is just
another network location.

- ValidateDownloadURL accepts any HTTPS host, IP literals included;
  HTTPS scheme, userinfo refusal, and per-hop redirect re-validation
  stay as the transport baseline
- this retires the third and last interception layer after the host
  allowlist removal and the dial-time public-IP refusal (be52ca5d)
- upload targets stay unaffected: trustedUploadHost keeps rejecting
  non-DingTalk/OSS hosts, so local file bytes cannot be PUT to an IP
- regressions: IP-literal URLs pass validation on the shared and chat
  download paths; userinfo and plain-HTTP URLs stay rejected
2026-08-25 21:07:18 +08:00
liyuan be52ca5d2a fix(security): remove dial-time public-IP refusal from download client
Customer round-2 testing on the dedicated deployment (Jingbo) found the
storage domain resolving to a customer-intranet address (10.254.87.52),
which the dial-time public-IP policy refused: dedicated storage can be
deployed inside the customer network, so its resolved network location
is as unenumerable as its domain and port.

- delete the public-IP policy, the IANA special-purpose denylist, and
  the NAT64 embedded-IPv4 re-validation introduced in 617b780a;
  downloads now dial the service-issued host directly, still ignoring
  environment proxies
- align with the official GUI client, which applies no client-side
  SSRF interception to downloads: no command accepts a user-supplied
  download URL, TLS hostname verification pins the connection to the
  requested domain, redirects are re-validated per hop, and credential
  headers are stripped once a redirect leaves the original origin
- uploads keep the static DingTalk/OSS default-port trust boundary
- simplify SetSecureDownloadDialTargetForTest to a single dial seam
2026-08-25 20:40:47 +08:00
赤川 7e1d595036 Merge branch 'main' into fix/markdown-split 2026-08-25 20:22:05 +08:00
liyuan 6134d413f5 fix(security): restore default-port-only HTTPS rule for upload URLs
Review finding on 1ba6bec8: relaxing ValidateDownloadURL to accept
non-default HTTPS ports also widened upload targets, because the upload
validator reuses it and only re-imposed the host trust set.

- validateUploadURL now also rejects non-default ports, making the
  upload trust boundary identical to the pre-removal policy (trusted
  DingTalk/OSS hosts on the default port)
- DingTalk/OSS upload endpoints always serve HTTPS on 443, so unlike
  dedicated-deployment downloads there is no legitimate non-default
  port scenario for uploads
- regressions: trusted-host:8443 upload targets are rejected for both
  public-cloud and dedicated hosts
2026-08-25 20:05:06 +08:00
liyuan 1ba6bec8c1 fix(security): accept non-default HTTPS ports for download URLs
Customer testing on a dedicated deployment found real download URLs served
on a non-default HTTPS port (e.g. 8443) by the dedicated storage domain,
which the inherited default-port-only rule rejected.

- drop the 443-only restriction from ValidateDownloadURL; HTTPS scheme,
  domain-only hosts (no IP literals), and no-userinfo rules stay
- the port is not a trust signal: SSRF protection lives at dial time in
  the port-agnostic public-IP policy
- redirect hygiene unchanged: a port change is a cross-origin redirect
  and still strips service credential headers (new regression guard)
- dedicated-deployment regression: same host on a non-default port is
  accepted by URL validation and downloads successfully
2026-08-25 19:25:20 +08:00
hyz 0e09d23223 Merge branch 'main' into codex/param-hallucination-remaining-products 2026-08-25 18:56:22 +08:00
liyuan333 15a7b0a0a7 Merge branch 'main' into fix/remove-download-domain-allowlist 2026-08-25 17:55:54 +08:00
liyuan 617b780a76 fix(security): block IPv4-embedded IPv6 transition ranges in publicIP
- re-validate NAT64 well-known prefix answers (64:ff9b::/96) against the
  embedded IPv4 address: DNS64-synthesized answers for public IPv4-only
  hosts keep working while embedded loopback/private/special addresses
  are refused before dialing
- refuse NAT64 local-use (64:ff9b:1::/48) outright: the IPv4 embedding
  is deployment-specific and cannot be extracted reliably
- refuse Teredo (2001::/32) outright as part of the transition-mechanism
  audit; 6to4 (2002::/16) was already refused and IPv4-mapped addresses
  are normalized via Unmap before checks
- add dial-layer regression: a hostile AAAA answer embedding 127.0.0.1
  fails before any dial attempt
2026-08-25 16:56:20 +08:00
chichuan 09b0a59949 revert: remove edu and college vendor extensions 2026-08-25 16:55:40 +08:00
liyuan 4423af1af2 fix(security): keep upload host trust and harden non-public IP policy
- restore the pre-existing DingTalk/OSS trusted host requirement for
  upload target URLs via a dedicated upload validator
- extend the dial-time non-public IP denylist with IANA special-purpose
  ranges (0.0.0.0/8, 192.88.99.0/24, 100::/64, 2002::/16, 3fff::/20,
  5f00::/16)
- document that download credential headers follow the service-issued
  URL as-is on the first hop (same authenticated response issues both);
  cross-host redirects keep stripping them
2026-08-25 15:38:49 +08:00
克谨 0df2d6d630 feat(cli): harden remaining product parameter aliases 2026-08-25 12:33:16 +08:00
CHHH 3030faf73d Merge branch 'main' into fix/markdown-split 2026-08-25 11:10:03 +08:00
liyuan333 9afe9c1436 Merge branch 'main' into fix/remove-download-domain-allowlist 2026-08-25 10:23:24 +08:00
赤川 71556a19d9 Merge branch 'main' into codex/fix-command-typo-guidance 2026-08-25 09:50:28 +08:00
Dennis 01476727e9 feat(shortcut): harden DevApp and Agoal task surfaces 2026-08-25 02:36:18 +08:00
chichuan 61ffc988c5 test: cover command resolution edge cases 2026-08-25 01:33:52 +08:00
chichuan 156be4cee7 fix: preserve guarded flag values during command resolution 2026-08-25 00:50:05 +08:00
chichuan 2a42e282c7 fix: align typo guidance with command framework 2026-08-25 00:50:03 +08:00
chichuan f5378d2f28 test: cover typo guidance CI edges 2026-08-25 00:50:01 +08:00
chichuan ea4a463956 fix: add bounded command typo guidance 2026-08-25 00:49:59 +08:00
克谨 a4813f78bc fix(todo): preserve priority schema compatibility 2026-08-24 23:33:43 +08:00
克谨 46fdaed90b Merge remote-tracking branch 'origin/main' into codex/fix-todo-upstream-internal-error 2026-08-24 23:10:17 +08:00
克谨 9ea19315e9 fix(todo): classify upstream failures and validate inputs 2026-08-24 23:04:45 +08:00
克谨 a5dbd2e049 Merge remote-tracking branch 'origin/main' into codex/param-hallucination-6-products 2026-08-24 22:33:48 +08:00
xiatian 29a0dde9d4 Merge remote-tracking branch 'upstream/main' into codex/sheet-float-image-local-file 2026-08-24 22:02:38 +08:00
克谨 0fae9dd8b3 feat(cli): govern six product parameter aliases 2026-08-24 22:01:10 +08:00
赤川 1c90623e31 Merge branch 'main' into refresh_legacy_slot_fix 2026-08-24 21:38:34 +08:00
liyuan ab883f11f0 fix(report): require --to-user-ids on entry submit
Reject report submissions without visible recipients at the CLI layer
(Cobra required flag + fail-closed on blank values) while keeping the
openAPI create_report parameter optional (bug 85724185).
2026-08-24 21:14:40 +08:00
liyuan 4381a54efa test: adapt mock_mcp download e2e and coverage to proxy-free secure client 2026-08-24 21:00:00 +08:00
xiatian 1b6a592387 Merge remote-tracking branch 'upstream/main' into codex/sheet-float-image-local-file 2026-08-24 20:59:28 +08:00
赤川 e58f255476 Merge branch 'main' into refresh_legacy_slot_fix 2026-08-24 20:28:19 +08:00
赤川 79f4f66d34 Merge branch 'main' into feat/migrate-edu-contact 2026-08-24 20:25:16 +08:00
听荷 66061bb0b0 fix(college-contact): 移除可复制破坏性示例中的确认绕过参数并补齐契约示例必填参数
CR P1-1:15 个 user_required 叶子的 Cobra Example 携带 -y/--yes,
Agent 或用户直接复制即绕过本 PR 实现的用户确认门。改为只保留
--dry-run 预览示例(含 -f json 变体),确认参数由调用方在取得
用户明确确认后自行追加。

CR P1-2:create-group-rule 的 Contract.Selection.Examples 缺少必填
--dept-type,示例实际执行会在参数校验阶段失败。同类缺陷在本文件另有
6 处(dept create / employee add / alumni list / alumni add-alumnus /
alumni update-alumnus / graduate batch-update-pending),一并对齐到
各自 Cobra Example;另修正 dept update、dept batch-update-type 契约
示例中 dept-type 取值与 Cobra 示例不一致的问题(standard -> college)。

验证:5 个产品共 153 条 Contract.Selection.Examples 全部 --dry-run
可执行(153/153 ok);changed code coverage 100.0000%。
2026-08-24 20:23:21 +08:00
muling.cs cbbc9a9f90 refresh token legacy_recovery 2026-08-24 20:14:36 +08:00
半圭 12d60d264d fix(drive): address review feedback on permission get-setting
- drop shareScope.required=["linkShare"] from the result schema: the
  production response omits linkShare unless link sharing is configured;
  document the conditional presence in the schema description, tests,
  and both skill references
- spell out policy value tiers in skill docs (READER_AND_ABOVE /
  DOWNLOADER_AND_ABOVE / EDITOR_AND_ABOVE / MANAGER_AND_ABOVE) so the
  shorthand no longer diverges from the schema enums
2026-08-24 19:46:13 +08:00
半圭 7bb2019dfe feat(drive): expose disabledValues with per-value reasons in get-setting schema 2026-08-24 19:46:13 +08:00
半圭 9e692ce0bf docs(drive): align get-setting semantics with final GUI wording
Sync the get-setting schema descriptions and skill references with the
server-side finalized policy texts: policy code semantics now quote the
product permission-settings page labels (e.g. external_share=add
external collaborators, watermark=show watermark, node_spread_scope=
download and distribution scope), the node_spread_scope binary values
read ALL_NODES=all documents and PREVIEWABLE_ONLY=previewable documents
only (online documents, images, videos, etc.), and the contract test
value-semantic fragments follow the same wording. Both mono and multi
drive references also list per-policy name/description examples
(external_share, node_spread with NOBODY, node_move_forbidden) quoted
verbatim from the server i18n single source.
2026-08-24 19:46:13 +08:00
半圭 e2b390217a feat(drive): align get-setting schema with self-explaining policy values
Sync the get_permission_setting result contract with the finalized
server-side enums: switch values ON/OFF become ENABLED/DISABLED and the
node_spread_scope binary ALL_CONTENT becomes ALL_NODES (restriction
applies to all nodes vs previewable-only nodes), while policy codes,
threshold domains, permissionMode and shareScope stay unchanged.
Policies now carry per-entry name and description fields (Chinese label
and value semantics from the server i18n single source) as deterministic
required members, mirrored in the contract test assertions and both mono
and multi drive skill quick references.
2026-08-24 19:46:13 +08:00
半圭 09ecaaa7a1 feat(drive): document get-setting response schema and field semantics
Declare the drive.permission get_setting ResultSpec data schema from the
server-side output metadata so the field-level contract (permissionMode,
shareScope, policy codes and their typed value domains, inherited /
allowedValues semantics) is reviewed code guarded by contract tests, and
add field-quick-reference rows for the get-setting section in both mono
and multi drive skill references.
2026-08-24 19:46:13 +08:00
半圭 95ecc99c41 fix: route drive permission get-setting to drive MCP server 2026-08-24 19:46:13 +08:00
半圭 227861a71d feat(drive): add permission get-setting command 2026-08-24 19:46:13 +08:00
Dennis4477andDennis 20a01aaeff policy: support compatibility-visible availability migrations (#1123)
Co-authored-by: Dennis <xinyang.dxy@alibaba-inc.com>
2026-08-24 19:37:21 +08:00
赤川 4fb3349dcd Merge branch 'main' into fix/remove-download-domain-allowlist 2026-08-24 19:11:03 +08:00
赤川 7844b59a8c Merge branch 'main' into refresh_legacy_slot_fix 2026-08-24 19:08:53 +08:00