This repository has no description
0

Configure Feed

Select the types of activity you want to include in your feed.

core / knot2 / example.toml
22 kB 623 lines
1[server] 2# Can also be specified via environment variable `KNOT_HOSTNAME`. 3# Required! This value must be specified. 4#hostname = 5 6# Can also be specified via environment variable `KNOT_ADMINS`. 7# Required! This value must be specified. 8#admins = 9 10# Can also be specified via environment variable `KNOT_LISTEN_ADDR`. 11# Default value: "[::]:5555" 12#listen_addr = "[::]:5555" 13 14# Can also be specified via environment variable `KNOT_LISTEN_HEADER_TIMEOUT_MS`. 15# Default value: 10000 16#listen_header_timeout_ms = 10000 17 18# Can also be specified via environment variable `KNOT_LISTEN_IDLE_TIMEOUT_MS`. 19# Default value: 60000 20#listen_idle_timeout_ms = 60000 21 22# Can also be specified via environment variable `KNOT_LISTEN_MAX_CONNECTIONS`. 23# Default value: 1024 24#listen_max_connections = 1024 25 26# Can also be specified via environment variable `KNOT_LISTEN_RATE_LIMIT_PER_SECOND`. 27# Default value: 50 28#listen_rate_limit_per_second = 50 29 30# Can also be specified via environment variable `KNOT_LISTEN_RATE_LIMIT_BURST`. 31# Default value: 200 32#listen_rate_limit_burst = 200 33 34# Can also be specified via environment variable `KNOT_LISTEN_MAX_INFLIGHT_REQUESTS`. 35# Default value: 1024 36#listen_max_inflight_requests = 1024 37 38# Can also be specified via environment variable `KNOT_LISTEN_REQUEST_TIMEOUT_MS`. 39# Default value: 60000 40#listen_request_timeout_ms = 60000 41 42# Can also be specified via environment variable `KNOT_LISTEN_BODY_TIMEOUT_MS`. 43# Default value: 30000 44#listen_body_timeout_ms = 30000 45 46# Can also be specified via environment variable `KNOT_LISTEN_WRITE_REQUEST_TIMEOUT_MS`. 47# Default value: 1800000 48#listen_write_request_timeout_ms = 1800000 49 50# Can also be specified via environment variable `KNOT_INTERNAL_LISTEN_ADDR`. 51# Default value: "[::1]:5444" 52#internal_listen_addr = "[::1]:5444" 53 54# Can also be specified via environment variable `KNOT_SSH_LISTEN_ADDR`. 55# Default value: "[::]:2222" 56#ssh_listen_addr = "[::]:2222" 57 58# Can also be specified via environment variable `KNOT_SSH_HOST_KEY_FILE`. 59# Required! This value must be specified. 60#ssh_host_key_file = 61 62# Can also be specified via environment variable `KNOT_SSH_MAX_PACK_BYTES`. 63# Default value: 8589934592 64#ssh_max_pack_bytes = 8589934592 65 66# Can also be specified via environment variable `KNOT_APPVIEW_ENDPOINT`. 67# Default value: "https://tangled.org" 68#appview_endpoint = "https://tangled.org" 69 70[tls] 71# Can also be specified via environment variable `KNOT_TLS_CERT_PATH`. 72#cert_path = 73 74# Can also be specified via environment variable `KNOT_TLS_KEY_PATH`. 75#key_path = 76 77# Can also be specified via environment variable `KNOT_TLS_HTTP3`. 78# Default value: true 79#http3 = true 80 81# Can also be specified via environment variable `KNOT_TLS_ACME_ENABLED`. 82# Default value: false 83#acme_enabled = false 84 85# Can also be specified via environment variable `KNOT_TLS_ACME_CACHE_DIR`. 86#acme_cache_dir = 87 88# Can also be specified via environment variable `KNOT_TLS_ACME_CONTACT`. 89#acme_contact = 90 91# Can also be specified via environment variable `KNOT_TLS_ACME_STAGING`. 92# Default value: false 93#acme_staging = false 94 95# Can also be specified via environment variable `KNOT_TLS_MTLS_ENABLED`. 96# Default value: false 97#mtls_enabled = false 98 99# Can also be specified via environment variable `KNOT_TLS_MTLS_CLIENT_CA_PATH`. 100#mtls_client_ca_path = 101 102# Can also be specified via environment variable `KNOT_TLS_MTLS_ADMIN_SPKI_PIN`. 103#mtls_admin_spki_pin = 104 105[acl] 106# Can also be specified via environment variable `KNOT_ADMISSION`. 107# Default value: "closed" 108#admission = "closed" 109 110# Can also be specified via environment variable `KNOT_LEGACY_ADMIN_SECRET_ENV`. 111#legacy_admin_secret_env = 112 113[repo] 114# Can also be specified via environment variable `KNOT_SCAN_PATH`. 115# Required! This value must be specified. 116#scan_path = 117 118# Can also be specified via environment variable `KNOT_DEFAULT_BRANCH`. 119# Default value: "main" 120#default_branch = "main" 121 122[git] 123# Committer identity stamped on merge commits the knot creates. 124# 125# Can also be specified via environment variable `KNOT_GIT_USER_NAME`. 126# 127# Default value: "Tangled" 128#user_name = "Tangled" 129 130# Can also be specified via environment variable `KNOT_GIT_USER_EMAIL`. 131# Default value: "noreply@tangled.sh" 132#user_email = "noreply@tangled.sh" 133 134# Can also be specified via environment variable `KNOT_GIT_OBJECT_FORMAT`. 135# Default value: "sha256" 136#object_format = "sha256" 137 138[secrets] 139# Can also be specified via environment variable `KNOT_SEALED_KEY_FILE`. 140# Required! This value must be specified. 141#sealed_key_file = 142 143# Can also be specified via environment variable `KNOT_MASTER_KEY_ENV`. 144# Required! This value must be specified. 145#master_key_env = 146 147[http] 148# Can also be specified via environment variable `KNOT_HTTP_CONNECT_TIMEOUT_MS`. 149# Default value: 5000 150#connect_timeout_ms = 5000 151 152# Can also be specified via environment variable `KNOT_HTTP_READ_TIMEOUT_MS`. 153# Default value: 30000 154#read_timeout_ms = 30000 155 156# Can also be specified via environment variable `KNOT_HTTP_REQUEST_TIMEOUT_MS`. 157# Default value: 60000 158#request_timeout_ms = 60000 159 160# Can also be specified via environment variable `KNOT_HTTP_MAX_RESPONSE_BYTES`. 161# Default value: 16777216 162#max_response_bytes = 16777216 163 164[atproto] 165# Can also be specified via environment variable `KNOT_PLC_DIRECTORY`. 166# Required! This value must be specified. 167#plc_directory = 168 169[xrpc] 170# Can also be specified via environment variable `KNOT_XRPC_MAX_BODY_BYTES`. 171# Default value: 65536 172#max_body_bytes = 65536 173 174# Can also be specified via environment variable `KNOT_XRPC_MAX_RESPONSE_BYTES`. 175# Default value: 5242880 176#max_response_bytes = 5242880 177 178# Upper bound on bytes that a single archive spools, 179# across all our surfaces: the sh.tangled.repo.archive query, 180# `git archive --remote` over SSH, 181# and the smart HTTP archive route. 182# The knot will refuse writing smth that would blast an archive past this bound. 183# 184# Can also be specified via environment variable `KNOT_XRPC_MAX_ARCHIVE_BYTES`. 185# 186# Default value: 1073741824 187#max_archive_bytes = 1073741824 188 189# Can also be specified via environment variable `KNOT_XRPC_TREE_LAST_COMMIT_BUDGET_MS`. 190# Default value: 300 191#tree_last_commit_budget_ms = 300 192 193# Can also be specified via environment variable `KNOT_XRPC_BLOB_LAST_COMMIT_BUDGET_MS`. 194# Default value: 2000 195#blob_last_commit_budget_ms = 2000 196 197# Can also be specified via environment variable `KNOT_XRPC_LANGUAGES_BUDGET_MS`. 198# Default value: 1000 199#languages_budget_ms = 1000 200 201# Can also be specified via environment variable `KNOT_XRPC_LANGUAGES_PUSH_BUDGET_MS`. 202# Default value: 2000 203#languages_push_budget_ms = 2000 204 205# Body limit for the merge and mergeCheck procedures, whose patch payloads 206# routinely exceed the general XRPC body limit. 207# 208# Can also be specified via environment variable `KNOT_XRPC_MAX_PATCH_BYTES`. 209# 210# Default value: 16777216 211#max_patch_bytes = 16777216 212 213# Limit on the total decompressed size of a patch the merge procedures parse, 214# bounding binary-delta inflation and hunk expansion apart from the 215# compressed body limit above. 216# 217# Can also be specified via environment variable `KNOT_XRPC_MAX_PATCH_DECOMPRESSED_BYTES`. 218# 219# Default value: 134217728 220#max_patch_decompressed_bytes = 134217728 221 222# Can also be specified via environment variable `KNOT_XRPC_PREAUTH_BURST`. 223# Default value: 20 224#preauth_burst = 20 225 226# Can also be specified via environment variable `KNOT_XRPC_PREAUTH_REFILL_MS`. 227# Default value: 100 228#preauth_refill_ms = 100 229 230# Can also be specified via environment variable `KNOT_XRPC_PER_PEER_INFLIGHT`. 231# Default value: 8 232#per_peer_inflight = 8 233 234# Can also be specified via environment variable `KNOT_XRPC_GLOBAL_INFLIGHT`. 235# Default value: 64 236#global_inflight = 64 237 238# Can also be specified via environment variable `KNOT_XRPC_MAX_PENDING_RESERVATIONS`. 239# Default value: 256 240#max_pending_reservations = 256 241 242# Per-account limit on reserved repository keys awaiting creation, so one 243# account cannot consume the whole pending-reservation budget. 244# 245# Can also be specified via environment variable `KNOT_XRPC_PER_ACTOR_RESERVATIONS`. 246# 247# Default value: 32 248#per_actor_reservations = 32 249 250# How long a reserved repository key is held before it lapses and its 251# sealed key is reclaimed, in seconds. 252# 253# Can also be specified via environment variable `KNOT_XRPC_RESERVATION_TTL_SECS`. 254# 255# Default value: 3600 256#reservation_ttl_secs = 3600 257 258# Can also be specified via environment variable `KNOT_XRPC_FORK_MAX_PACK_BYTES`. 259# Default value: 1073741824 260#fork_max_pack_bytes = 1073741824 261 262# Can also be specified via environment variable `KNOT_XRPC_FORK_FETCH_TIMEOUT_MS`. 263# Default value: 600000 264#fork_fetch_timeout_ms = 600000 265 266# When the knot runs behind a trusted reverse proxy that terminates TLS, 267# set this to the header the proxy appends the client address to, for 268# example x-forwarded-for. The rightmost entry is used. Leave unset when 269# the knot is directly exposed so the socket peer address is used. Only set 270# this when a trusted proxy overwrites or appends the header, since a client 271# can forge it otherwise. 272# 273# Can also be specified via environment variable `KNOT_XRPC_TRUSTED_PROXY_HEADER`. 274#trusted_proxy_header = 275 276# IP addresses whose `trusted_proxy_header` the knot honors, 277# without a port, 278# for ex the loopback address of a reverse proxy on the same host. 279# The knot rate-limits a request from any other address 280# by its own socket address and ignores the header. 281# Leave empty to honor the header from every peer, 282# which is safe *only* if nothing but the proxy can reach this knot. 283# 284# Can also be specified via environment variable `KNOT_XRPC_TRUSTED_PROXIES`. 285# 286# Default value: [] 287#trusted_proxies = [] 288 289# Can also be specified via environment variable `KNOT_XRPC_EVENTS_REPLAY_BUFFER`. 290# Default value: 4096 291#events_replay_buffer = 4096 292 293# Can also be specified via environment variable `KNOT_XRPC_EVENTS_REPLAY_BYTES`. 294# Default value: 67108864 295#events_replay_bytes = 67108864 296 297# Can also be specified via environment variable `KNOT_XRPC_EVENTS_MAX_SUBSCRIBERS`. 298# Default value: 256 299#events_max_subscribers = 256 300 301# Can also be specified via environment variable `KNOT_XRPC_EVENTS_MAX_PER_PEER`. 302# Default value: 8 303#events_max_per_peer = 8 304 305[maintenance] 306# Can also be specified via environment variable `KNOT_MAINTENANCE_ENABLED`. 307# Default value: true 308#enabled = true 309 310# Can also be specified via environment variable `KNOT_MAINTENANCE_COMMIT_GRAPH`. 311# Default value: true 312#commit_graph = true 313 314# Can also be specified via environment variable `KNOT_MAINTENANCE_MULTI_PACK_INDEX`. 315# Default value: true 316#multi_pack_index = true 317 318# Can also be specified via environment variable `KNOT_MAINTENANCE_BITMAP`. 319# Default value: true 320#bitmap = true 321 322# Can also be specified via environment variable `KNOT_MAINTENANCE_INTERVAL_SECS`. 323# Default value: 21600 324#interval_secs = 21600 325 326# Can also be specified via environment variable `KNOT_MAINTENANCE_REPACK_MAX_OBJECTS`. 327# Default value: 16000000 328#repack_max_objects = 16000000 329 330# Can also be specified via environment variable `KNOT_MAINTENANCE_REPACK_GEOMETRIC_FACTOR`. 331# Default value: 2 332#repack_geometric_factor = 2 333 334# Can also be specified via environment variable `KNOT_MAINTENANCE_PRUNE_GRACE_SECS`. 335# Default value: 1209600 336#prune_grace_secs = 1209600 337 338# Can also be specified via environment variable `KNOT_MAINTENANCE_REFLOG_EXPIRE_SECS`. 339# Default value: 7776000 340#reflog_expire_secs = 7776000 341 342# Can also be specified via environment variable `KNOT_MAINTENANCE_LARGE_PUSH_BYTES`. 343# Default value: 52428800 344#large_push_bytes = 52428800 345 346[pack_cache] 347# Can also be specified via environment variable `KNOT_PACK_CACHE_ENABLED`. 348# Default value: true 349#enabled = true 350 351# Can also be specified via environment variable `KNOT_PACK_CACHE_TTL_SECS`. 352# Default value: 60 353#ttl_secs = 60 354 355# Can also be specified via environment variable `KNOT_PACK_CACHE_MAX_ENTRY_BYTES`. 356# Default value: 67108864 357#max_entry_bytes = 67108864 358 359# Can also be specified via environment variable `KNOT_PACK_CACHE_MAX_TOTAL_BYTES`. 360# Default value: 2147483648 361#max_total_bytes = 2147483648 362 363[pack] 364# Can also be specified via environment variable `KNOT_PACK_MAX_OBJECTS`. 365# Default value: 16000000 366#max_objects = 16000000 367 368# Can also be specified via environment variable `KNOT_PACK_MAX_TOTAL_BYTES`. 369# Default value: 68719476736 370#max_total_bytes = 68719476736 371 372# Can also be specified via environment variable `KNOT_PACK_SELECTION_MAX_OBJECTS`. 373# Default value: 16000000 374#selection_max_objects = 16000000 375 376# Can also be specified via environment variable `KNOT_PACK_SELECTION_TIME_BUDGET_SECS`. 377# Default value: 600 378#selection_time_budget_secs = 600 379 380[lfs] 381# Can also be specified via environment variable `KNOT_LFS_STORE_PATH`. 382#store_path = 383 384# Can also be specified via environment variable `KNOT_LFS_MAX_OBJECT_BYTES`. 385# Default value: 5368709120 386#max_object_bytes = 5368709120 387 388# Can also be specified via environment variable `KNOT_LFS_FREE_SPACE_FLOOR_BYTES`. 389# Default value: 1073741824 390#free_space_floor_bytes = 1073741824 391 392# Can also be specified via environment variable `KNOT_LFS_GC_GRACE_SECS`. 393# Default value: 1209600 394#gc_grace_secs = 1209600 395 396# Can also be specified via environment variable `KNOT_LFS_GC_INTERVAL_SECS`. 397# Default value: 21600 398#gc_interval_secs = 21600 399 400# Can also be specified via environment variable `KNOT_LFS_MAX_SSH_TRANSFERS`. 401# Default value: 16 402#max_ssh_transfers = 16 403 404# Can also be specified via environment variable `KNOT_LFS_MAX_HTTP_DOWNLOADS`. 405# Default value: 64 406#max_http_downloads = 64 407 408[resources] 409# Can also be specified via environment variable `KNOT_MAX_THREADS`. 410# Default value: 0 411#max_threads = 0 412 413# Can also be specified via environment variable `KNOT_MAX_MEMORY_BYTES`. 414# Default value: 0 415#max_memory_bytes = 0 416 417[homepage] 418# Can also be specified via environment variable `KNOT_HOMEPAGE_ENABLED`. 419# Default value: true 420#enabled = true 421 422# Can also be specified via environment variable `KNOT_HOMEPAGE_PATH`. 423#path = 424 425[ci] 426# Can also be specified via environment variable `KNOT_CI_LOGS_ADDR`. 427#logs_addr = 428 429[messages] 430[messages.push] 431# Default value: ["{knot} received {refs}."] 432#ack = ["{knot} received {refs}."] 433 434# Default value: ["", "-> Open stinky pull request for this branch:", " {url}", ""] 435#pull_request = ["", "-> Open stinky pull request for this branch:", " {url}", ""] 436 437# Default value: ["pipeline compiled with no diagnostics"] 438#pipeline_clean = ["pipeline compiled with no diagnostics"] 439 440# Default value: ["no pipelines to compile"] 441#pipeline_none = ["no pipelines to compile"] 442 443# Default value: ["-> Browse CI logs in your terminal:", " ssh -t -p {port} {host} {repo} {sha}"] 444#ci_logs = ["-> Browse CI logs in your terminal:", " ssh -t -p {port} {host} {repo} {sha}"] 445 446[messages.fetch] 447# Default value: ["Thanks for using {knot}!"] 448#motd = ["Thanks for using {knot}!"] 449 450# Default value: ["Enumerating objects: {count}, done."] 451#enumerating = ["Enumerating objects: {count}, done."] 452 453# Default value: ["Total {count}, done."] 454#total = ["Total {count}, done."] 455 456# Default value: "knot: {error}" 457#fatal = "knot: {error}" 458 459[messages.reject] 460# Default value: "refs/cobs/* and refs/hidden/* are reserved and cannot be pushed" 461#reserved_refs = "refs/cobs/* and refs/hidden/* are reserved and cannot be pushed" 462 463# Default value: "existing refs/cobs/* object cannot be modified or deleted over the wire" 464#cob_create_only = "existing refs/cobs/* object cannot be modified or deleted over the wire" 465 466# Default value: "refs/cobs/* stores append-only collaborative objects and cannot be deleted" 467#cob_delete = "refs/cobs/* stores append-only collaborative objects and cannot be deleted" 468 469# Default value: "refs/hidden/* is reserved for server-side fork staging and cannot be pushed" 470#hidden_reserved = "refs/hidden/* is reserved for server-side fork staging and cannot be pushed" 471 472# Default value: "collaborative-object verification failed: {error}" 473#cob_verification = "collaborative-object verification failed: {error}" 474 475# Default value: "reference already exists" 476#ref_exists = "reference already exists" 477 478# Default value: "stale info: old value doesn't match" 479#stale_old_value = "stale info: old value doesn't match" 480 481# Default value: "missing necessary objects" 482#missing_objects = "missing necessary objects" 483 484# Default value: "missing necessary objects for {ref}" 485#missing_objects_for = "missing necessary objects for {ref}" 486 487# Default value: "atomic transaction failed" 488#atomic_failed = "atomic transaction failed" 489 490# Default value: "atomic push aborted" 491#atomic_aborted = "atomic push aborted" 492 493# Default value: "authorization unavailable" 494#authorization_unavailable = "authorization unavailable" 495 496# Default value: "unpacker error" 497#unpacker_error = "unpacker error" 498 499# Default value: "ref snapshot unavailable" 500#ref_snapshot_unavailable = "ref snapshot unavailable" 501 502# Default value: "object migration failed" 503#object_migration_failed = "object migration failed" 504 505[messages.ssh] 506# Default value: ["Hi {user}! You're authenticated to {knot} knot.", "This knot serves git over ssh, so there's no shell here. :P", "Clone repo with: git clone {knot}:<repoDID>"] 507#greeting = ["Hi {user}! You're authenticated to {knot} knot.", "This knot serves git over ssh, so there's no shell here. :P", "Clone repo with: git clone {knot}:<repoDID>"] 508 509# Default value: "knot: unsupported command" 510#unsupported_command = "knot: unsupported command" 511 512# Default value: "knot: too many concurrent operations from your address, try again shortly" 513#too_many_operations = "knot: too many concurrent operations from your address, try again shortly" 514 515# Default value: "knot: repository not found" 516#repo_not_found = "knot: repository not found" 517 518# Default value: "knot: repository index is warming, retry shortly" 519#index_warming = "knot: repository index is warming, retry shortly" 520 521# Default value: "knot: LFS isn't enabled on this knot" 522#lfs_disabled = "knot: LFS isn't enabled on this knot" 523 524# Default value: "knot: your ssh key isn't registered to a user authorized to push here. If you offer several keys, make sure the registered one is offered first." 525#key_not_registered = "knot: your ssh key isn't registered to a user authorized to push here. If you offer several keys, make sure the registered one is offered first." 526 527# Default value: "knot: you aren't authorized to push to this repository." 528#push_denied = "knot: you aren't authorized to push to this repository." 529 530# Default value: "knot: server is shutting down" 531#shutting_down = "knot: server is shutting down" 532 533# Default value: "knot: malformed upload-archive request" 534#archive_malformed = "knot: malformed upload-archive request" 535 536# Default value: "knot: upload-archive request timed out" 537#archive_timeout = "knot: upload-archive request timed out" 538 539# Default value: "knot: upload-archive failed" 540#archive_failed = "knot: upload-archive failed" 541 542# Default value: "knot: cannot advertise refs" 543#advertise_failed = "knot: cannot advertise refs" 544 545# Default value: "knot: push exceeds configured size limit" 546#push_too_large = "knot: push exceeds configured size limit" 547 548# Default value: "knot: receive exceeded its time budget" 549#receive_deadline = "knot: receive exceeded its time budget" 550 551# Default value: "knot: malformed pack stream" 552#malformed_pack = "knot: malformed pack stream" 553 554# Default value: "knot: receive read error" 555#receive_read_error = "knot: receive read error" 556 557# Default value: "knot: receive stream ended early" 558#receive_ended_early = "knot: receive stream ended early" 559 560# Default value: "knot: receive-pack failed" 561#receive_failed = "knot: receive-pack failed" 562 563[messages.http] 564# Default value: "you aren't authorized to push to this repository" 565#push_denied = "you aren't authorized to push to this repository" 566 567# Default value: "repository not found" 568#repo_not_found = "repository not found" 569 570# Default value: "push exceeds the configured size limit" 571#push_too_large = "push exceeds the configured size limit" 572 573# Default value: "malformed pack stream: {error}" 574#malformed_pack = "malformed pack stream: {error}" 575 576# Default value: "receive stream ended early" 577#receive_ended_early = "receive stream ended early" 578 579[messages.lfs] 580# Default value: "invalid LFS oid {value}" 581#invalid_oid = "invalid LFS oid {value}" 582 583# Default value: "oid mismatch, declared {declared}, computed {computed}" 584#hash_mismatch = "oid mismatch, declared {declared}, computed {computed}" 585 586# Default value: "size mismatch, declared {declared}, received {received}" 587#size_mismatch = "size mismatch, declared {declared}, received {received}" 588 589# Default value: "object size {declared} exceeds limit {limit}" 590#size_limit_exceeded = "object size {declared} exceeds limit {limit}" 591 592# Default value: "free space {free} below floor {floor}" 593#free_space_denied = "free space {free} below floor {floor}" 594 595# Default value: "object {oid} not found" 596#not_found = "object {oid} not found" 597 598# Default value: "protocol framing fault: {detail}" 599#framing = "protocol framing fault: {detail}" 600 601# Default value: "too many {what} in one message, limit {limit}" 602#too_many = "too many {what} in one message, limit {limit}" 603 604# Default value: "unknown command {command}" 605#unknown_command = "unknown command {command}" 606 607# Default value: "unsupported version {version}" 608#unsupported_version = "unsupported version {version}" 609 610# Default value: "unsupported hash algorithm {algorithm}" 611#unsupported_hash = "unsupported hash algorithm {algorithm}" 612 613# Default value: "put-object isn't allowed on a download channel" 614#put_on_download = "put-object isn't allowed on a download channel" 615 616# Default value: "verify-object isn't allowed on a download channel" 617#verify_on_download = "verify-object isn't allowed on a download channel" 618 619# Default value: "get-object isn't allowed on an upload channel" 620#get_on_upload = "get-object isn't allowed on an upload channel" 621 622# Default value: "put-object is missing its object body" 623#put_no_body = "put-object is missing its object body"