{"id":3457,"date":"2026-08-21T08:33:36","date_gmt":"2026-08-21T08:33:36","guid":{"rendered":"https:\/\/remote-support.space\/wordpress\/?p=3457"},"modified":"2026-08-21T08:35:52","modified_gmt":"2026-08-21T08:35:52","slug":"the-vibe-coding-trap-why-ai-hype-is-leading-developers-over-a-cliff","status":"publish","type":"post","link":"http:\/\/remote-support.space\/wordpress\/2026\/08\/21\/the-vibe-coding-trap-why-ai-hype-is-leading-developers-over-a-cliff\/","title":{"rendered":"The Vibe Coding Trap: Why AI Hype Is Leading Developers Over a Cliff"},"content":{"rendered":"<h1 class=\"western\">The Vibe Coding Trap: Why AI Hype Is Leading Developers Over a Cliff<\/h1>\n<p>In the past year, the term <i>vibe coding<\/i> has gained cult status. It promises a utopia where anyone can describe an app in plain English and have AI generate flawless code. The reality, however, is far darker. The seduction of instant gratification is luring inexperienced developers\u2014and even some seasoned ones\u2014into a quagmire of overcommitment, security holes, and maintenance nightmares. The recent debugging of a small backup tool serves as a chilling case study of why AI, without the guiding hand of an expert, is a recipe for disaster.<\/p>\n<p>&nbsp;<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-3458 size-full\" src=\"http:\/\/remote-support.space\/wordpress\/wp-content\/uploads\/2026\/08\/vibe-coding.jpeg\" alt=\"\" width=\"600\" height=\"400\" srcset=\"http:\/\/remote-support.space\/wordpress\/wp-content\/uploads\/2026\/08\/vibe-coding.jpeg 600w, http:\/\/remote-support.space\/wordpress\/wp-content\/uploads\/2026\/08\/vibe-coding-300x200.jpeg 300w\" sizes=\"auto, (max-width: 600px) 100vw, 600px\" \/><\/p>\n<h2 class=\"western\">The Case of the Disappearing Config File<\/h2>\n<p>A developer was running a Rust\u2011based backup utility that read configuration from <span style=\"font-family: Liberation Mono, monospace;\">\/etc\/atrc\/atrc_backup_mariadb_and_mysql_databases_on_server.config<\/span>. Each time the program ran, the config file would be created, read, and then inexplicably vanish before the backup could finish. The developer, using an AI\u2011powered coding assistant, asked for help.<\/p>\n<p>The AI\u2019s first response? <b>\u201cThe config file is being deleted by an external process\u2014maybe a cron job, logrotate, or systemd-tmpfiles.\u201d<\/b> It suggested using <span style=\"font-family: Liberation Mono, monospace;\">inotifywait<\/span> to catch the culprit, running system audits, and even checking for malicious scripts. This is classic AI hallucination: it invents plausible but wrong explanations because it lacks the ability to <i>inspect<\/i> the code it originally generated.<\/p>\n<p>The developer, however, had over three decades of systems and software engineering experience. He didn\u2019t chase ghosts. Instead, he asked a simple, direct question: <b>\u201cAnalyze the code for the delete method, dude.\u201d<\/b> Within seconds of reading the code, he spotted the real culprit: a permission\u2011testing function that created a temporary file using the <i>same path<\/i> as the config file, wrote to it, and then deleted it\u2014effectively wiping the config file on every run.<\/p>\n<pre>let test_path = if path.is_dir() {\r\n    path.join(\".atrc_write_test\")\r\n} else {\r\n    path.to_path_buf()   \/\/ &lt;-- uses the original file path!\r\n};\r\n\/\/ File::create(&amp;test_path) truncates the actual config file\r\n\/\/ later, fs::remove_file(&amp;test_path) deletes it.<\/pre>\n<p>The AI had written that function. The AI had hallucinated an external threat. The AI was confidently wrong. Only a human with deep understanding of filesystem semantics, memory management, and the project\u2019s architecture could pinpoint that the bug was <b>in the AI\u2019s own code<\/b>.<\/p>\n<h2 class=\"western\">The Hallucination Epidemic<\/h2>\n<p>This is not an isolated incident. Large Language Models are statistical parrots. They excel at pattern matching and generating plausible text, but they have zero comprehension of causality, side\u2011effects, or the real\u2011world implications of their suggestions. When confronted with an anomaly, they will invent a narrative that fits their training data\u2014often blaming network issues, user error, or external dependencies\u2014rather than acknowledging their own flaws.<\/p>\n<p>Vibe coding encourages developers to accept these hallucinations without question. The result? Projects built on a foundation of subtle bugs, security vulnerabilities (like the one that deleted config files), and architectural decisions that defy logic. Over time, these systems become unmaintainable, forcing teams to overcommit resources to patch the leaks.<\/p>\n<h2 class=\"western\">The Myth of the \u201cAI Junior Developer\u201d<\/h2>\n<p>Some advocates frame AI as a \u201cjunior developer\u201d that needs supervision. But a junior developer, however inexperienced, can learn from mistakes, ask clarifying questions, and apply common sense. An AI has none of that. It does not understand the problem domain; it only predicts the next token. Treating it as a junior is dangerous because it lacks the fundamental capacity for reasoning. The only effective supervision is that of a senior engineer who treats every AI suggestion with skepticism, who can read the generated code critically, and who knows how to trace the logic back to its source\u2014even if that source is the AI itself.<\/p>\n<p>In our example, the experienced developer didn\u2019t waste time setting up <span style=\"font-family: Liberation Mono, monospace;\">inotify<\/span> or auditing system logs. He knew that the program\u2019s behavior was deterministic; if the file disappeared during execution, the program must be doing it. That insight, born from decades of debugging, is the difference between a quick fix and a weeks\u2011long wild\u2011goose chase.<\/p>\n<h2 class=\"western\">The Overcommitment Trap<\/h2>\n<p>When teams embrace vibe coding, they often overcommit to delivery timelines based on AI\u2011generated estimates that are wildly optimistic. They assume that the AI\u2019s code is correct, bypassing proper testing and code reviews. When the inevitable bugs surface, the team scrambles to patch them, accruing technical debt at an alarming rate. The overcommitment becomes a self\u2011fulfilling prophecy: the project falls behind, quality plummets, and burnout spreads.<\/p>\n<p>The backup tool we examined is a perfect illustration. A novice developer might have accepted the AI\u2019s external\u2011deletion theory, spent days trying to secure the system, and eventually given up or hard\u2011coded the configuration\u2014only to break the program elsewhere. The experienced developer, on the other hand, spent a few minutes reading the code, fixed the function, and moved on. That efficiency is not a luxury; it is a necessity.<\/p>\n<h2 class=\"western\">How AI <i>Should<\/i> Be Used<\/h2>\n<p>AI is an incredible force\u2011multiplier for experienced developers. It can generate boilerplate, suggest alternative APIs, and even spot syntax errors. But it is not a replacement for critical thinking, domain knowledge, or system intuition. The proper workflow is:<\/p>\n<ol>\n<li><b>Specify<\/b> the requirement clearly.<\/li>\n<li><b>Generate<\/b> code with AI.<\/li>\n<li><b>Review<\/b> every line with a critical eye.<\/li>\n<li><b>Test<\/b> thoroughly, including edge cases.<\/li>\n<li><b>Audit<\/b> for security and correctness.<\/li>\n<li><b>Refactor<\/b> to align with project standards.<\/li>\n<\/ol>\n<p>In our case, the AI was useful for scaffolding the backup logic, but the final product required human intervention to correct a subtle bug that only an expert could identify. That is the symbiotic relationship that works\u2014not the blind faith of vibe coding.<\/p>\n<h2 class=\"western\">The Cliff Ahead<\/h2>\n<p>The AI industry is selling a dream that requires no skills, no effort, and no experience. That dream is a cliff. Falling for it means overcommitting to systems that will crumble under the weight of their own fragility. It means wasting time on false trails, shipping insecure code, and ultimately losing the trust of users and stakeholders.<\/p>\n<p>The antidote is not to abandon AI, but to embrace it with eyes wide open. Bring your 30 years of experience\u2014or hire someone who has it. Question every output. Run the code. Read the logs. And when the AI tells you that an external process deleted your file, remember: the real delete command might be hiding in the very function the AI wrote for you.<\/p>\n<p>The cliff is real. Only the experienced can navigate the edge.<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&#8212;<\/p>\n<h2 class=\"western\"><\/h2>\n<h2 class=\"western\">21 August 2026 real world chat that led me to write the article. We are used to AI fubarring its output.<\/h2>\n<p>analyze the code for the delete method dude<\/p>\n<p>&nbsp;<\/p>\n<p>We need to carefully analyze the code for any file deletion operations. The user insists that the code might have a deletion method. Let&#8217;s review the code thoroughly.<\/p>\n<p>We have the full Rust code. I&#8217;ll search for any occurrence of <code>remove<\/code>, <code>delete<\/code>, <code>unlink<\/code>, <code>fs::remove<\/code>, etc. Also look for <code>std::fs::remove_file<\/code>, <code>std::fs::remove_dir<\/code>, <code>File::delete<\/code>, etc. Also any use of external commands like <code>rm<\/code>.<\/p>\n<p>The code includes functions:<\/p>\n<ul>\n<li><code>test_write_permission<\/code>: creates a test file, then removes it with <code>fs::remove_file<\/code>. That&#8217;s normal for permission checks.<\/li>\n<li><code>ensure_config_file<\/code>: writes config file; does not delete.<\/li>\n<li><code>load_config<\/code>: reads file; does not delete.<\/li>\n<li><code>preflight_permission_checks<\/code>: calls <code>test_write_permission<\/code> on config path, which creates and deletes a test file (not the config itself). The test file is named <code>.atrc_write_test<\/code> inside the directory or a temp name. That doesn&#8217;t delete the config.<\/li>\n<li><code>setup_logging<\/code>: creates log file; no deletion.<\/li>\n<li><code>run_ssh_command<\/code>: runs <code>ssh<\/code> command, no deletion.<\/li>\n<li><code>download_file_scp<\/code>: runs <code>scp<\/code>, no deletion.<\/li>\n<li><code>cleanup_remote_file<\/code>: runs <code>ssh rm -f<\/code> on remote file.<\/li>\n<li><code>run_backup<\/code>: creates remote dump file, downloads, renames local, then cleans up remote file.<\/li>\n<li><code>main<\/code>: no deletion.<\/li>\n<\/ul>\n<p>No deletion of the local config file.<\/p>\n<p>Wait, we also have <code>print_directory_listing<\/code> \u2013 it runs <code>ls -la<\/code>; no deletion.<\/p>\n<p>So the code does not delete the config file. The test_write_permission creates a temporary file (like <code>.atrc_write_test<\/code> or just the path itself if it&#8217;s a file? Actually in test_write_permission: if path is a directory, it creates <code>.atrc_write_test<\/code> inside; if it&#8217;s a file, it creates the file itself (the path). But it creates it, writes, then removes it. That is a test file. For the config path, it&#8217;s a file, so test_write_permission on <code>\/etc\/atrc\/...config<\/code> will create that exact file, write &#8220;test&#8221;, then remove it. But that happens <em>before<\/em> the config file is created? Let&#8217;s see order:<\/p>\n<p>In <code>preflight_permission_checks<\/code>, first it calls <code>test_write_permission<\/code> on the config path. At that point, the config file may not exist yet (if it was missing). test_write_permission will try to create the file, write &#8220;test&#8221;, then remove it. So that will create a temporary file with the same name, then delete it. That could delete the config file if it already existed? Actually if the file exists, test_write_permission opens it for writing (not create) and writes &#8220;test&#8221;, then removes it. That would overwrite the config file? Wait:<\/p>\n<p>In test_write_permission for a file path (not directory):<\/p>\n<ul>\n<li>It creates a test path: <code>test_path = path.to_path_buf()<\/code> (same as the path)<\/li>\n<li>Then <code>File::create(&amp;test_path)<\/code> \u2013 this truncates the file if it exists, or creates it. Then it writes &#8220;test&#8221; and removes it. So it effectively deletes the original config file! That&#8217;s a bug.<\/li>\n<\/ul>\n<p>Let&#8217;s examine the code: In <code>test_write_permission<\/code>, for Unix:<\/p>\n<p>rust<\/p>\n<pre>let test_path = if path.is_dir() {\r\n    path.join(\".atrc_write_test\")\r\n} else {\r\n    path.to_path_buf()\r\n};<\/pre>\n<p>So if <code>path<\/code> is a file (like the config file), <code>test_path<\/code> is the same path. Then it does:<\/p>\n<p>rust<\/p>\n<pre>match File::create(&amp;test_path) { ... }<\/pre>\n<p>That will truncate (or create) the file, overwriting the original content with &#8220;test&#8221;. Then it removes it. So the config file is deleted.<\/p>\n<p>But when is <code>test_write_permission<\/code> called? In <code>preflight_permission_checks<\/code>, first it does:<\/p>\n<p>rust<\/p>\n<pre>let config_path = Path::new(CONFIG_PATH);\r\nif !config_path.exists() {\r\n    \/\/ if not exists, check if we can create it\r\n    if let Err(e) = test_write_permission(config_path) {\r\n        ...\r\n    }\r\n} else {\r\n    if let Err(e) = test_write_permission(config_path) {\r\n        ...\r\n    }\r\n}<\/pre>\n<p>In both cases, <code>test_write_permission<\/code> is called. So regardless of whether the config file exists, <code>test_write_permission<\/code> will be called. That means it will overwrite and delete the config file! That explains everything.<\/p>\n<p>We need to fix <code>test_write_permission<\/code> to not use the same path for a file; it should use a temporary file in the same directory, not the actual file. Or change the logic.<\/p>\n<p>Thus the config file is deleted because <code>test_write_permission<\/code> is called on the config path, and it truncates and deletes the file.<\/p>\n<p>To fix, we should modify <code>test_write_permission<\/code> to always use a temporary file name, not the original path.<\/p>\n<p>Let&#8217;s propose a fix: in the else branch, use a temp file like <code>.write_test<\/code> in the parent directory, or use the <code>.atrc_write_test<\/code> method even for files. The easiest is to always test in the parent directory with a unique name.<\/p>\n<p>So update <code>test_write_permission<\/code> to always create a temporary file in the same parent directory, regardless of whether the path is a file or directory. That way the original file is untouched.<\/p>\n<p>Now we have the root cause. The user will be happy to know it&#8217;s a bug in the code.<\/p>\n<p>We need to explain this clearly and provide the fix.<\/p>\n<p>Now we can respond with the analysis and corrected code for <code>test_write_permission<\/code>.<\/p>\n<p>&#8212;-<\/p>\n<p>You&#8217;re right \u2013 I missed it. The bug is in <span style=\"font-family: Liberation Mono, monospace;\">test_write_permission<\/span>: when called on a <b>file path<\/b> (like the config file), it creates a test file with <b>the same name<\/b>, overwrites it, and then deletes it. This wipes the actual config file.<\/p>\n<hr \/>\n<h2 class=\"western\">\ud83d\udc1e The exact culprit<\/h2>\n<pre>let test_path = if path.is_dir() {\r\n    path.join(\".atrc_write_test\")\r\n} else {\r\n    path.to_path_buf()   \/\/ &lt;-- uses the original file path\r\n};\r\n\/\/ then File::create(&amp;test_path) truncates it and later removes it<\/pre>\n<p>In <span style=\"font-family: Liberation Mono, monospace;\">preflight_permission_checks<\/span>, this function is called on <span style=\"font-family: Liberation Mono, monospace;\">CONFIG_PATH<\/span> (a file). So every run <b>deletes<\/b> the config file after testing write permission.<\/p>\n<hr \/>\n<h2 class=\"western\">\u2705 Fixed version of <span style=\"font-family: Liberation Mono, monospace;\">test_write_permission<\/span><\/h2>\n<p>Always create a temporary file <b>in the parent directory<\/b> instead of using the original path.<\/p>\n<pre>#[cfg(unix)]\r\nfn test_write_permission(path: &amp;Path) -&gt; Result&lt;(), String&gt; {\r\n    println!(\"   [perm] Testing write permission for: {:?}\", path);\r\n    \r\n    \/\/ Determine parent directory to create test file\r\n    let parent = path.parent().unwrap_or_Path::new(\"\/\"));\r\n    if !parent.exists() {\r\n        if let Err(e) = fs::create_dir_all(parent) {\r\n            return Err(format!(\"Cannot create parent directory {:?}: {}\", parent, e));\r\n        }\r\n    }\r\n\r\n    \/\/ Create a unique test file name in the parent\r\n    let test_path = parent.join(\".atrc_write_test\");\r\n    \r\n    match File::create(&amp;test_path) {\r\n        Ok(file) =&gt; {\r\n            drop(file);\r\n            match File::options().write(true).open(&amp;test_path) {\r\n                Ok(mut file) =&gt; {\r\n                    if let Err(e) = file.write_all(b\"test\") {\r\n                        let _ = fs::remove_file(&amp;test_path);\r\n                        return Err(format!(\"Cannot write to {:?}: {}\", test_path, e));\r\n                    }\r\n                }\r\n                Err(e) =&gt; {\r\n                    let _ = fs::remove_file(&amp;test_path);\r\n                    return Err(format!(\"Cannot open {:?} for writing: {}\", test_path, e));\r\n                }\r\n            }\r\n            if let Err(e) = fs::remove_file(&amp;test_path) {\r\n                warn!(\"Could not clean up test file {:?}: {}\", test_path, e);\r\n            }\r\n            println!(\"   [perm] Write permission OK.\");\r\n            Ok(())\r\n        }\r\n        Err(e) =&gt; Err(format!(\"Cannot create file {:?}: {}\", test_path, e)),\r\n    }\r\n}<\/pre>\n<p>For non\u2011Unix (Windows), we should also avoid using the original path. A similar fix applies:<\/p>\n<pre>#[cfg(not(unix))]\r\nfn test_write_permission(path: &amp;Path) -&gt; Result&lt;(), String&gt; {\r\n    println!(\"   [perm] Testing write permission for: {:?}\", path);\r\n    let parent = path.parent().unwrap_or(Path::new(\"\/\"));\r\n    if !parent.exists() {\r\n        fs::create_dir_all(parent).map_err(|e| format!(\"Cannot create parent: {}\", e))?;\r\n    }\r\n    let test_path = parent.join(\".atrc_write_test\");\r\n    \/\/ ... same test logic\r\n}<\/pre>\n<hr \/>\n<h2 class=\"western\">\ud83d\udccc Apply this fix<\/h2>\n<p>Replace your existing <span style=\"font-family: Liberation Mono, monospace;\">test_write_permission<\/span> functions with the corrected versions above. The config file will no longer be deleted.<\/p>\n<p>Your backup will work perfectly, and the config will stay in place.<\/p>\n<div class=\"pvc_clear\"><\/div>\n<p id=\"pvc_stats_3457\" class=\"pvc_stats all  \" data-element-id=\"3457\" style=\"\"><i class=\"pvc-stats-icon medium\" aria-hidden=\"true\"><svg aria-hidden=\"true\" focusable=\"false\" data-prefix=\"far\" data-icon=\"chart-bar\" role=\"img\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 512 512\" class=\"svg-inline--fa fa-chart-bar fa-w-16 fa-2x\"><path fill=\"currentColor\" d=\"M396.8 352h22.4c6.4 0 12.8-6.4 12.8-12.8V108.8c0-6.4-6.4-12.8-12.8-12.8h-22.4c-6.4 0-12.8 6.4-12.8 12.8v230.4c0 6.4 6.4 12.8 12.8 12.8zm-192 0h22.4c6.4 0 12.8-6.4 12.8-12.8V140.8c0-6.4-6.4-12.8-12.8-12.8h-22.4c-6.4 0-12.8 6.4-12.8 12.8v198.4c0 6.4 6.4 12.8 12.8 12.8zm96 0h22.4c6.4 0 12.8-6.4 12.8-12.8V204.8c0-6.4-6.4-12.8-12.8-12.8h-22.4c-6.4 0-12.8 6.4-12.8 12.8v134.4c0 6.4 6.4 12.8 12.8 12.8zM496 400H48V80c0-8.84-7.16-16-16-16H16C7.16 64 0 71.16 0 80v336c0 17.67 14.33 32 32 32h464c8.84 0 16-7.16 16-16v-16c0-8.84-7.16-16-16-16zm-387.2-48h22.4c6.4 0 12.8-6.4 12.8-12.8v-70.4c0-6.4-6.4-12.8-12.8-12.8h-22.4c-6.4 0-12.8 6.4-12.8 12.8v70.4c0 6.4 6.4 12.8 12.8 12.8z\" class=\"\"><\/path><\/svg><\/i> <img loading=\"lazy\" decoding=\"async\" width=\"16\" height=\"16\" alt=\"Loading\" src=\"http:\/\/remote-support.space\/wordpress\/wp-content\/plugins\/page-views-count\/ajax-loader-2x.gif\" border=0 \/><\/p>\n<div class=\"pvc_clear\"><\/div>\n","protected":false},"excerpt":{"rendered":"<p>The Vibe Coding Trap: Why AI Hype Is Leading Developers Over a Cliff In the past year, the term vibe coding has gained cult status. It promises a utopia where anyone can describe an app in plain English and have AI generate flawless code. The reality, however, is far darker. The seduction of instant gratification [&hellip;]<\/p>\n<div class=\"pvc_clear\"><\/div>\n<p id=\"pvc_stats_3457\" class=\"pvc_stats all  \" data-element-id=\"3457\" style=\"\"><i class=\"pvc-stats-icon medium\" aria-hidden=\"true\"><svg aria-hidden=\"true\" focusable=\"false\" data-prefix=\"far\" data-icon=\"chart-bar\" role=\"img\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 512 512\" class=\"svg-inline--fa fa-chart-bar fa-w-16 fa-2x\"><path fill=\"currentColor\" d=\"M396.8 352h22.4c6.4 0 12.8-6.4 12.8-12.8V108.8c0-6.4-6.4-12.8-12.8-12.8h-22.4c-6.4 0-12.8 6.4-12.8 12.8v230.4c0 6.4 6.4 12.8 12.8 12.8zm-192 0h22.4c6.4 0 12.8-6.4 12.8-12.8V140.8c0-6.4-6.4-12.8-12.8-12.8h-22.4c-6.4 0-12.8 6.4-12.8 12.8v198.4c0 6.4 6.4 12.8 12.8 12.8zm96 0h22.4c6.4 0 12.8-6.4 12.8-12.8V204.8c0-6.4-6.4-12.8-12.8-12.8h-22.4c-6.4 0-12.8 6.4-12.8 12.8v134.4c0 6.4 6.4 12.8 12.8 12.8zM496 400H48V80c0-8.84-7.16-16-16-16H16C7.16 64 0 71.16 0 80v336c0 17.67 14.33 32 32 32h464c8.84 0 16-7.16 16-16v-16c0-8.84-7.16-16-16-16zm-387.2-48h22.4c6.4 0 12.8-6.4 12.8-12.8v-70.4c0-6.4-6.4-12.8-12.8-12.8h-22.4c-6.4 0-12.8 6.4-12.8 12.8v70.4c0 6.4 6.4 12.8 12.8 12.8z\" class=\"\"><\/path><\/svg><\/i> <img loading=\"lazy\" decoding=\"async\" width=\"16\" height=\"16\" alt=\"Loading\" src=\"http:\/\/remote-support.space\/wordpress\/wp-content\/plugins\/page-views-count\/ajax-loader-2x.gif\" border=0 \/><\/p>\n<div class=\"pvc_clear\"><\/div>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[26],"tags":[],"class_list":["post-3457","post","type-post","status-publish","format-standard","hentry","category-artificial-intelligence"],"a3_pvc":{"activated":true,"total_views":1,"today_views":0},"_links":{"self":[{"href":"http:\/\/remote-support.space\/wordpress\/wp-json\/wp\/v2\/posts\/3457","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/remote-support.space\/wordpress\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/remote-support.space\/wordpress\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/remote-support.space\/wordpress\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/remote-support.space\/wordpress\/wp-json\/wp\/v2\/comments?post=3457"}],"version-history":[{"count":2,"href":"http:\/\/remote-support.space\/wordpress\/wp-json\/wp\/v2\/posts\/3457\/revisions"}],"predecessor-version":[{"id":3460,"href":"http:\/\/remote-support.space\/wordpress\/wp-json\/wp\/v2\/posts\/3457\/revisions\/3460"}],"wp:attachment":[{"href":"http:\/\/remote-support.space\/wordpress\/wp-json\/wp\/v2\/media?parent=3457"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/remote-support.space\/wordpress\/wp-json\/wp\/v2\/categories?post=3457"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/remote-support.space\/wordpress\/wp-json\/wp\/v2\/tags?post=3457"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}